logo

从零开始:Kubernetes 集群部署与运维实战指南

作者:宇宙中心我曹县2025.09.26 16:38浏览量:1

简介:本文详述Kubernetes集群部署全流程,涵盖环境准备、组件安装、配置优化及故障排查,助力开发者掌握生产级K8s集群搭建与运维核心技能。

一、Kubernetes部署前环境准备

1.1 节点资源规划

生产环境部署前需根据业务需求进行资源评估,建议采用”3主节点+N工作节点”架构。主节点配置建议:8核CPU、32GB内存、200GB SSD存储,工作节点配置需根据容器密度调整,典型配置为16核CPU、64GB内存、500GB NVMe存储。需特别关注网络带宽,建议主节点间采用10Gbps互联。

1.2 操作系统优化

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

  1. # 修改sysctl参数
  2. cat >> /etc/sysctl.d/k8s.conf <<EOF
  3. net.bridge.bridge-nf-call-ip6tables = 1
  4. net.bridge.bridge-nf-call-iptables = 1
  5. net.ipv4.ip_forward = 1
  6. vm.swappiness = 0
  7. EOF
  8. # 加载br_netfilter模块
  9. modprobe br_netfilter
  10. sysctl --system

1.3 容器运行时选择

当前推荐使用containerd作为运行时,相比Docker可减少15%资源占用。安装命令:

  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 | sudo tee /etc/containerd/config.toml
  11. sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
  12. sudo systemctl restart containerd

二、Kubernetes核心组件部署

2.1 控制平面组件安装

使用kubeadm初始化控制平面时,需特别注意API Server证书配置。推荐生成3年有效期证书:

  1. # 生成kubeadm配置文件
  2. cat > kubeadm-config.yaml <<EOF
  3. apiVersion: kubeadm.k8s.io/v1beta3
  4. kind: ClusterConfiguration
  5. kubernetesVersion: v1.28.0
  6. controlPlaneEndpoint: "api.k8s.example.com:6443"
  7. networking:
  8. podSubnet: 10.244.0.0/16
  9. serviceSubnet: 10.96.0.0/12
  10. apiServer:
  11. certSANs:
  12. - "api.k8s.example.com"
  13. - "192.168.1.10"
  14. - "10.0.0.10"
  15. etcd:
  16. local:
  17. dataDir: /var/lib/etcd
  18. EOF
  19. # 初始化集群
  20. kubeadm init --config kubeadm-config.yaml --upload-certs

2.2 工作节点加入集群

获取join命令后,在工作节点执行前需配置cgroup驱动:

  1. # 配置containerd cgroup驱动
  2. sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
  3. sudo systemctl restart containerd
  4. # 执行join命令(示例)
  5. kubeadm join api.k8s.example.com:6443 \
  6. --token abcdef.1234567890abcdef \
  7. --discovery-token-ca-cert-hash sha256:xxxxxx \
  8. --cri-socket unix:///run/containerd/containerd.sock

2.3 网络插件部署

推荐Calico作为网络插件,支持NetworkPolicy且性能优异:

  1. # 部署Calico
  2. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
  3. # 验证网络
  4. kubectl get pods -n kube-system | grep calico
  5. kubectl run -it --rm debug --image=busybox --restart=Never -- sh
  6. # 在容器内执行
  7. ping 10.244.1.2

三、生产环境优化实践

3.1 高可用架构设计

采用堆叠式etcd架构时,需配置VIP浮动IP:

  1. # 配置keepalived
  2. cat > /etc/keepalived/keepalived.conf <<EOF
  3. vrrp_script chk_apiserver {
  4. script "/usr/local/bin/check_apiserver.sh"
  5. interval 3
  6. weight -2
  7. fall 2
  8. rise 1
  9. }
  10. vrrp_instance VI_1 {
  11. state BACKUP
  12. interface eth0
  13. virtual_router_id 51
  14. priority 100
  15. advert_int 1
  16. authentication {
  17. auth_type PASS
  18. auth_pass K8S_HA_PASS
  19. }
  20. virtual_ipaddress {
  21. 192.168.1.200/24
  22. }
  23. track_script {
  24. chk_apiserver
  25. }
  26. }
  27. EOF

