K8s集群的环境部署
1.测试环境所需要的主机名和IP和扮演的角色
harbor 172.25.254.200 harbor仓库
k8s-master 172.25.254.100 k8s集群控制节点
k8s-node1 172.25.254.10 k8s集群工作节点
k8s-node2 172.25.254.20 k8集群工作节点
注意:所有节点禁用selinux和防火墙
所有节点同步时间和地址解析
所有节点安装docker
所有节点禁用swap 注意注释掉/etc/fstab文件中的定义
为什么禁用swap?
内存速度远快于 Swap,使用 Swap 会导致性能下降,影响节点和应用响应速度。
Kubernetes 依赖 kubelet 管理节点资源,而 kubelet 默认无法有效处理 Swap,可能导致资源分配错误。
Swap 可能延迟内存压力的响应,导致节点或 Pod 进入不稳定状态。
关闭所有节点的火墙和禁用iptables
1.master 和node harbor禁用swap
swapon -s#查看磁盘名
Filename Type Size Used Priority
/dev/dm-1 partition 2097148 0 -2
]# systemctl mask swap.target
]# swapoff -a
]# vim /etc/fstab
#/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media iso9660 defaults 0 0
2.master和node harbor都做本地解析
[root@k8s-master ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.100 k8s-master.timinglee.org
172.25.254.10 k8s-node1.timinglee.org
172.25.254.20 k8s-node2.timinglee.org
172.25.254.254 reg.timinglee.org
3.master和node harbor都安装docker
[root@k8s-master ~]# vim /etc/yum.repos.d/docker.repo
[docker] name=docker
baseurl=https://mirrors.aliyun.com/docker-ce/linux/rhel/9/x86_64/stable/
gpgcheck=0
[root@k8s-master ~]# dnf install docker-ce -y
4.所有节点设定 docker资源管理模式为systemd
[root@k8s-master ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://reg.timinglee.org"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
4.复制harbor仓库中的证书并启动docker
k8s-master:#mkdir /etc/docker/certs.d/reg.timinglee.org/ -p
harbor:#scp /data/certs/timinglee.org.crt root@172.25.254.100:/etc/docker/certs.d/reg.timinglee.org/ca.crt
同时把密钥拷给所有node节点
确保master和所有节点都能访问harbor仓库
5.安装k8s部署工具
添加软件仓库中k8s源
[root@k8s-master ~]# vim /etc/yum.repos.d/k8s.repo
[k8s] name=k8s
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm
gpgcheck=0
#安装软件 [root@k8s-master ~]# dnf install kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0 -y
4.设置kubectl命令补全功能
[root@k8s-master ~]# dnf install bash-completion -y
[root@k8s-master ~]# echo "source > ~/.bashrc
[root@k8s-master ~]# source ~/.bashrc
5.在master节点拉取k8s所需要的镜像
kubeadm config print init-defaults
手动指定镜像下载位置和容器管理接口
kubeadm config images pull \
--image-repository registry.aliyuncs.com/google_containers \ #拉取镜像的位置现在我们所用的为aliyun的
--kubernetes-version v1.30.0 \ #需要的版本
--cri-socket=unix:///var/run/cri-dockerd.sock #拉取需要连接容器控制器使用
先在master登录harbor仓库
拉取结束上传至我们的harbor仓库
[root@k8s-master ~]# docker images | awk '/google/{ print $1":"$2}' \ | awk -F "/" '{system("docker tag "$0" reg.timinglee.org/k8s/"$3)}'
[root@k8s-master ~]# docker images | awk '/k8s/{system("docker push "$1":"$2)}'
6..在节点安装cri-docker
k8s从1.24版本开始就移除了dockershim 所以节点安装cri-docker插件才能使同docker
在节点安装插件和插件依赖性用docker管理k8s 和docker依赖
vim/lib/systemd/system/cri-docker.service#编写该文件夹 加上网络插件和根容器
指定网络插件名称及基础容器镜像 ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --networkplugin=cni --pod-infra-container-image=reg.timinglee.org/k8
systemctl daemon-reload
以上操作master和node节点都要做
例:scp -r /lib/systemd/system/cri-docker.service @root172.25.254.10:/lib/systemd/system/cri-docker.service
7.集群初始化
#kubeadm init --pod-network-cidr=192.188.0.0/16 \ #初始化并设定容器集群的网络
--image-repository reg.timinglee.org/k8s \ #
--kubernetes-version v1.30.0 \ #指k8s版本
--cri-socket=unix:///var/run/cri-dockerd.sock #指定插件使docker和k8s结合到一起使用
#kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock重置集群
8.指定主配置文件
#指定集群配置文件变量 [
root@k8s-master ~]# echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile
初始化完成
9.安装网络插件
导入flannel插件 和 kube-flannel.yml
将网络插件导入到本地docker仓库 并且上传到harbor仓库中
kubectl apply -f kube-flannel.yml 安装flannel.yml
10.节点扩容
1.禁用swap
2.安装kubelet-1.30.0 kubeadm-1.30.0 kubectl-1.30.0
docker-ce
cri-dockerd#连接docker和k8s 的 还有一个依赖
修改cri-dockerd启动文件添加 vim /lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --networkplugin=cni --pod-infra-container-image=reg.timinglee.org/k8s/pause:3.9
5 启动服务 kubelet.service cri-docker.service
root@k8s-node1 & 2 ~]# kubeadm join 172.25.254.100:6443 --token 5hwptm.zwn7epa6pvatbpwf --discovery-token-ca-cert-hash sha256:52f1a83b70ffc8744db5570288ab51987ef2b563bf906ba4244a300f61e9db23 --crisocket=unix:///var/run/cri-dockerd.soc