一、为什么需要多节点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驱动
  • 网络策略可能导致意料之外的隔离
  • 控制平面组件需要定期备份

六、避坑指南:血泪经验总结

  1. 证书过期危机
# 提前三个月检查证书
kubeadm certs check-expiration
  1. 资源配额陷阱
# 内存限制的正确姿势
resources:
  limits:
    memory: "512Mi"
  requests:
    memory: "256Mi"
  1. 节点压力驱逐策略
# 调整kubelet参数
--eviction-hard=memory.available<500Mi
--eviction-minimum-reclaim=memory.available=100Mi