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 chronyd
3. 容器运行时与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 docker
3.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 kubelet
4. 高可用集群部署
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/config
4.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.yaml
5. 高可用配置与验证
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 2
5.2 验证集群状态
# 查看节点状态
kubectl get nodes
# 查看组件状态
kubectl get componentstatuses
# 查看Pod状态
kubectl get pods --all-namespaces
6. 生产环境优化与维护
6.1 证书管理
Kubernetes集群默认证书有效期为1年,建议定期检查并更新:
# 检查证书有效期
kubeadm certs check-expiration
# 更新证书
kubeadm certs renew all
6.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-backup
7. 常见问题排查
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 health
8. 性能优化建议
-
调整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,这往往是集群性能的瓶颈所在。另外,定期维护和监控是保证集群长期稳定运行的关键。
更多推荐

所有评论(0)