清晰易懂的 Kubernetes 多节点集群部署教程(生产级方案)

Kubernetes(K8s)是容器编排领域的标准平台,本教程将手把手教你从零搭建生产可用的多节点集群,覆盖单机实验、多节点部署、避坑指南及服务器选型建议,确保学完即用!


一、环境准备(所有节点)

1. 服务器最低配置

角色CPU内存磁盘网络
控制平面(Master)2核+4GB+20GB+千兆内网互通
工作节点(Worker)2核+4GB+50GB+千兆内网互通

推荐生产配置

  • 控制平面:4核/8GB/100GB(SSD)
  • 工作节点:根据业务负载动态扩展(建议 8核/16GB/200GB 起步)

2. 系统要求

  • 操作系统:Ubuntu 22.04/CentOS 7+
  • 禁用交换分区:
    swapoff -a            # 临时禁用
    sed -i '/ swap / s/^/#/' /etc/fstab  # 永久禁用
    
  • 确保主机名唯一且可解析:
    hostnamectl set-hostname master-node  # 控制平面节点
    hostnamectl set-hostname worker-node1 # 工作节点
    

二、单节点快速体验(Minikube)

1. 安装 Minikube(开发测试)

# Linux/macOS
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# Windows
choco install minikube

2. 启动单节点集群

minikube start --driver=docker --cpus=2 --memory=4g
kubectl get nodes  # 验证节点状态

三、多节点生产集群部署(kubeadm)

1. 所有节点:安装容器运行时和 K8s 组件

# 安装 containerd(推荐)
apt-get update && apt-get install -y containerd
containerd config default > /etc/containerd/config.toml
systemctl restart containerd

# 安装 kubeadm/kubelet/kubectl
apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update && apt-get install -y kubelet kubeadm kubectl

2. 控制平面节点初始化

kubeadm init \
  --apiserver-advertise-address=192.168.1.100 \  # 替换为 Master 节点 IP
  --pod-network-cidr=10.244.0.0/16 \             # 匹配网络插件
  --upload-certs \
  --control-plane-endpoint=cluster-endpoint:6443 # 高可用需配置负载均衡器

# 成功后按提示执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3. 工作节点加入集群

在控制平面节点获取加入命令:

kubeadm token create --print-join-command
# 输出示例:kubeadm join 192.168.1.100:6443 --token xyz... --discovery-token-ca-cert-hash sha256:...

在工作节点执行上述命令:

kubeadm join 192.168.1.100:6443 --token ... --discovery-token-ca-cert-hash ...

4. 安装网络插件(Calico)

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
kubectl get pods -n kube-system  # 等待所有 Pod 变为 Running

四、必学核心操作

1. 部署第一个应用

kubectl create deployment nginx --image=nginx:latest
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx  # 获取访问端口(如 30080)
curl http://节点IP:30080  # 验证访问

2. 配置文件管理

# 创建 ConfigMap
kubectl create configmap app-config --from-literal=LOG_LEVEL=debug

# 创建 Secret(Base64 编码)
echo -n 'admin' | base64  # 得到 YWRtaW4=
kubectl create secret generic db-secret --from-literal=password=YWRtaW4=

3. 持久化存储(PV/PVC)

# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/storage
kubectl apply -f pv.yaml
kubectl get pv

五、避坑指南(生产必看)

1. 证书过期导致集群不可用

  • 现象kubectl 报错 certificate has expired
  • 解决
    kubeadm alpha certs renew all  # 更新证书
    

2. 节点 NotReady 状态

  • 常见原因
    1. 网络插件未正确安装
    2. 防火墙阻断 K8s 端口(需开放 6443、2379-2380、10250-10255)
    3. 容器运行时崩溃

3. 资源配额不足

  • 现象:Pod 处于 Pending 状态
  • 解决
    1. 检查节点资源:kubectl describe node
    2. 配置资源请求与限制:
      resources:
        requests:
          memory: "512Mi"
          cpu: "500m"
        limits:
          memory: "1Gi"
          cpu: "1"
      

4. 镜像拉取失败

  • 现象ErrImagePullImagePullBackOff
  • 解决
    1. 配置镜像加速器(修改 /etc/containerd/config.toml):
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
          endpoint = ["https://registry-1.docker.io", "https://mirror.ccs.tencentyun.com"]
      

六、多节点高可用架构建议

1. 控制平面高可用

  • 部署架构
    HAProxy/Nginx → Master1 (API Server)
                 → Master2
                 → Master3
    
  • 安装步骤
    1. 使用 kubeadm init 时指定 --control-plane-endpoint=负载均衡器IP:端口
    2. 其他 Master 节点执行 kubeadm join 并添加 --control-plane 参数

2. ETCD 集群配置

kubeadm init \
  --config=kubeadm-config.yaml  # 包含 etcd 集群配置

示例 kubeadm-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
etcd:
  external:
    endpoints:
      - "https://etcd1:2379"
      - "https://etcd2:2379"
      - "https://etcd3:2379"

3. 工作节点扩展策略

  • 自动伸缩:部署 Cluster Autoscaler 根据负载动态增减节点
  • 污点与容忍:隔离专用节点(如 GPU 节点)
    kubectl taint nodes gpu-node dedicated=gpu:NoSchedule
    

七、监控与日志方案

1. 核心监控组件

工具用途
Prometheus采集集群指标
Grafana可视化监控仪表盘
Loki日志聚合

2. 快速部署监控栈

# 安装 Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 添加仓库并安装
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install kube-prometheus prometheus-community/kube-prometheus-stack

八、总结

通过本教程,你已掌握:
单机与多节点集群搭建
核心资源对象操作(Pod/Service/ConfigMap/PV)
生产级避坑指南
高可用架构设计

下一步建议

  1. 学习 Kubernetes 官方文档 深入理解架构
  2. 实践 Helm Charts 管理复杂应用
  3. 探索 Istio 服务网格 实现高级流量管理

立即动手部署你的第一个生产级 K8s 集群! 🚢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tee xm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值