Kubernetes 1.20.9 高可用集群实战:3节点架构与Calico网络深度配置指南

1. 生产级Kubernetes集群架构设计

在云原生技术栈中,Kubernetes已成为容器编排的事实标准。与单节点或开发环境不同,生产级集群需要充分考虑高可用性、网络性能和资源隔离。本次部署采用经典的3节点架构:

  • 1个Master节点 :运行控制平面组件(API Server、Controller Manager、Scheduler)
  • 2个Worker节点 :运行业务负载Pod
  • Calico网络插件 :提供高性能的Pod网络通信和网络策略能力

关键设计考量

维度 开发环境典型配置 生产环境推荐配置
节点数量 1 Master + 1 Worker ≥3 Master + ≥2 Worker
网络插件 Flannel Calico/Weave Net
存储后端 hostPath CSI驱动+云存储/分布式存储
日志收集 Stdout EFK/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

关键软件版本要求

组件 最低版本 推荐版本 验证命令
Docker 19.03 20.10.7 docker --version
kubeadm 1.20.0 1.20.9 kubeadm version
内核 4.19 5.4+ uname -r

3. 高可用集群部署实战

3.1 Master节点初始化

创建kubeadm配置文件 kubeadm-config.yaml

apiVersion: 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 --config=kubeadm-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/config

3.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-command

4. Calico网络插件深度配置

4.1 基础安装

# 下载最新Calico manifest
curl https://docs.projectcalico.org/manifests/calico.yaml -O

# 部署Calico
kubectl apply -f calico.yaml

4.2 高级网络策略配置示例

创建网络策略限制default命名空间的Pod访问:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

Calico性能调优参数

参数 默认值 生产建议值 作用
FELIX_IPTABLESREFRESHINTERVAL 60s 10s iptables规则刷新频率
FELIX_IPV6SUPPORT false 根据需求 IPv6支持开关
CALICO_IPV4POOL_IPIP Always Never/CrossSubnet IPIP封装模式

5. 集群验证与运维技巧

5.1 健康状态检查

# 查看节点状态(应全部为Ready)
kubectl get nodes -o wide

# 检查核心组件状态
kubectl get pods -n kube-system

# 网络连通性测试
kubectl run test-nginx --image=nginx --restart=Never
kubectl exec test-nginx -- curl -I http://www.google.com

5.2 常见问题排查指南

问题1:Node状态为NotReady

# 检查kubelet日志
journalctl -u kubelet -f

# 验证网络插件Pod状态
kubectl logs -n kube-system <calico-pod-name>

问题2:Pod网络不通

# 检查Calico IP池分配
kubectl get ippools -o yaml

# 验证路由规则
ip route show

6. 生产环境增强配置

6.1 证书自动续期

修改kube-controller-manager配置:

spec:
  containers:
  - command:
    - kube-controller-manager
    - --experimental-cluster-signing-duration=87600h0m0s  # 10年有效期
    - --feature-gates=RotateKubeletServerCertificate=true

6.2 关键监控指标

必须监控的核心指标

  • API Server延迟(apiserver_request_duration_seconds)
  • etcd写入延迟(etcd_disk_wal_fsync_duration_seconds)
  • 节点内存压力(node_memory_MemAvailable_bytes)
  • Pod重启次数(kube_pod_container_status_restarts_total)

Grafana监控看板推荐

kubectl apply -f https://raw.githubusercontent.com/kubernetes-monitoring/kubernetes-mixin/master/grafana/dashboards.json

7. 架构扩展与升级路径

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配置。

更多推荐