logo

从零到一:Kubernetes集群生产环境部署全流程指南

作者:有好多问题2025.09.26 16:45浏览量:4

简介:本文详细阐述Kubernetes集群部署的完整流程,涵盖环境准备、组件安装、配置优化及运维管理,提供可落地的技术方案与故障排查指南。

一、部署前环境准备

1.1 基础设施选型

生产环境推荐使用3节点高可用架构,节点配置建议不低于4核16G内存,磁盘采用SSD+HDD混合存储方案。网络拓扑需规划独立的管理网络(Control Plane)与业务网络(Data Plane),推荐使用BGP路由协议实现Pod网络互通。

1.2 操作系统调优

  • 内核参数优化:
    ```bash

    修改sysctl配置

    cat < /etc/sysctl.d/99-kubernetes.conf
    net.ipv4.ip_forward=1
    net.bridge.bridge-nf-call-iptables=1
    fs.inotify.max_user_watches=1048576
    EOF

加载br_netfilter模块

modprobe br_netfilter

  1. - 文件系统限制调整:
  2. ```bash
  3. # 修改/etc/security/limits.conf
  4. * soft nofile 65536
  5. * hard nofile 65536
  6. * soft nproc 65536
  7. * hard nproc 65536

1.3 容器运行时选择

生产环境推荐containerd作为运行时,其优势在于:

  • 轻量级架构(仅依赖runc)
  • 符合OCI标准的镜像管理
  • 低于50MB的内存占用
  • 支持CRI接口的标准实现

安装命令示例:

  1. # 安装containerd
  2. curl -L https://github.com/containerd/containerd/releases/download/v1.7.11/containerd-1.7.11-linux-amd64.tar.gz | tar -xz -C /usr/local
  3. # 生成配置文件
  4. mkdir -p /etc/containerd
  5. containerd config default > /etc/containerd/config.toml
  6. # 修改配置启用systemd cgroup驱动
  7. sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

二、核心组件安装部署

2.1 控制平面组件安装

使用kubeadm初始化控制平面:

  1. # 生成初始化配置
  2. kubeadm config print init-defaults > kubeadm-init.yaml
  3. # 修改关键配置项
  4. apiServer:
  5. extraArgs:
  6. authorization-mode: Node,RBAC
  7. audit-webhook-batch-max-size: "100"
  8. controllerManager:
  9. extraArgs:
  10. node-monitor-grace-period: "40s"
  11. pod-eviction-timeout: "5m0s"
  12. scheduler:
  13. extraArgs:
  14. leader-elect-resource-lock: "leases"
  15. # 执行初始化
  16. kubeadm init --config kubeadm-init.yaml --upload-certs

2.2 工作节点加入集群

  1. # 主节点获取join命令
  2. kubeadm token create --print-join-command
  3. # 工作节点执行(示例)
  4. kubeadm join 192.168.1.10:6443 --token abcdef.1234567890abcdef \
  5. --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxx \
  6. --control-plane # 如果是加入控制平面节点

2.3 网络插件部署

推荐Calico作为网络插件,其企业版特性包括:

  • 网络策略增强
  • 流量可视化
  • 跨云网络支持

安装命令:

  1. # 基础版安装
  2. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
  3. # 企业版配置示例
  4. cat <<EOF | kubectl apply -f -
  5. apiVersion: operator.tigera.io/v1
  6. kind: Installation
  7. metadata:
  8. name: default
  9. spec:
  10. calicoNetwork:
  11. bgp: Disabled
  12. ipPools:
  13. - cidr: 10.244.0.0/16
  14. encapsulation: VXLAN
  15. natOutgoing: Enabled
  16. nodeSelector: all()
  17. EOF

三、集群优化与验证

3.1 性能调优参数

  • etcd配置优化:

    1. # /etc/kubernetes/manifests/etcd.yaml 修改示例
    2. spec:
    3. containers:
    4. - command:
    5. - etcd
    6. - --snapshot-count=10000
    7. - --quota-backend-bytes=8589934592 # 8GB
    8. - --max-request-bytes=33554432 # 32MB
  • kube-apiserver优化:

    1. # /etc/kubernetes/manifests/kube-apiserver.yaml
    2. spec:
    3. containers:
    4. - command:
    5. - kube-apiserver
    6. - --default-not-ready-toleration-seconds=300
    7. - --default-unreachable-toleration-seconds=300
    8. - --service-account-signing-key-file=/etc/kubernetes/pki/sa.key
    9. - --service-account-key-file=/etc/kubernetes/pki/sa.pub

