k8s环境搭建(从创建完一台虚拟机开始)

news/2025/3/1 20:44:34/

注意: 在这之前,所有主机需要关闭防火墙!!!

1.  docker 安装

所有主机都需要

1.1配置仓库
vim   /etc/yum.repos.d/docker.repo

https://mirror.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9/x86_64/stable/

1.2 下载

yum install -y docker-ce --allowerasing

1.3 启动

systemctl enable --now docker

1.4 配置软件仓库,就是yum仓库

2.harbor仓库创建

2.1 解压离线包(也可以去官网下)

tar zxf harbor-offline-installer-v2.5.4.tgz

2.2 修改配置文件

cd  harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

只需要修改这四处

2.3 管理harbor的容器

docker compose stop     停止所有容器
docker compose  up -d   开启所有容器

!!!证书创建

openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/tingjieli.org.key -addext "subjectAltName = DNS:reg.tingjieli.org" -x509 -days 365 -out certs/tingjieli.org.crt

2.4 将证书给其他主机

证书密码位置:/data/certs

scp /data/certs/tingjieli.org.crt  root@192.168.40.100/etc/docker/certs.d/reg.tingjieli.org/ca.crt

其他主机也一样的操作

3.master 和 slave 都配置docker并连接到harbor

3.1 修改/etc/hosts文件

因为容器启动ip会变化,所以用域名

注意:windows也需要修改hosts文件

3.2 修改docker 的yum地址

3.3 注意事项

如果登陆不上,可以尝试着重启harbor的容器

4.k8s部署

4.1 禁用交换分区、防火墙、selinux

注意:所有的交换分区必须禁用,不然k8s检测过不去

在关闭交换分区时通过注释配置文件不生效,可以通过以下方式

systemctl list-unit-files | grep swap   查看本地的交换分区

systemctl  mask dev-mapper-rhel\\x2dswap.swap  将这个分区锁了

swapoff /dev/dm-1

在 /etc/fatab注释掉开机自启

4.2 安装k8s部署工具

[k8s]
name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
gpgcheck=0

dnf install kubelet-1.30.0-150500.1.1  kubeadm-1.30.0-150500.1.1  kubectl-1.30.0-150500.1.1 -y
4.3 设置kubectl补齐命令

dnf install bash-completion -y
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

4.4 安装cri-docker
cp cri-dockerd-0.3.14-3.el8.x86_64.rpm  /opt   插件
cp libcgroup-0.41-19.el8.x86_64.rpm  /opt    插件的依赖
​dnf install *.rpm 
systemctl start cri-docker
4.5在master节点上拉取k8s需要的镜像

拉取镜像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.30.0  --cri-socket=unix:///var/run/cri-dockerd.sock

解释:第一个是镜像仓库地址,第二个选择的k8s版本,第三个用来连接docker的控制器。这里是用sock来连

将镜像上传到仓库

打包tag

docker images | awk '/google/{ print $1":"$2 }' | awk -F "/" '{system("docker tag "$0" reg.tingjieli.org/k8s/"$3)}'

上传

docker images | awk '/k8s/{system("docker push "$1":"$2)}'

注释:pause 根容器,运行其他容器之前需要运行这个,提供网络等信息,相当于操作系统

4.6 集群初始化

kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.tingjieli.org/k8s  --kubernetes-version v1.30.0 --cri-socket=unix:///var/run/cri-dockerd.sock 

如果不行的话:

记得重置

kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock

重置成功

/*

需要指定网络插件和根容器

一定要指定!!!

 vim /lib/systemd/system/cri-docker.service

然后重启

systemctl daemon-reload

systemctl start cri-docker

*/这里是node需要的

还需要指定主配置文件

临时:export KUBECONFIG=/etc/kubernetes/admin.conf
永久:echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

还缺少网络插件

4.7 安装网络插件

vim kube-flannel.yml

将image这一行修改为reg.tingjieli.org(有三行)

上传flannel镜像(两个)

docker load -i flannel-0.25.5.tag

docker tag flannel/flannel:v0.25.5 reg.tingjieli.org/flannel/flannel:v0.25.5

docker push reg.tingjieli.org/flannel/flannel:v0.25.5

docker tag flannel/flannel-cni-plugin:v1.5.1-flannel1 reg.tingjieli.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

docker push reg.tingjieli.org/flannel/flannel-cni-plugin:v1.5.1-flannel1

