logo

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

作者:rousong2025.09.26 16:39浏览量:2

简介:本文详细解析Kubernetes集群部署的核心步骤,涵盖环境准备、安装配置、集群验证及生产优化建议,帮助开发者快速搭建高可用容器编排平台。

一、Kubernetes部署前的环境准备

1.1 硬件资源规划

生产环境建议采用3节点主控平面(Master)架构,每个节点配置不低于8核CPU、32GB内存及100GB存储空间。工作节点(Worker)根据业务负载动态扩展,单节点建议16核CPU、64GB内存起步,确保容器密度与性能平衡。

1.2 操作系统选择

推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需关闭SELinux(setenforce 0)并配置防火墙规则。以CentOS为例,需安装依赖包:

  1. yum install -y conntrack ntpdate ebtables socat ipset

1.3 容器运行时安装

Kubernetes 1.24+版本已移除Docker支持,需改用containerd或CRI-O。以containerd为例:

  1. # 安装containerd
  2. cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  3. overlay
  4. br_netfilter
  5. EOF
  6. sudo modprobe overlay
  7. sudo modprobe br_netfilter
  8. # 配置containerd
  9. mkdir -p /etc/containerd
  10. containerd config default | tee /etc/containerd/config.toml
  11. sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  12. systemctl restart containerd

二、Kubernetes集群安装

2.1 使用kubeadm初始化主节点

  1. # 安装kubeadm/kubelet/kubectl
  2. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
  6. enabled=1
  7. gpgcheck=1
  8. repo_gpgcheck=1
  9. gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  10. EOF
  11. yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  12. # 初始化主节点(替换<api-server-advertise-address>为实际IP)
  13. kubeadm init --apiserver-advertise-address=<api-server-advertise-address> \
  14. --pod-network-cidr=10.244.0.0/16 \
  15. --service-cidr=10.96.0.0/12 \
  16. --kubernetes-version=v1.28.0

初始化完成后,需执行mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config配置kubeconfig。

2.2 加入工作节点

在主节点获取加入命令:

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

在工作节点执行获取的命令,例如:

  1. kubeadm join <api-server-endpoint>:6443 --token <token> \
  2. --discovery-token-ca-cert-hash sha256:<hash>

2.3 网络插件部署

推荐使用Calico或Flannel。以Calico为例:

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
  2. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

验证网络状态:

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

三、集群验证与基础测试

3.1 核心组件状态检查

  1. kubectl get componentstatuses
  2. # 预期输出:
  3. # NAME STATUS MESSAGE ERROR
  4. # scheduler Healthy ok
  5. # controller-manager Healthy ok
  6. # etcd-0 Healthy {"health":"true"}

3.2 节点状态验证

  1. kubectl get nodes
  2. # 预期输出:
  3. # NAME STATUS ROLES AGE VERSION
  4. # master01 Ready control-plane 10m v1.28.0
  5. # worker01 Ready <none> 8m v1.28.0

3.3 部署测试应用

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

执行部署并验证:

  1. kubectl apply -f nginx-deployment.yaml
  2. kubectl get pods -l app=nginx
  3. kubectl expose deployment nginx-deployment --port=80 --type=NodePort
  4. curl <node-ip>:<node-port>

四、生产环境优化建议

4.1 高可用架构设计

  • 主控平面部署:使用3节点etcd集群+3节点控制平面,通过kubeadm init --control-plane-endpoint配置负载均衡VIP
  • 存储方案:集成Ceph或Rook提供持久化存储
  • 监控体系:部署Prometheus+Grafana监控集群状态

4.2 安全加固措施

  • 启用RBAC权限控制:通过kubectl create clusterrolebinding限制用户权限
  • 配置网络策略:使用Calico NetworkPolicy限制Pod间通信
  • 定期轮换证书:执行kubeadm certs renew all更新证书

4.3 备份与恢复方案

使用Velero进行集群备份:

  1. # 安装Velero
  2. velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.8.0 \
  3. --bucket <backup-bucket> --secret-file ./credentials-velero
  4. # 执行备份
  5. velero backup create full-backup --include-namespaces default

五、常见问题处理

5.1 节点NotReady状态

检查kubelet日志

  1. journalctl -u kubelet -n 100 --no-pager

常见原因:

  • CNI插件未正确安装
  • 容器运行时未运行
  • 资源不足(内存/磁盘)

5.2 Pod Pending状态

执行kubectl describe pod <pod-name>查看事件,常见原因:

  • 资源不足(Insufficient cpu/memory
  • 持久卷绑定失败(PersistentVolumeClaim not bound
  • 调度器故障(FailedScheduling

5.3 证书过期问题

证书有效期为1年,过期前需执行:

  1. # 主节点执行
  2. kubeadm certs renew all
  3. # 重启kubelet
  4. systemctl restart kubelet

六、进阶部署方案

6.1 使用Kubespray自动化部署

  1. git clone https://github.com/kubernetes-sigs/kubespray.git
  2. cd kubespray
  3. pip install -r requirements.txt
  4. cp inventory/sample inventory/mycluster
  5. # 修改inventory/mycluster/inventory.ini配置节点信息
  6. ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -b -v

6.2 混合云部署

通过Kubefed实现多集群管理:

  1. # 在主集群安装Kubefed控制平面
  2. kubectl create namespace kubefed-system
  3. kubectl apply -f https://github.com/kubernetes-sigs/kubefed/releases/download/v0.13.0/kubefedctl.yaml
  4. kubefedctl init kubefed --host-cluster-context=primary --image=kubefed/kubefed:v0.13.0
  5. # 加入成员集群
  6. kubefedctl join <member-cluster-name> --cluster-context=<member-context> \
  7. --host-cluster-context=primary --v=2

七、总结与最佳实践

  1. 版本管理:保持主节点与工作节点Kubernetes版本一致,避免跨大版本升级
  2. 资源限制:通过LimitRangeResourceQuota控制资源使用
  3. 日志收集:集成EFK(Elasticsearch+Fluentd+Kibana)或Loki日志系统
  4. CI/CD集成:使用ArgoCD或Flux实现GitOps持续部署

通过本文的完整流程,开发者可快速构建符合生产标准的Kubernetes集群。实际部署时需根据业务需求调整配置参数,并建立完善的运维监控体系。

相关文章推荐

发表评论

活动