一、为什么需要多节点Kubernetes集群?
当开发者在单机上玩转Docker容器之后,很快会遇到真实世界的挑战:如何管理上百个服务实例?如何在服务器宕机时保障业务不中断?这时就需要Kubernetes这样的容器编排工具。多节点集群不仅能实现高可用,还能通过智能调度算法将容器分散到不同节点,真正发挥分布式系统的威力。
真实场景举例:某电商平台大促期间,支付服务需在3个物理机房部署20个副本。通过Kubernetes的节点亲和性配置,既可确保跨机房容灾,又能根据服务器负载动态调整容器分布。
二、搭建实战:用kubeadm构建三节点集群
(技术栈:Ubuntu 22.04 + Containerd)
环境准备
sudo swapoff -a # 禁用交换分区
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 永久关闭
sudo apt install -y apt-transport-https curl
主节点初始化
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.1.100 \
--control-plane-endpoint=master:6443
# 出现以下提示时继续操作
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
工作节点加入集群
# 从主节点获取加入命令
kubeadm token create --print-join-command
# 在工作节点执行类似如下命令
kubeadm join master:6443 --token abcdef.1234567890 \
--discovery-token-ca-cert-hash sha256:xxxxxx
验证集群状态
kubectl get nodes -o wide # 应看到三个节点处于Ready状态
kubectl get pods -n kube-system # 确认核心组件运行正常
三、应用上线全流程:部署Nginx带配置的热更新
步骤1:创建ConfigMap存储配置
# nginx-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-conf
data:
default.conf: |
server {
listen 80;
location / {
return 200 "Hello from Kubernetes!";
}
}
步骤2:部署带滚动更新的Deployment
# nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
volumeMounts:
- name: config
mountPath: /etc/nginx/conf.d
volumes:
- name: config
configMap:
name: nginx-conf
步骤3:暴露服务到公网
# nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30080
selector:
app: nginx
四、必须了解的关联技术
1. CNI网络插件选型(以Calico为例)
# 安装网络插件
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml
# 验证网络连通性
kubectl run test --image=alpine --rm -it -- ping 10.244.1.2
2. Helm包管理实战
# 安装Prometheus监控
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/kube-prometheus-stack
五、技术选型深度分析
应用场景对比
场景类型 | 适用技术 | 典型案例 |
---|---|---|
中小规模部署 | kubeadm + Flannel | 企业内部管理系统 |
混合云环境 | kubespray + Cilium | 跨AWS/Azure的微服务 |
边缘计算 | K3s + Traefik | 物联网设备管理系统 |
Kubernetes的AB面
优势:
- 自愈能力:自动重启异常容器
- 横向扩展:一键调整副本数量
- 服务发现:内置DNS解析服务
注意事项:
- 存储方案需配合CSI驱动
- 网络策略可能导致意料之外的隔离
- 控制平面组件需要定期备份
六、避坑指南:血泪经验总结
- 证书过期危机
# 提前三个月检查证书
kubeadm certs check-expiration
- 资源配额陷阱
# 内存限制的正确姿势
resources:
limits:
memory: "512Mi"
requests:
memory: "256Mi"
- 节点压力驱逐策略
# 调整kubelet参数
--eviction-hard=memory.available<500Mi
--eviction-minimum-reclaim=memory.available=100Mi