1. Kubernetes 1.32高可用集群架构设计1.1 高可用核心组件解析Kubernetes高可用集群的核心在于控制平面的冗余设计。在1.32版本中etcd集群、kube-apiserver、kube-controller-manager和kube-scheduler都需要实现多节点部署。我建议采用奇数节点部署etcd集群通常3或5节点这是因为etcd使用Raft共识算法奇数节点可以避免脑裂问题。控制平面组件部署方式有两种典型模式堆叠式Stacked每个节点同时运行etcd和控制平面组件外部etcdetcd集群独立于控制平面部署对于生产环境我推荐使用外部etcd模式。这种架构虽然硬件成本略高但具有更好的隔离性和可维护性。以下是三种典型节点配置的对比节点类型推荐数量关键组件资源要求控制平面节点3kube-apiserver等控制平面组件4核CPU/16GB内存etcd节点3etcd集群4核CPU/16GB内存Worker节点≥2kubelet/kube-proxy根据工作负载调整1.2 网络拓扑规划要点网络设计是高可用集群的基础。需要特别注意节点间通信所有节点间需要双向互通Pod网络选择成熟的CNI插件Calico/Flannel等Service网络不要与物理网络重叠节点IP建议使用静态IP或可靠的DHCP保留重要提示生产环境务必避免使用192.168.0.0/16这类常见内网段建议使用10.0.0.0/8中的特定子网。2. 前置环境准备2.1 系统要求与优化我推荐使用Ubuntu 22.04 LTS或CentOS Stream 9作为主机系统。以下是必须完成的系统配置# 禁用交换分区所有节点 sudo swapoff -a sudo sed -i / swap / s/^/#/ /etc/fstab # 设置正确的时区亚洲上海 sudo timedatectl set-timezone Asia/Shanghai # 加载内核模块 cat EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF # 配置内核参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF sudo sysctl --system2.2 容器运行时安装Kubernetes 1.32已移除对Docker的直接支持建议使用containerd# 安装containerd sudo apt-get update sudo apt-get install -y containerd # 生成默认配置 sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml # 修改配置使用systemd cgroup驱动 sudo sed -i s/SystemdCgroup false/SystemdCgroup true/ /etc/containerd/config.toml # 重启服务 sudo systemctl restart containerd sudo systemctl enable containerd3. 集群部署实战3.1 使用kubeadm初始化集群在主控制节点执行初始化sudo kubeadm init \ --control-plane-endpoint LOAD_BALANCER_DNS:6443 \ --upload-certs \ --pod-network-cidr10.244.0.0/16 \ --service-cidr10.96.0.0/12 \ --image-repository registry.aliyuncs.com/google_containers关键参数说明--control-plane-endpoint负载均衡器地址高可用关键--upload-certs自动分发证书--image-repository使用国内镜像源加速初始化完成后按照提示配置kubectlmkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config3.2 加入其他控制平面节点使用kubeadm生成的join命令加入其他控制节点kubeadm join LOAD_BALANCER_DNS:6443 \ --token token \ --discovery-token-ca-cert-hash sha256:hash \ --control-plane \ --certificate-key key3.3 网络插件安装推荐使用Calico网络插件kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml验证网络插件状态kubectl get pods -n kube-system -l k8s-appcalico-node4. 高可用验证与调优4.1 集群健康检查使用以下命令验证集群状态# 查看节点状态 kubectl get nodes -o wide # 检查核心组件状态 kubectl get pods -n kube-system # 详细集群信息 kubectl cluster-info dump4.2 负载均衡配置建议使用HAProxy或Nginx作为API Server的负载均衡器。以下是HAProxy配置示例frontend k8s-api bind *:6443 mode tcp option tcplog default_backend k8s-api backend k8s-api mode tcp option tcp-check balance roundrobin server k8s-master-1 192.168.1.101:6443 check server k8s-master-2 192.168.1.102:6443 check server k8s-master-3 192.168.1.103:6443 check4.3 关键参数调优在/etc/kubernetes/manifests下的组件配置中添加以下参数# kube-apiserver优化 - --max-requests-inflight1500 - --max-mutating-requests-inflight500 - --event-ttl1h # kube-controller-manager优化 - --node-monitor-period2s - --node-monitor-grace-period16s - --pod-eviction-timeout30s5. 生产环境注意事项5.1 证书管理Kubernetes集群使用大量证书需要定期维护检查证书过期时间kubeadm certs check-expiration更新证书在控制节点执行kubeadm certs renew all5.2 备份与恢复必须定期备份etcd数据# 创建快照 ETCDCTL_API3 etcdctl \ --endpointshttps://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 /data/etcd-snapshot-$(date %Y%m%d).db恢复etcd快照kubeadm reset ETCDCTL_API3 etcdctl snapshot restore /data/etcd-snapshot.db \ --data-dir /var/lib/etcd5.3 监控方案推荐部署Prometheus-Operator监控套件helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm install kube-prometheus prometheus-community/kube-prometheus-stack \ --namespace monitoring \ --create-namespace6. 常见问题排查6.1 节点NotReady问题排查步骤检查kubelet状态systemctl status kubelet查看kubelet日志journalctl -u kubelet -f验证网络插件kubectl get pods -n kube-system检查节点资源free -h和df -h6.2 Pod一直处于Pending状态可能原因及解决方案资源不足kubectl describe node查看资源分配没有合适节点检查节点标签和Pod的nodeSelectorPV问题检查StorageClass和PVC状态6.3 网络连通性问题诊断方法# 检查Calico组件 kubectl get pods -n kube-system -l k8s-appcalico-node # 测试Pod间通信 kubectl run -it --rm --imagealpine test -- sh ping 其他PodIP # 检查网络策略 kubectl get networkpolicy -A7. 版本升级策略7.1 升级前准备备份所有关键数据etcd、应用数据阅读官方Release Notes在测试环境验证升级流程7.2 分阶段升级步骤先升级kubeadmsudo apt-get update sudo apt-get install -y kubeadm1.32.x-00升级控制平面sudo kubeadm upgrade apply v1.32.x升级kubelet和kubectlsudo apt-get update sudo apt-get install -y kubelet1.32.x-00 kubectl1.32.x-00 sudo systemctl daemon-reload sudo systemctl restart kubelet最后升级worker节点sudo kubeadm upgrade node