Rocky Linux部署高可用Kubernetes集群实战指南
1. 项目概述
在当今云原生技术蓬勃发展的背景下,Kubernetes已成为容器编排领域的事实标准。而Rocky Linux作为RHEL的替代品,凭借其稳定性和兼容性,正逐渐成为企业级部署的首选操作系统。本文将详细记录在Rocky Linux系统上部署多Master高可用Kubernetes集群的全过程,涵盖从环境准备到最终验证的每个关键环节。
2. 环境准备与系统配置
2.1 硬件与网络规划
对于生产环境的高可用Kubernetes集群,建议至少配置3个Master节点和若干Worker节点。每个Master节点应满足:
- 4核CPU或以上
- 8GB内存或以上
- 40GB磁盘空间
- 千兆网络连接
网络规划需要考虑:
- 节点间通信网络(建议10Gbps)
- Pod网络CIDR(如10.244.0.0/16)
- Service网络CIDR(如10.96.0.0/12)
2.2 Rocky Linux基础配置
在所有节点上执行以下基础配置:
# 设置主机名 hostnamectl set-hostname master1 # 配置静态IP nmcli con mod "ens192" ipv4.addresses "192.168.1.101/24" nmcli con mod "ens192" ipv4.gateway "192.168.1.1" nmcli con mod "ens192" ipv4.dns "8.8.8.8" nmcli con mod "ens192" ipv4.method manual nmcli con up "ens192" # 关闭SELinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 配置时间同步 yum install chrony -y systemctl enable chronyd systemctl start chronyd3. 容器运行时与Kubernetes组件安装
3.1 安装Docker容器运行时
# 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加Docker仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker yum install -y docker-ce docker-ce-cli containerd.io # 配置Docker mkdir /etc/docker cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF # 启动Docker systemctl enable docker systemctl start docker3.2 安装Kubernetes组件
# 添加Kubernetes仓库 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF # 安装kubeadm, kubelet和kubectl yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes # 设置kubelet开机启动 systemctl enable kubelet4. 高可用集群部署
4.1 初始化第一个Master节点
kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" \ --upload-certs \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12初始化完成后,按照输出提示配置kubectl:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config4.2 加入其他Master节点
在其他Master节点上执行以下命令加入集群:
kubeadm join LOAD_BALANCER_DNS:LOAD_BALANCER_PORT \ --token <token> \ --discovery-token-ca-cert-hash sha256:<hash> \ --control-plane \ --certificate-key <key>4.3 部署网络插件
这里选择Calico作为网络插件:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml5. 高可用配置与验证
5.1 配置负载均衡器
在生产环境中,建议使用专业的负载均衡器(如HAProxy或Nginx)来分发Master节点的API Server流量。以下是HAProxy的示例配置:
frontend kubernetes bind *:6443 option tcplog mode tcp default_backend kubernetes-master-nodes backend kubernetes-master-nodes mode tcp balance roundrobin option tcp-check server master1 192.168.1.101:6443 check fall 3 rise 2 server master2 192.168.1.102:6443 check fall 3 rise 2 server master3 192.168.1.103:6443 check fall 3 rise 25.2 验证集群状态
# 查看节点状态 kubectl get nodes # 查看组件状态 kubectl get componentstatuses # 查看Pod状态 kubectl get pods --all-namespaces6. 生产环境优化与维护
6.1 证书管理
Kubernetes集群默认证书有效期为1年,建议定期检查并更新:
# 检查证书有效期 kubeadm certs check-expiration # 更新证书 kubeadm certs renew all6.2 备份与恢复
定期备份etcd数据至关重要:
# 备份etcd ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ snapshot save /opt/etcd-backup.db # 恢复etcd ETCDCTL_API=3 etcdctl snapshot restore /opt/etcd-backup.db \ --data-dir /var/lib/etcd-backup7. 常见问题排查
7.1 节点NotReady状态
可能原因及解决方案:
- 网络插件未正确安装 - 重新部署网络插件
- kubelet服务未运行 -
systemctl restart kubelet - 容器运行时问题 - 检查Docker/containerd日志
7.2 API Server不可用
检查步骤:
- 验证负载均衡器是否健康
- 检查Master节点kube-apiserver Pod状态
- 查看kube-apiserver日志:
journalctl -u kubelet -n 100
7.3 etcd集群健康检查
ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/server.crt \ --key=/etc/kubernetes/pki/etcd/server.key \ endpoint health8. 性能优化建议
调整kubelet参数:
--max-pods=100 --kube-api-qps=50 --kube-api-burst=100优化etcd性能:
- 使用SSD存储
- 分离etcd数据目录和wal目录
- 定期压缩历史数据
配置合理的资源请求和限制:
resources: requests: cpu: "500m" memory: "512Mi" limits: cpu: "1000m" memory: "1Gi"
在实际部署过程中,我发现Rocky Linux作为Kubernetes的宿主操作系统表现非常稳定,特别是在长时间运行的场景下。对于生产环境,建议在部署前充分测试网络性能和存储IO,这往往是集群性能的瓶颈所在。另外,定期维护和监控是保证集群长期稳定运行的关键。
