logo

从零到一:Kubernetes 生产环境部署实战指南

作者:很菜不狗2025.09.26 16:44浏览量:6

简介:本文详细讲解Kubernetes集群的部署流程,涵盖环境准备、组件安装、集群验证及运维管理,提供可落地的生产级部署方案。

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

  1. 硬件资源要求
    生产环境建议采用3节点(Master+Worker)或5节点(3Master+2Worker)架构。单节点配置需满足:CPU≥4核、内存≥16GB、磁盘≥200GB(SSD优先)。例如,AWS EC2的m5.xlarge实例或阿里云ecs.g6.xlarge实例均可满足基础需求。

  2. 操作系统与网络配置
    推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需关闭SELinux(setenforce 0)和防火墙(或开放6443/10250/2379-2380等端口)。网络规划需考虑:

    • Pod CIDR(如10.244.0.0/16)与Service CIDR(如10.96.0.0/12)不重叠
    • 核心组件(etcd、kube-apiserver)间需低延迟网络(<1ms)
    • 示例配置:
      1. # 修改内核参数以支持大量连接
      2. cat <<EOF > /etc/sysctl.d/k8s.conf
      3. net.bridge.bridge-nf-call-ip6tables = 1
      4. net.bridge.bridge-nf-call-iptables = 1
      5. net.ipv4.ip_forward = 1
      6. EOF
      7. sysctl --system
  3. 容器运行时选择
    Kubernetes 1.24+已移除Docker支持,推荐使用containerd或CRI-O。以containerd为例:

    1. # 安装containerd
    2. yum install -y containerd
    3. mkdir -p /etc/containerd
    4. containerd config default > /etc/containerd/config.toml
    5. # 修改配置以启用systemd cgroup驱动
    6. sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
    7. systemctl enable --now containerd

二、核心组件安装与配置

  1. kubeadm初始化集群
    在Master节点执行:

    1. # 安装kubeadm/kubelet/kubectl
    2. cat <<EOF > /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. systemctl enable --now kubelet
    13. # 初始化集群(指定Pod网络插件)
    14. kubeadm init --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.28.0

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

  2. Worker节点加入集群
    在Master节点获取加入命令:

    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:xxxxxx
  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 run -it --rm debug --image=busybox --restart=Never -- sh
    2. # 在容器内执行
    3. ping <其他节点Pod IP>

三、生产环境增强配置

  1. 高可用Master部署
    使用kubeadm搭建HA集群需:

    • 外部负载均衡器(如Nginx、HAProxy)转发6443端口
    • 外部etcd集群(3/5节点)
    • 示例etcd配置:
      1. # /etc/kubernetes/manifests/etcd.yaml
      2. apiVersion: v1
      3. kind: Pod
      4. metadata:
      5. name: etcd
      6. namespace: kube-system
      7. spec:
      8. containers:
      9. - name: etcd
      10. image: registry.k8s.io/etcd:3.5.9-0
      11. command:
      12. - etcd
      13. - --advertise-client-urls=https://<MASTER_IP>:2379
      14. - --listen-client-urls=https://0.0.0.0:2379
      15. - --cert-file=/etc/kubernetes/pki/etcd/server.crt
      16. - --key-file=/etc/kubernetes/pki/etcd/server.key
      17. volumeMounts:
      18. - name: etcd-certs
      19. mountPath: /etc/kubernetes/pki/etcd
      20. volumes:
      21. - name: etcd-certs
      22. hostPath:
      23. path: /etc/kubernetes/pki/etcd
  2. 安全加固措施

    • 启用RBAC权限控制:
      1. kubectl create clusterrolebinding admin-binding \
      2. --clusterrole=cluster-admin \
      3. --user=admin@example.com
    • 启用Pod安全策略(PSP)或OPA Gatekeeper
    • 定期轮换证书:
      1. kubeadm certs renew all
      2. systemctl restart kubelet
  3. 监控与日志方案
    推荐部署Prometheus+Grafana监控栈:

    1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    2. helm install prometheus prometheus-community/kube-prometheus-stack

    日志收集可使用EFK(Elasticsearch+Fluentd+Kibana)或Loki+Promtail+Grafana方案。

四、故障排查与运维技巧

  1. 常见问题处理

    • Node状态NotReady:检查journalctl -u kubelet日志,常见原因是网络插件未就绪或证书过期
    • Pod一直Pending:执行kubectl describe pod <pod-name>查看事件,检查资源不足或调度失败
    • API Server无响应:检查etcd集群健康状态(ETCDCTL_API=3 etcdctl endpoint health
  2. 备份与恢复
    使用Velero进行集群备份:

    1. velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.8.0 \
    2. --bucket <BACKUP_BUCKET> --secret-file ./credentials-velero
    3. # 备份命名空间
    4. velero backup create <BACKUP_NAME> --include-namespaces <NAMESPACE>
  3. 升级策略
    小版本升级(如1.27→1.28):

    1. # 在Master节点
    2. yum upgrade -y kubelet kubeadm kubectl
    3. kubeadm upgrade plan
    4. kubeadm upgrade apply v1.28.0
    5. # 在Worker节点
    6. systemctl drain <NODE_NAME>
    7. yum upgrade -y kubelet kubeadm
    8. systemctl uncordon <NODE_NAME>

五、最佳实践建议

  1. 资源管理

    • 为Namespace设置ResourceQuota:
      1. apiVersion: v1
      2. kind: ResourceQuota
      3. metadata:
      4. name: compute-quota
      5. namespace: dev
      6. spec:
      7. hard:
      8. requests.cpu: "1000"
      9. requests.memory: 200Gi
      10. limits.cpu: "2000"
      11. limits.memory: 400Gi
    • 使用Vertical Pod Autoscaler(VPA)自动调整资源请求
  2. CI/CD集成
    示例ArgoCD部署:

    1. kubectl create namespace argocd
    2. kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
    3. kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
  3. 多云部署考虑

    • 使用Crossplane或Cluster API管理多集群
    • 考虑服务网格(如Istio)实现跨集群通信
    • 存储方案需兼容不同云厂商(如CSI驱动)

本教程覆盖了从环境准备到生产运维的全流程,建议读者在非生产环境先进行验证。实际部署时需根据业务需求调整参数,例如将Pod CIDR修改为与现有网络兼容的范围。对于超大规模集群(>500节点),建议参考Kubernetes官方的大规模集群部署指南进行优化。

相关文章推荐

发表评论

活动