安装!!!

kubectl apply -f kube-flannel.yml

4.8 生成集群token

kubeadm token create --print-join-command

--cri-socket=unix:///var/run/cri-dockerd.sock

4.9 node节点加入集群

这里如果写错了,就用kubeadm reset 命令

加入的作用就是开启容器

搭建完成!!

练习

查看在哪里运行

纠正

因为我之前初始化集群的时候IP设置的有问题

之前我们这里配置的IP和flannel冲突了

删掉集群以及重置

在我们安装网络插件的时候,日志报的地址冲突,我们需要修改回去

安装flannel插件

vim  kube-flannel.yml

不用加harbor网址,它会自动去下载

kubectl apply -f kube-flannel.yml

注意:其他节点在加入前,记得reset一下

最后一定要是这个状态,否则pod起不来


http://www.ppmy.cn/news/1575864.html

相关文章

Linux下shell程序报cat写入错误:断开的管道

Linux下shell程序报cat写入错误&#xff1a;断开的管道 1. 原因分析2. 解决方法3. 示例场景4. 总结 在 Linux 中使用 cat 命令时&#xff0c;如果遇到“断开的管道”&#xff08;Broken pipe&#xff09;错误&#xff0c;通常是因为管道&#xff08;|&#xff09;或重定向的目标…

【华为OD机考】华为OD笔试真题解析(14)--开心消消乐

题目描述 给定一个N行M列的二维矩阵&#xff0c;矩阵中每个位置的数字取值为0或1&#xff0c;矩阵示例如下&#xff1a; 1 1 0 0 0 0 0 1 0 0 1 1 1 1 1 1现需要将矩阵中所有的1进行反转为0&#xff0c;规则如下&#xff1a; 当点击一个1时&#xff0c;该1被反转为0&#xf…

Opencv 图像形态学操作

3.1 形态学-腐蚀操作 img cv2.imread(CSDN.png) cv2.imshow(CSDN, img) cv2.waitKey(0) cv2.destroyAllWindows如果腐蚀核的覆盖区域内的所有像素值都满足条件&#xff08;阈值&#xff09;&#xff0c;则中心像素的值保持不变&#xff1b;如果有任何像素值不满足条件&#x…

Java基础语法练习33(单例模式:饿汉式和懒汉式)

单例模式&#xff1a;1.饿汉式 2.懒汉式 饿汉式&#xff1a; 步骤如下&#xff1a; 1.构造器私有化&#xff08;防止new&#xff09; 2.类的内部创建对象 3.向外暴露一个静态的公共方法 个人理解&#xff1a;饿&#xff08;等不及&#xff09;就是已经创建好了对象等你来…

Mac 版 本地部署deepseek ➕ RAGflow 知识库搭建流程分享(附问题解决方法)

安装&#xff1a; 1、首先按照此视频的流程一步一步进行安装&#xff1a;(macos版&#xff09;ragflowdeepseek 私域知识库搭建流程分享_哔哩哔哩_bilibili 2、RAGflow 官网文档指南&#xff1a;https://ragflow.io 3、RAGflow 下载地址&#xff1a;https://github.com/infi…

基于 Spring Boot +VUE的 “机动车号牌管理系统” 系统的设计与实现

大家好&#xff0c;今天要和大家聊的是一款基于 Spring Boot 的 “机动车号牌管理系统” 系统的设计与实现。项目源码以及部署相关事宜请联系我&#xff0c;文末附上联系方式。 项目简介 基于 Spring Boot 的 “机动车号牌管理系统” 系统设计与实现的主要使用者分为 管理员 …

av_find_input_format 和 AVInputFormat 的关系

1. av_find_input_format 和 AVInputFormat 的关系 av_find_input_format 是 FFmpeg 中的一个函数&#xff0c;用于根据输入格式的名称&#xff08;如 "mp4"、"wav"、"avfoundation" 等&#xff09;查找对应的输入格式结构体 AVInputFormat。 …

《mysql篇》--JDBC编程

JDBC是什么 JDBC就是Java DataBase Connectivity的缩写&#xff0c;翻译过来就很好理解了&#xff0c;就是java连接数据库。所以顾名思义&#xff0c;JDBC就是一种用于执行SQL语句的JavaApl&#xff0c;是Java中的数据库连接规范。为了可以方便的用Java连接各种数据库&#xff…