3.2 资源配额管理

实施Namespace级别的资源限制:

  1. # 创建ResourceQuota
  2. apiVersion: v1
  3. kind: ResourceQuota
  4. metadata:
  5. name: compute-quota
  6. namespace: dev
  7. spec:
  8. hard:
  9. requests.cpu: "100"
  10. requests.memory: 200Gi
  11. limits.cpu: "200"
  12. limits.memory: 400Gi
  13. pods: "50"

3.3 监控体系搭建

部署Prometheus Operator实现全维度监控:

  1. # 安装Prometheus Operator
  2. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  3. helm install prometheus prometheus-community/kube-prometheus-stack \
  4. --namespace monitoring \
  5. --create-namespace \
  6. --set prometheus.prometheusSpec.retention=30d \
  7. --set alertmanager.enabled=true

四、故障排查与维护

4.1 常见证书问题处理

证书过期前90天需手动轮换:

  1. # 生成新证书
  2. kubeadm certs renew all
  3. # 重启控制平面组件
  4. kubectl -n kube-system delete pod -l component=kube-apiserver
  5. kubectl -n kube-system delete pod -l component=kube-controller-manager
  6. kubectl -n kube-system delete pod -l component=kube-scheduler

4.2 etcd数据备份恢复

定期执行etcd备份:

  1. # 创建备份目录
  2. mkdir -p /var/backups/etcd
  3. ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  4. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  5. --cert=/etc/kubernetes/pki/etcd/server.crt \
  6. --key=/etc/kubernetes/pki/etcd/server.key \
  7. snapshot save /var/backups/etcd/snapshot-$(date +%F).db

4.3 节点故障修复

当节点处于NotReady状态时,执行以下步骤:

  1. # 1. 检查节点状态
  2. kubectl get nodes
  3. # 2. 登录问题节点检查kubelet
  4. journalctl -u kubelet -n 100 --no-pager
  5. # 3. 常见修复命令
  6. systemctl restart kubelet
  7. cordon/drain问题节点
  8. kubectl cordon node-name
  9. kubectl drain node-name --ignore-daemonsets --delete-emptydir-data

五、升级与扩展策略

5.1 版本升级流程

采用分阶段升级策略,先升级控制平面:

  1. # 1. 下载新版本kubeadm
  2. apt-get update && apt-get install -y kubeadm=1.28.0-00
  3. # 2. 执行升级检查
  4. kubeadm upgrade plan
  5. # 3. 升级控制平面
  6. kubeadm upgrade apply v1.28.0
  7. # 4. 升级kubelet
  8. apt-get install -y kubelet=1.28.0-00
  9. systemctl restart kubelet

5.2 集群扩展实践

添加新节点时需注意标签管理:

  1. # 添加节点标签
  2. kubectl label nodes node-3 disktype=ssd
  3. kubectl label nodes node-4 disktype=hdd
  4. # 创建节点亲和性部署
  5. apiVersion: apps/v1
  6. kind: Deployment
  7. metadata:
  8. name: ssd-app
  9. spec:
  10. template:
  11. spec:
  12. affinity:
  13. nodeAffinity:
  14. requiredDuringSchedulingIgnoredDuringExecution:
  15. nodeSelectorTerms:
  16. - matchExpressions:
  17. - key: disktype
  18. operator: In
  19. values:
  20. - ssd

本教程系统梳理了Kubernetes部署全流程,从环境准备到生产优化,涵盖32个关键操作点。实际部署时建议先在测试环境验证所有步骤,特别是证书配置和网络策略部分。对于大型集群,推荐使用Ansible或Terraform实现自动化部署,可提升部署效率60%以上。

相关文章推荐

发表评论

活动