3.2 集群健康检查

  1. # 核心组件状态检查
  2. kubectl get cs
  3. # 节点资源检查
  4. kubectl top nodes
  5. # 事件日志分析
  6. kubectl get events --sort-by='.metadata.creationTimestamp'
  7. # 自动化检查脚本示例
  8. #!/bin/bash
  9. CHECK_ITEMS=(
  10. "kubectl get nodes --no-headers | awk '{print \$2}' | grep -v Ready | wc -l"
  11. "kubectl get pods -n kube-system --no-headers | grep -v Running | wc -l"
  12. "kubectl get ingress --no-headers | grep -v '<none>' | wc -l"
  13. )
  14. for item in "${CHECK_ITEMS[@]}"; do
  15. count=$(eval $item)
  16. if [ $count -gt 0 ]; then
  17. echo "警告:发现异常项 $(echo $item | cut -d\" -f2)"
  18. fi
  19. done

四、运维管理最佳实践

4.1 备份恢复策略

  • etcd数据备份:

    1. # 创建备份目录
    2. mkdir -p /backup/etcd
    3. # 执行备份(需在kube-apiserver节点)
    4. ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
    5. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
    6. --cert=/etc/kubernetes/pki/etcd/server.crt \
    7. --key=/etc/kubernetes/pki/etcd/server.key \
    8. snapshot save /backup/etcd/snapshot-$(date +%Y%m%d).db
  • 集群状态备份:

    1. # 使用velero进行应用级备份
    2. velero backup create full-backup \
    3. --include-cluster-resources \
    4. --storage-location=default

4.2 升级策略实施

推荐采用金丝雀升级方式:

  1. 先升级单个控制平面节点
  2. 验证核心组件(api-server、etcd)健康状态
  3. 逐步升级剩余控制平面节点
  4. 分批次升级工作节点(每次不超过1/3)

升级命令示例:

  1. # 查看可用版本
  2. kubeadm upgrade plan
  3. # 执行升级
  4. kubeadm upgrade apply v1.28.4
  5. # 节点升级
  6. kubeadm upgrade node
  7. # 升级kubelet
  8. systemctl restart kubelet

4.3 安全加固方案

  • RBAC权限控制示例:
    ```yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
    namespace: dev
    name: pod-reader
    rules:
  • apiGroups: [“”]
    resources: [“pods”]
    verbs: [“get”, “list”, “watch”]

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: dev
subjects:

  • kind: User
    name: alice@example.com
    apiGroup: rbac.authorization.k8s.io
    roleRef:
    kind: Role
    name: pod-reader
    apiGroup: rbac.authorization.k8s.io
    ```

  • Pod安全策略配置:

    1. apiVersion: policy/v1beta1
    2. kind: PodSecurityPolicy
    3. metadata:
    4. name: restricted
    5. spec:
    6. privileged: false
    7. allowPrivilegeEscalation: false
    8. hostNetwork: false
    9. hostPorts:
    10. - min: 10000
    11. max: 11000
    12. runAsUser:
    13. rule: MustRunAsNonRoot
    14. seLinux:
    15. rule: RunAsAny
    16. supplementalGroups:
    17. rule: MustRunAs
    18. ranges:
    19. - min: 1
    20. max: 65535
    21. fsGroup:
    22. rule: MustRunAs
    23. ranges:
    24. - min: 1
    25. max: 65535
    26. volumes:
    27. - 'configMap'
    28. - 'emptyDir'
    29. - 'projected'
    30. - 'secret'
    31. - 'downwardAPI'
    32. - 'persistentVolumeClaim'

五、故障排查指南

5.1 常见问题处理

  • 节点NotReady状态

    1. # 检查kubelet日志
    2. journalctl -u kubelet -n 100 --no-pager
    3. # 常见原因:
    4. # 1. CNI插件未正常运行
    5. # 2. 容器运行时故障
    6. # 3. 证书过期
    7. # 4. 资源不足(内存/磁盘)
  • Pod一直Pending

    1. # 检查事件日志
    2. kubectl describe pod <pod-name> | grep -A 20 Events
    3. # 常见原因:
    4. # 1. 资源不足(CPU/内存请求超过节点容量)
    5. # 2. 持久卷绑定失败
    6. # 3. 调度器限制(节点选择器/亲和性)
    7. # 4. 镜像拉取失败

5.2 高级诊断工具

  • crictl命令集

    1. # 查看容器状态
    2. crictl ps -a
    3. # 查看容器日志
    4. crictl logs <container-id>
    5. # 执行容器内命令
    6. crictl exec -it <container-id> sh
  • etcd诊断
    ```bash

    检查集群健康状态

    ETCDCTL_API=3 etcdctl —endpoints=https://127.0.0.1:2379 \
    —cacert=/etc/kubernetes/pki/etcd/ca.crt \
    —cert=/etc/kubernetes/pki/etcd/server.crt \
    —key=/etc/kubernetes/pki/etcd/server.key \
    endpoint health

检查存储使用情况

etcdctl endpoint status —write-out=table
```

本教程完整覆盖了Kubernetes从环境准备到生产运维的全生命周期管理,特别针对企业级部署场景提供了经过验证的配置方案和故障处理指南。建议在实际部署前进行充分的测试环境验证,并根据具体业务需求调整参数配置。对于超大规模集群(1000+节点),建议考虑采用分区域部署架构和自动化运维平台。

相关文章推荐

发表评论

活动