logo

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

作者:半吊子全栈工匠2025.09.26 16:39浏览量:0

简介:本文详细讲解 Kubernetes 集群部署的全流程,涵盖环境准备、安装配置、核心组件验证及生产优化建议,适合开发者和运维人员快速掌握集群搭建与维护技能。

一、环境准备与规划

1.1 节点资源分配

生产环境建议采用 3个控制平面节点 + N个工作节点 的架构,控制平面节点需配置至少 2核CPU、4GB内存,工作节点根据业务负载动态扩展(建议起步 4核CPU、8GB内存)。节点间需确保 网络互通,推荐使用万兆内网以降低Pod间通信延迟。

1.2 操作系统选择

  • Linux发行版:Ubuntu 22.04 LTS 或 CentOS 8 Stream(需关闭SELinux)
  • 内核参数优化
    1. # 调整文件描述符限制
    2. echo "* soft nofile 65536" >> /etc/security/limits.conf
    3. echo "* hard nofile 65536" >> /etc/security/limits.conf
    4. # 禁用交换分区
    5. swapoff -a
    6. sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

1.3 网络模型选择

  • Overlay网络:Calico(推荐)或 Weave Net
  • Underlay网络:需支持VXLAN或BGP协议,适合物理机环境
  • CNI插件配置:以Calico为例,需在install-cni.sh中指定IP_AUTODETECTION_METHOD=interface=eth.*

二、控制平面组件部署

2.1 使用kubeadm初始化集群

  1. # 生成初始化配置文件
  2. kubeadm config print init-defaults > kubeadm-init.yaml
  3. # 修改关键参数
  4. apiVersion: kubeadm.k8s.io/v1beta3
  5. kind: InitConfiguration
  6. localAPIEndpoint:
  7. advertiseAddress: <控制平面IP>
  8. bindPort: 6443
  9. ---
  10. apiVersion: kubeadm.k8s.io/v1beta3
  11. kind: ClusterConfiguration
  12. kubernetesVersion: v1.28.0
  13. controlPlaneEndpoint: "<负载均衡VIP>:6443" # 高可用场景必备
  14. networking:
  15. podSubnet: 10.244.0.0/16
  16. serviceSubnet: 10.96.0.0/12
  17. # 执行初始化
  18. kubeadm init --config kubeadm-init.yaml

2.2 核心组件验证

  • etcd健康检查
    1. kubectl exec -n kube-system etcd-<节点名> -- etcdctl endpoint health
  • API Server负载:通过kubectl get --raw /readyz验证,返回ok表示正常
  • 控制器管理器状态
    1. kubectl get pods -n kube-system | grep kube-controller-manager

三、工作节点加入集群

3.1 获取加入令牌

  1. # 生成新令牌(有效期24小时)
  2. kubeadm token create --ttl 24h --print-join-command
  3. # 输出示例:
  4. # kubeadm join 192.168.1.100:6443 --token abcdef.1234567890abcdef \
  5. # --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxx

3.2 节点标签管理

  1. # 为节点添加角色标签
  2. kubectl label nodes <节点名> node-role.kubernetes.io/worker=worker
  3. # 污点管理(禁止调度)
  4. kubectl taint nodes <节点名> dedicated=special:NoSchedule

四、核心组件配置优化

4.1 CoreDNS性能调优

修改/etc/kubernetes/manifests/coredns.yaml,增加以下参数:

  1. spec:
  2. template:
  3. spec:
  4. containers:
  5. - name: coredns
  6. args: ["-conf", "/etc/coredns/Corefile", "-dns.port=53", "-dns.tcp.listen=:53"]
  7. resources:
  8. limits:
  9. cpu: 500m
  10. memory: 256Mi

4.2 调度器策略定制

创建/etc/kubernetes/scheduler-policy.yaml

  1. apiVersion: kubescheduler.config.k8s.io/v1
  2. kind: KubeSchedulerConfiguration
  3. profiles:
  4. - schedulerName: default-scheduler
  5. pluginConfig:
  6. - name: PrioritySort
  7. args:
  8. add:
  9. - name: "dedicated-node"
  10. weight: 10

五、生产环境加固建议

5.1 安全防护措施

  • RBAC权限控制
    1. # 禁止匿名访问
    2. kubectl edit apiserver-kubelet-config.yaml
    3. # 修改authentication.anonymous.enabled为false
  • Pod安全策略
    1. apiVersion: policy/v1beta1
    2. kind: PodSecurityPolicy
    3. metadata:
    4. name: restricted
    5. spec:
    6. privileged: false
    7. hostPID: false
    8. hostIPC: false
    9. runAsUser:
    10. rule: MustRunAsNonRoot
    11. seLinux:
    12. rule: RunAsAny

5.2 监控告警体系

  • Prometheus配置
    1. - job_name: 'kubernetes-nodes'
    2. static_configs:
    3. - targets: ['<节点IP>:9100'] # Node Exporter
    4. metrics_path: /metrics
  • Alertmanager规则示例
    1. groups:
    2. - name: node.rules
    3. rules:
    4. - alert: NodeMemoryPressure
    5. expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 85
    6. for: 5m
    7. labels:
    8. severity: warning

六、故障排查指南

6.1 常见问题处理

  • 证书过期
    1. # 备份旧证书
    2. cp -r /etc/kubernetes/pki /etc/kubernetes/pki.bak
    3. # 重新生成证书
    4. kubeadm certs renew all
    5. # 重启静态Pod
    6. docker restart $(docker ps -aqf "name=k8s_kube-")
  • 网络不通
    1. # 检查CNI插件状态
    2. journalctl -u kubelet -n 100 | grep cni
    3. # 验证iptables规则
    4. iptables -t nat -L | grep KUBE

6.2 日志分析技巧

  1. # 获取API Server日志
  2. kubectl logs -n kube-system kube-apiserver-<节点名> --tail=100
  3. # 实时监控节点事件
  4. kubectl get events --sort-by='.metadata.creationTimestamp' -w

七、升级与维护

7.1 版本升级流程

  1. # 1. 升级kubeadm
  2. apt-get install kubeadm=1.28.0-00
  3. # 2. 检查升级可行性
  4. kubeadm upgrade plan
  5. # 3. 执行控制平面升级
  6. kubeadm upgrade apply v1.28.0
  7. # 4. 升级kubelet和kubectl
  8. apt-get install kubelet=1.28.0-00 kubectl=1.28.0-00
  9. systemctl restart kubelet

7.2 备份恢复方案

  • etcd数据备份
    1. ETCDCTL_API=3 etcdctl --endpoints=<控制平面IP>:2379 \
    2. --cacert=/etc/kubernetes/pki/etcd/ca.crt \
    3. --cert=/etc/kubernetes/pki/etcd/server.crt \
    4. --key=/etc/kubernetes/pki/etcd/server.key \
    5. snapshot save /backup/etcd-snapshot.db
  • 资源定义备份
    1. kubectl get all --all-namespaces -o yaml > full-cluster-backup.yaml

八、进阶实践建议

  1. 多集群管理:考虑使用Cluster API或Karmada实现统一管控
  2. GPU调度:配置Device Plugin实现GPU资源隔离
  3. 服务网格:集成Istio或Linkerd实现服务治理
  4. 边缘计算:通过KubeEdge扩展至边缘节点

通过本文的详细指导,开发者可系统掌握Kubernetes部署的全生命周期管理,从基础环境搭建到生产级优化,最终构建出高可用、高性能的容器编排平台。建议在实际操作中结合具体业务场景调整参数,并通过混沌工程验证集群容错能力。

相关文章推荐

发表评论