logo

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

作者:新兰2025.09.26 16:44浏览量:1

简介:本文详细阐述 Kubernetes 集群的部署流程,涵盖环境准备、集群搭建、核心组件配置及运维实践,提供可落地的生产级部署方案。

一、部署前环境准备与规划

1.1 基础设施选型

生产环境部署需根据业务规模选择基础设施:

  • 云平台方案:AWS EKS、Azure AKS、GCP GKE 提供托管服务,简化运维但灵活性受限
  • 物理机方案:适合对数据主权要求高的场景,需自行搭建网络存储(如Ceph)
  • 虚拟机方案:推荐使用KVM或VMware,需确保嵌套虚拟化支持

硬件配置建议(以3节点控制平面为例):
| 角色 | CPU核心 | 内存 | 存储 | 网络带宽 |
|——————|————-|———-|———-|—————|
| 控制节点 | 4核 | 16GB | 200GB | 1Gbps |
| 工作节点 | 8核 | 32GB+ | 500GB | 10Gbps |

1.2 操作系统优化

推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需进行以下优化:

  1. # 禁用交换分区(Kubernetes要求)
  2. swapoff -a
  3. sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  4. # 配置内核参数
  5. cat <<EOF > /etc/sysctl.d/k8s.conf
  6. net.bridge.bridge-nf-call-ip6tables = 1
  7. net.bridge.bridge-nf-call-iptables = 1
  8. net.ipv4.ip_forward = 1
  9. EOF
  10. sysctl --system
  11. # 安装容器运行时(以containerd为例)
  12. cat <<EOF > /etc/modules-load.d/containerd.conf
  13. overlay
  14. br_netfilter
  15. EOF
  16. modprobe overlay
  17. modprobe br_netfilter

1.3 网络拓扑设计

推荐采用三层网络架构:

  1. 物理网络层:使用VXLAN或NVGRE实现跨主机通信
  2. 集群网络层:配置Calico或Cilium实现网络策略
  3. 服务网格层:可选部署Istio或Linkerd

CIDR分配方案示例:

  • 服务CIDR:10.96.0.0/12
  • Pod CIDR:10.244.0.0/16(每个节点256个IP)
  • 集群DNS:10.96.0.10

二、集群安装与配置

2.1 控制平面部署

使用kubeadm初始化控制平面(v1.27+示例):

  1. # 初始化命令(需替换${API_SERVER_CERT_SAN})
  2. kubeadm init --control-plane-endpoint=${LOAD_BALANCER_IP} \
  3. --apiserver-advertise-address=${CONTROL_PLANE_IP} \
  4. --pod-network-cidr=10.244.0.0/16 \
  5. --service-cidr=10.96.0.0/12 \
  6. --apiserver-cert-extra-sans=${API_SERVER_CERT_SAN}
  7. # 配置kubectl
  8. mkdir -p $HOME/.kube
  9. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  10. sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2 工作节点加入

获取join命令后执行:

  1. # 在控制节点执行
  2. kubeadm token create --print-join-command
  3. # 在工作节点执行(需替换${JOIN_COMMAND})
  4. ${JOIN_COMMAND} \
  5. --node-name=${NODE_NAME} \
  6. --cri-socket=/run/containerd/containerd.sock

2.3 核心组件安装

网络插件部署(Calico示例)

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml
  2. # 修改配置中的CALICO_IPV4POOL_CIDR为10.244.0.0/16

存储类配置(以本地存储为例)

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4. name: local-storage
  5. provisioner: kubernetes.io/no-provisioner
  6. volumeBindingMode: WaitForFirstConsumer

三、生产级增强配置

3.1 高可用架构

推荐使用N+1冗余设计:

  • 控制平面:3/5个节点,使用etcd集群
  • 工作节点:根据业务需求动态扩展
  • 负载均衡:配置四层负载均衡器(如HAProxy)

3.2 安全加固

认证授权配置

  1. # 启用RBAC
  2. kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/main/content/en/examples/admin/authorization/rbac-strict.yaml
  3. # 创建管理员角色
  4. cat <<EOF | kubectl apply -f -
  5. apiVersion: rbac.authorization.k8s.io/v1
  6. kind: ClusterRole
  7. metadata:
  8. name: cluster-admin-extended
  9. rules:
  10. - apiGroups: ["*"]
  11. resources: ["*"]
  12. verbs: ["*"]
  13. EOF

