logo

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

作者:很酷cat2025.09.26 16:38浏览量:0

简介:本文详细介绍Kubernetes集群在生产环境中的部署流程,涵盖环境准备、组件安装、集群配置及验证等关键环节,帮助开发者掌握企业级Kubernetes部署技能。

一、环境准备与架构设计

在部署Kubernetes集群前,需明确集群的拓扑结构与资源需求。生产环境推荐采用高可用架构,包含至少3个控制平面节点(Master)和多个工作节点(Worker)。控制平面负责集群管理,工作节点运行应用负载。

1.1 硬件配置建议

  • 控制平面节点:CPU≥4核,内存≥16GB,磁盘≥100GB(SSD优先)
  • 工作节点:CPU≥8核,内存≥32GB,磁盘≥200GB(根据应用存储需求调整)
  • 网络要求:千兆以上网络,节点间延迟≤1ms

1.2 操作系统与依赖

  • 操作系统:推荐CentOS 7/8或Ubuntu 20.04 LTS
  • 依赖安装
    1. # CentOS示例
    2. sudo yum install -y conntrack ipset socat ebtables
    3. # Ubuntu示例
    4. sudo apt-get install -y conntrack ipset socat ebtables

1.3 网络模型选择

Kubernetes支持多种网络插件,常见方案包括:

  • Calico:支持网络策略,适合安全要求高的场景
  • Flannel:简单易用,适合小型集群
  • Cilium:基于eBPF,性能优异

二、控制平面部署

控制平面是Kubernetes的核心,包含etcd、API Server、Controller Manager和Scheduler等组件。

2.1 使用kubeadm初始化集群

kubeadm是官方推荐的部署工具,支持自动化初始化。

  1. # 初始化控制平面(在Master节点执行)
  2. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \
  3. --control-plane-endpoint="<MASTER_IP>:6443" \
  4. --apiserver-advertise-address=<MASTER_IP>
  • --pod-network-cidr:指定Pod网络地址范围
  • --control-plane-endpoint:高可用场景下指定VIP或负载均衡地址

2.2 配置kubectl

初始化完成后,需将配置文件复制到用户目录:

  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.3 添加额外控制平面节点(高可用场景)

在第二个Master节点执行:

  1. sudo kubeadm join <CONTROL_PLANE_ENDPOINT>:6443 \
  2. --token <TOKEN> \
  3. --discovery-token-ca-cert-hash sha256:<HASH> \
  4. --control-plane
  • --control-plane:标识为控制平面节点

三、工作节点加入集群

工作节点通过kubeadm join命令加入集群。

3.1 获取加入命令

在Master节点执行:

  1. kubeadm token create --print-join-command

输出示例:

  1. kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
  2. --discovery-token-ca-cert-hash sha256:1234...

3.2 在工作节点执行

  1. sudo kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
  2. --discovery-token-ca-cert-hash sha256:1234...

3.3 验证节点状态

在Master节点执行:

  1. kubectl get nodes

输出应显示所有节点状态为Ready

四、网络插件部署

网络插件实现Pod间通信和跨节点网络。

4.1 部署Calico(示例)

  1. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

验证部署:

  1. kubectl get pods -n kube-system | grep calico

4.2 验证网络连通性

创建测试Pod:

  1. kubectl run test-pod --image=nginx --restart=Never
  2. kubectl exec -it test-pod -- ping <另一PodIP>

五、存储配置(可选)

生产环境通常需要持久化存储,常见方案包括:

  • 本地存储hostPath(仅限单节点测试)
  • 网络存储:NFS、Ceph、iSCSI
  • 云存储:AWS EBS、Azure Disk、GCP PD

5.1 部署NFS存储类(示例)

  1. 安装NFS服务器
  2. 创建StorageClass:
    1. apiVersion: storage.k8s.io/v1
    2. kind: StorageClass
    3. metadata:
    4. name: nfs-storage
    5. provisioner: example.com/nfs
    6. parameters:
    7. server: nfs-server.example.com
    8. path: /exports/k8s

六、集群验证与测试

部署完成后,需验证集群功能是否正常。

6.1 部署测试应用

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: nginx-deployment
  5. spec:
  6. replicas: 3
  7. selector:
  8. matchLabels:
  9. app: nginx
  10. template:
  11. metadata:
  12. labels:
  13. app: nginx
  14. spec:
  15. containers:
  16. - name: nginx
  17. image: nginx:latest
  18. ports:
  19. - containerPort: 80

应用配置:

  1. kubectl apply -f nginx-deployment.yaml

6.2 验证服务

  1. kubectl get pods -l app=nginx
  2. kubectl expose deployment nginx-deployment --port=80 --type=NodePort
  3. kubectl get svc

访问任意节点IP的NodePort端口,应看到Nginx欢迎页面。

七、生产环境优化建议

  1. 资源限制:通过ResourceQuotaLimitRange控制资源使用
  2. 监控集成:部署Prometheus+Grafana监控集群状态
  3. 日志管理:集成EFK(Elasticsearch+Fluentd+Kibana)或Loki
  4. 备份策略:定期备份etcd数据
  5. 升级计划:制定滚动升级方案,避免业务中断

八、常见问题排查

  1. 节点状态NotReady
    • 检查kubectl describe node <节点名>
    • 验证kubelet服务状态:systemctl status kubelet
  2. Pod调度失败
    • 检查资源是否充足:kubectl describe nodes
    • 验证标签和污点配置:kubectl get nodes --show-labels
  3. 网络不通
    • 验证CNI插件状态:kubectl get pods -n kube-system | grep cni
    • 检查防火墙规则:iptables -L

总结

本文详细介绍了Kubernetes集群从环境准备到生产部署的全流程,涵盖控制平面初始化、工作节点加入、网络配置及验证等关键步骤。通过遵循最佳实践,开发者可以构建高可用、可扩展的Kubernetes集群,为容器化应用提供稳定的运行环境。实际部署时,建议结合具体业务需求调整配置,并定期进行健康检查和性能优化。

相关文章推荐

发表评论