Kubernetes 1.20.9 高可用集群实战3节点架构与Calico网络深度配置指南1. 生产级Kubernetes集群架构设计在云原生技术栈中Kubernetes已成为容器编排的事实标准。与单节点或开发环境不同生产级集群需要充分考虑高可用性、网络性能和资源隔离。本次部署采用经典的3节点架构1个Master节点运行控制平面组件API Server、Controller Manager、Scheduler2个Worker节点运行业务负载PodCalico网络插件提供高性能的Pod网络通信和网络策略能力关键设计考量维度开发环境典型配置生产环境推荐配置节点数量1 Master 1 Worker≥3 Master ≥2 Worker网络插件FlannelCalico/Weave Net存储后端hostPathCSI驱动云存储/分布式存储日志收集StdoutEFK/ELK栈监控系统无Prometheus-Operator生产环境特别提示Master节点应配置为奇数个3/5/7以实现etcd集群的选举容错本次部署虽只有1个Master但预留了扩展接口2. 基础环境准备与系统调优2.1 硬件规格建议# Master节点最低配置实测数据 CPU: 4核 内存: 8GB 磁盘: 100GB系统盘 100GB数据盘 # Worker节点推荐配置 CPU: 8核 内存: 16GB 磁盘: 根据业务需求配置2.2 系统级参数优化必须执行的Linux内核调优# 禁用Swap所有节点执行 swapoff -a sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab # 配置网络桥接所有节点执行 cat EOF | sudo tee /etc/modules-load.d/k8s.conf 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 --system关键软件版本要求组件最低版本推荐版本验证命令Docker19.0320.10.7docker --versionkubeadm1.20.01.20.9kubeadm version内核4.195.4uname -r3. 高可用集群部署实战3.1 Master节点初始化创建kubeadm配置文件kubeadm-config.yamlapiVersion: kubeadm.k8s.io/v1beta2 kind: InitConfiguration localAPIEndpoint: advertiseAddress: 192.168.10.100 # 替换为实际Master IP bindPort: 6443 nodeRegistration: criSocket: /var/run/dockershim.sock taints: - effect: NoSchedule key: node-role.kubernetes.io/master --- apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration kubernetesVersion: v1.20.9 controlPlaneEndpoint: cluster-endpoint:6443 # 高可用VIP或域名 networking: podSubnet: 192.168.0.0/16 # 必须与Calico默认CIDR匹配 serviceSubnet: 10.96.0.0/16 imageRepository: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images执行初始化命令kubeadm init --configkubeadm-config.yaml --upload-certs初始化成功后的关键操作mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config3.2 Worker节点加入集群使用Master初始化输出的join命令kubeadm join cluster-endpoint:6443 \ --token token \ --discovery-token-ca-cert-hash sha256:hash \ --control-plane # 如果是添加Master节点需要此参数令牌管理技巧# 查看现有token kubeadm token list # 创建新token默认24小时有效期 kubeadm token create --print-join-command4. Calico网络插件深度配置4.1 基础安装# 下载最新Calico manifest curl https://docs.projectcalico.org/manifests/calico.yaml -O # 部署Calico kubectl apply -f calico.yaml4.2 高级网络策略配置示例创建网络策略限制default命名空间的Pod访问apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny namespace: default spec: podSelector: {} policyTypes: - Ingress - EgressCalico性能调优参数参数默认值生产建议值作用FELIX_IPTABLESREFRESHINTERVAL60s10siptables规则刷新频率FELIX_IPV6SUPPORTfalse根据需求IPv6支持开关CALICO_IPV4POOL_IPIPAlwaysNever/CrossSubnetIPIP封装模式5. 集群验证与运维技巧5.1 健康状态检查# 查看节点状态应全部为Ready kubectl get nodes -o wide # 检查核心组件状态 kubectl get pods -n kube-system # 网络连通性测试 kubectl run test-nginx --imagenginx --restartNever kubectl exec test-nginx -- curl -I http://www.google.com5.2 常见问题排查指南问题1Node状态为NotReady# 检查kubelet日志 journalctl -u kubelet -f # 验证网络插件Pod状态 kubectl logs -n kube-system calico-pod-name问题2Pod网络不通# 检查Calico IP池分配 kubectl get ippools -o yaml # 验证路由规则 ip route show6. 生产环境增强配置6.1 证书自动续期修改kube-controller-manager配置spec: containers: - command: - kube-controller-manager - --experimental-cluster-signing-duration87600h0m0s # 10年有效期 - --feature-gatesRotateKubeletServerCertificatetrue6.2 关键监控指标必须监控的核心指标API Server延迟apiserver_request_duration_secondsetcd写入延迟etcd_disk_wal_fsync_duration_seconds节点内存压力node_memory_MemAvailable_bytesPod重启次数kube_pod_container_status_restarts_totalGrafana监控看板推荐kubectl apply -f https://raw.githubusercontent.com/kubernetes-monitoring/kubernetes-mixin/master/grafana/dashboards.json7. 架构扩展与升级路径7.1 多Master高可用方案通过添加LoadBalancer实现graph LR LB[LoadBalancer] -- MASTER1[Master1:6443] LB -- MASTER2[Master2:6443] LB -- MASTER3[Master3:6443]7.2 版本升级策略采用kubeadm的滚动升级# 1. 升级第一个Master kubeadm upgrade plan kubeadm upgrade apply v1.21.0 # 2. 逐个升级其他节点 kubeadm upgrade node在长期维护的多个生产集群实践中Calico的BGP模式与硬件负载均衡器的组合能够提供最佳的网络性能。特别是在节点规模超过50个时需要特别注意etcd的存储配额和磁盘IOPS配置。