基于 Rocky Linux 9.3 kubeadm部署kubernetes v1.28.2 多 master 集群
环境说明:
#操作系统: Rocky Linux release 9.3
#containerd版本:1.6.26
#kubernetes版本:v1.28.2
#K8S master 节点IP:192.168.2.175
#K8S master 节点IP:192.168.2.176
#K8S master 节点IP:192.168.2.177
#K8S worker节点IP:192.168.2.185
#K8S worker节点IP:192.168.2.187
#K8S worker节点IP:192.168.3.62
#K8S worker节点IP:192.168.3.70
#VIP 192.168.3.251
#网络插件:flannel
#kube-proxy网络转发: ipvs
#kubernetes源: 阿里云镜像站
#service-cidr:10.96.0.0/16
#pod-network-cidr:10.244.0.0/16
- 没做特殊说明就是在所有节点进行操作
部署准备:
操作在所有节点进行
1、修改内核参数
1 | vim /etc/sysctl.conf |
2、关闭swap
1 | swapoff -a && sysctl -w vm.swappiness=0 |
3、将 SELinux 设置为 disabled 模式
1 | setenforce 0 |
4、cgroup2 开启(经常升级内核不建议执行不然会出现升级后不能启动,只能用旧内核启动的问题)
1 | grubby \ |
5、内核模块加载
1 | cat <<EOF | tee /etc/modules-load.d/k8s.conf |
6、重启系统使上面配置生效
reboot
7、安装依赖
1 | dnf install -y dnf-utils ipvsadm telnet wget net-tools conntrack ipset jq iptables curl sysstat libseccomp socat nfs-utils fuse fuse-devel |
安装 containerd
1、导入containerd源
1 | yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo |
2、安装containerd
1 | yum install containerd.io |
containerd 配置
1、配置 containerd
1 | #生成默认配置 |
2、 创建存储挂在数据
1 | mkdir -p /var/lib/containerd/ |
3 开启开机启动并启动
1 | systemctl enable containerd.service --now |
4、查看进程是否启动
1 | systemctl status containerd.service |
5、 查看数据盘是否有文件有证明挂在正确
ll /apps/containerd/
6、 创建crictl 配置
1 | cat <<EOF | tee /etc/crictl.yaml |
8、查看配置是否生效
1 | [root@k8s-master-1 containerd]# crictl info| grep sandboxImage |
安装 kubelet kubeadm kubectl
1、 导入repo源
1 | # 注意,这里就是用el7的源,google没有为rhel8、rhel9再单独打包 |
- kubelet所有节点都需要安装
- kubectl可以安装在任意机器,只要能远程连接到k8s的节点即可
- kubeadm所有节点都需要安装
1 | # 安装yum源中最新版本 |
配置kubelet
1、 创建kubelet 存储挂在
1 | mkdir /var/lib/kubelet |
2、 查看是否挂在
1 | [root@k8s-master-1]# mount | grep kubelet |
6、刷新 service
1 | systemctl daemon-reload |
7、创建lb master1 节点
1 | # 官方文档: https://github.com/kubernetes/kubeadm/blob/main/docs/ha-considerations.md#kube-vip |
初始化kubernetes master1 执行
1 | kubeadm init --apiserver-advertise-address=0.0.0.0 \ |
部署 master2,master3 执行
1 | kubeadm join 192.168.3.251:6443 --token u9ryln.7f9t2ih8v1es5d79 \ |
部署 node 节点(所有node节点执行)
1 | kubeadm join 192.168.3.251:6443 --token vx5j0a.7n1jgk7cj7hffkmy \ |
flannel cni 部署
1 | cat <<EOF | kubectl create -f - |
集群测试
1 | [root@k8s-master-1 tmp]# kubectl get pod -A |
查看集节点信息
1 | NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME |
超大集群负载方案
由于使用kube-vip 方案同时只能一个master 对外提供服务不能多master 负载均衡 下面内部使用 127.0.0.1 每个节点启动 代理 可以是nginx haproxy
以下使用镜像:
- 项目地址 https://github.com/qist/k8s/tree/master/dockerfile/k8s-ha-master
- nginx镜像 docker.io/juestnow/nginx-proxy:1.21.6
- haproxy镜像 docker.io/juestnow/haproxy-proxy:2.5.4
- prometheus 端口 8404
- CP_HOSTS 后端 master ip 192.168.2.175,192.168.2.176,192.168.2.177
- CPU_NUM 配置进程使用cpu 数量 4
- BACKEND_PORT 后端端口 6443
- HOST_PORT 代理监听端口 8443
- 所有节点执行
- kube-vip kubectl 跟 ci/cd 工具使用
1 | cat <<EOF | tee /etc/kubernetes/manifests/kube-lb.yaml |