Kubernetes 1.20.9 集群部署实战:3节点高可用架构与 Calico 网络插件配置
·
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配置。
更多推荐
所有评论(0)