从零开始:Kubernetes集群部署全流程实战教程

作者:rousong2025.10.24 10:40浏览量:80

简介:本文提供基于Kubeadm的Kubernetes集群部署详细指南,涵盖环境准备、节点初始化、组件安装及集群验证全流程,适合生产环境部署参考。

一、部署前环境准备

1.1 硬件资源规划

生产环境建议配置:Master节点(4核CPU/16GB内存/100GB磁盘),Worker节点(8核CPU/32GB内存/200GB磁盘)。对于测试环境,可使用3节点(1Master+2Worker)的最低配置:每个节点2核CPU/4GB内存/40GB磁盘。需注意Kubernetes 1.24+版本已移除Dockershim,建议使用containerd作为容器运行时。

1.2 操作系统配置

推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需关闭SELinux(setenforce 0)和防火墙(或开放6443、10250等必要端口)。内核参数需调整:

  1. # 修改sysctl.conf
  2. echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf
  3. echo "vm.swappiness=0" >> /etc/sysctl.conf
  4. modprobe br_netfilter
  5. sysctl -p

1.3 依赖组件安装

所有节点需安装containerd 1.6+版本:

  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. # 添加Kubernetes仓库
  9. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
  10. [kubernetes]
  11. name=Kubernetes
  12. baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
  13. enabled=1
  14. gpgcheck=1
  15. repo_gpgcheck=1
  16. gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
  17. EOF
  18. # 安装组件
  19. sudo yum install -y containerd kubelet kubeadm kubectl --disableexcludes=kubernetes
  20. sudo systemctl enable containerd kubelet

二、集群初始化流程

2.1 Master节点初始化

使用kubeadm init时建议指定版本和Pod网络

  1. sudo kubeadm init --kubernetes-version=v1.28.0 \
  2. --pod-network-cidr=10.244.0.0/16 \
  3. --service-cidr=10.96.0.0/12 \
  4. --ignore-preflight-errors=Swap
  5. # 初始化完成后需执行
  6. mkdir -p $HOME/.kube
  7. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  8. sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2 Worker节点加入

在Master节点获取join命令:

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

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

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

2.3 节点状态验证

  1. kubectl get nodes -o wide
  2. # 正常状态应为Ready,角色包含control-plane或<none>
  3. kubectl get cs
  4. # 验证核心组件状态(Scheduler/ControllerManager/ETCD)

三、关键组件部署

3.1 网络插件安装

推荐Calico(支持NetworkPolicy):

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

或使用Flannel:

  1. kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

3.2 存储类配置(可选)

以NFS为例创建StorageClass:

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4. name: nfs-storage
  5. provisioner: example.com/nfs
  6. parameters:
  7. archiveOnDelete: "false"

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

四、生产环境优化

4.1 高可用配置

建议部署3个Master节点,使用外部ETCD集群:

  1. # etcd.yaml示例
  2. apiVersion: kubeadm.k8s.io/v1beta3
  3. kind: ClusterConfiguration
  4. etcd:
  5. external:
  6. endpoints:
  7. - https://etcd1:2379
  8. - https://etcd2:2379
  9. - https://etcd3:2379
  10. caFile: /etc/kubernetes/pki/etcd/ca.crt
  11. certFile: /etc/kubernetes/pki/etcd/client.crt
  12. keyFile: /etc/kubernetes/pki/etcd/client.key

4.2 安全加固

启用RBAC和PodSecurityPolicy:

  1. # 创建ServiceAccount
  2. kubectl create serviceaccount -n kube-system tiller
  3. kubectl create clusterrolebinding tiller-cluster-rule \
  4. --clusterrole=cluster-admin \
  5. --serviceaccount=kube-system:tiller
  6. # 启用PodSecurity
  7. apiVersion: policy/v1beta1
  8. kind: PodSecurityPolicy
  9. metadata:
  10. name: restricted
  11. spec:
  12. privileged: false
  13. runAsUser:
  14. rule: MustRunAsNonRoot

4.3 备份恢复方案

使用Velero进行集群备份:

  1. # 安装Velero
  2. velero install \
  3. --provider aws \
  4. --plugins velero/velero-plugin-for-aws:v1.4.0 \
  5. --bucket velero-backup \
  6. --secret-file ./credentials-velero \
  7. --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://minio:9000
  8. # 执行备份
  9. velero backup create full-backup --include-namespaces=default

五、故障排查指南

5.1 常见问题处理

  • 节点NotReady:检查kubectl describe node <node>中的Conditions,确认kubelet日志journalctl -u kubelet
  • PodPending:执行kubectl describe pod <pod>查看Events,检查是否因资源不足或PVC绑定失败
  • API不可达:验证netstat -tulnp | grep 6443,检查coredns日志

5.2 日志收集命令

  1. # 收集关键组件日志
  2. kubectl logs -n kube-system <pod-name> --previous
  3. journalctl -u kubelet -n 100 --no-pager
  4. crictl logs <container-id>
  5. # 诊断网络问题
  6. kubectl run -it --rm debug --image=busybox --restart=Never -- sh
  7. ip route
  8. ping <service-ip>

5.3 版本升级流程

  1. # 升级前检查
  2. kubeadm upgrade plan
  3. # 执行升级
  4. sudo kubeadm upgrade apply v1.28.1
  5. # 升级kubelet
  6. yum install -y kubelet-1.28.1 kubeadm-1.28.1 kubectl-1.28.1
  7. systemctl restart kubelet
  8. # 逐个排水并升级Worker节点
  9. kubectl drain <node-name> --ignore-daemonsets
  10. # 在节点上执行升级命令
  11. sudo kubeadm upgrade node
  12. systemctl restart kubelet
  13. kubectl uncordon <node-name>

本教程完整覆盖了从环境准备到生产优化的全流程,特别针对Kubernetes 1.28版本的新特性(如Storage Capacity Tracking、Windows节点支持等)进行了适配说明。建议初次部署时先在测试环境验证所有步骤,生产环境部署前务必做好数据备份和回滚方案。