网络策略示例

  1. apiVersion: networking.k8s.io/v1
  2. kind: NetworkPolicy
  3. metadata:
  4. name: default-deny-all
  5. spec:
  6. podSelector: {}
  7. policyTypes:
  8. - Ingress
  9. - Egress
  10. ---
  11. apiVersion: networking.k8s.io/v1
  12. kind: NetworkPolicy
  13. metadata:
  14. name: allow-same-namespace
  15. spec:
  16. podSelector: {}
  17. policyTypes:
  18. - Ingress
  19. ingress:
  20. - from:
  21. - podSelector: {}

3.3 监控体系搭建

Prometheus Operator部署

  1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  2. helm install prometheus prometheus-community/kube-prometheus-stack \
  3. --set prometheus.prometheusSpec.retention=30d \
  4. --set alertmanager.enabled=true

关键指标监控

指标类型 监控项 告警阈值
集群健康 NodeReady状态 非Ready节点>0
资源使用 CPU/Memory使用率 持续>85%
API Server性能 请求延迟(P99) >500ms
etcd健康 集群同步状态 false状态

四、运维实践与故障排查

4.1 日常维护流程

  1. 备份管理

    • 使用etcdctl定期备份:
      1. ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
      2. --endpoints=${ETCD_ENDPOINTS} \
      3. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
      4. --cert=/etc/kubernetes/pki/etcd/server.crt \
      5. --key=/etc/kubernetes/pki/etcd/server.key
  2. 升级策略

    • 遵循N-1版本兼容原则
    • 先升级控制平面,再升级工作节点
    • 使用kubeadm upgrade plan进行预检

4.2 常见问题处理

节点NotReady状态排查

  1. # 检查kubelet日志
  2. journalctl -u kubelet -n 100 --no-pager
  3. # 常见原因:
  4. # 1. 证书过期:kubeadm certs renew all
  5. # 2. CNI插件故障:systemctl restart containerd
  6. # 3. 资源不足:检查/var/lib/kubelet/disk/

Pod调度失败处理

  1. # 查看事件
  2. kubectl describe pod ${POD_NAME} | grep -i "events"
  3. # 常见原因:
  4. # 1. 资源不足:调整requests/limits
  5. # 2. 节点选择器不匹配:检查nodeSelector
  6. # 3. 污点容忍:添加tolerations

4.3 性能优化建议

  1. API Server优化

    • 启用审计日志(—audit-log-path)
    • 调整并发参数(—default-not-ready-toleration-seconds)
  2. etcd优化

    • 配置SSD存储
    • 调整—quota-backend-bytes(默认8GB)
  3. 网络优化

    • 启用IPVS模式(—proxy-mode=ipvs)
    • 调整conntrack参数(net.netfilter.nf_conntrack_max)

五、进阶部署方案

5.1 混合云部署

使用Submariner实现跨集群通信:

  1. # 安装Broker集群组件
  2. kubectl create namespace submariner-operator
  3. kubectl apply -f https://github.com/submariner-io/submariner-operator/releases/download/v0.15.0/submariner-operator.yaml
  4. # 加入成员集群
  5. cat <<EOF | kubectl apply -f -
  6. apiVersion: operator.submariner.io/v1alpha1
  7. kind: Submariner
  8. metadata:
  9. name: submariner
  10. namespace: submariner-operator
  11. spec:
  12. cableDriver: libreswan
  13. ceIPSecDebug: false
  14. clusterCIDR: 10.244.0.0/16
  15. serviceCIDR: 10.96.0.0/12
  16. globalCIDR: 100.64.0.0/16
  17. EOF

5.2 边缘计算部署

使用KubeEdge实现边缘节点管理:

  1. # 云侧安装
  2. kubectl apply -f "https://cloud.edge.tencent.com/kubeedge/v1.13/cloud/install.yaml"
  3. # 边缘节点安装
  4. tar zxvf kubeedge-v1.13.0-linux-amd64.tar.gz
  5. cd kubeedge-v1.13.0-linux-amd64/edge
  6. ./edgecore --config ./conf/edgecore.yaml

本教程完整覆盖了Kubernetes从环境准备到生产运维的全流程,特别强调了高可用架构设计、安全加固和监控体系等关键生产要素。实际部署时建议先在测试环境验证,再逐步迁移到生产环境。对于超大规模集群(>500节点),建议采用分区域部署方案,并配合Service Mesh实现服务治理。

相关文章推荐

发表评论

活动