温馨提示×

Linux如何支持Kubernetes集群管理

小樊
37
2025-11-20 19:25:50
栏目: 智能运维

Linux 支持 Kubernetes 集群管理的实践指南

一 架构与组件概览

  • 运行环境:Kubernetes 的控制平面与节点通常部署在 Linux 主机上,Linux 提供稳定的内核特性(如 cgroups、namespaces、systemd)与网络栈,支撑容器与集群组件的隔离与调度。
  • 核心组件分工:
    • kubelet:运行在每个节点上的节点代理,负责 Pod 生命周期管理、镜像与卷挂载等。
    • kubeadm:官方集群引导工具,用于初始化控制平面、加入节点、升级与重置集群。
    • kubectl:命令行工具,用于与 API Server 交互、部署应用与查看资源状态。
  • 容器运行时:常见为 Docker/containerd;kubelet 通过 **CRI(容器运行时接口)**与运行时通信。
  • 网络模型:集群需部署 CNI 网络插件(如 Calico、Flannel)以实现 Pod 跨节点通信与网络策略。

二 快速上手流程 kubeadm

  • 环境准备(所有节点)
    • 操作系统建议:Ubuntu LTSCentOS/RHEL;节点间网络互通,时间同步(如 chrony)。
    • 关闭 Swap:执行 sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 报错与性能劣化。
    • 防火墙与安全策略:开发测试可临时关闭防火墙;生产环境需按需放行端口(如 6443、10250 等)。
    • SELinux(RHEL/CentOS):可设为 permissive 或按需配置策略以放行容器与 kubelet 操作。
  • 安装运行时与工具
    • 安装容器运行时(如 Docker/containerd)并启动:sudo systemctl start docker && sudo systemctl enable docker
    • 安装 kubeadm、kubelet、kubectl(Debian/Ubuntu 示例):
      • sudo apt-get update && sudo apt-get install -y apt-transport-https curl
      • curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
      • echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
      • sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
      • sudo systemctl enable --now kubelet
  • 初始化控制平面(Master)
    • 初始化:sudo kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=10.244.0.0/16
    • 配置 kubectl:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 加入工作节点(Worker)
    • 使用 kubeadm init 输出中的 kubeadm join ... 命令加入;若 token 过期,在主控节点执行 kubeadm token create --print-join-command 重新生成。
  • 部署网络插件
    • Calico:kubectl apply -f https://docs.projectcalico.org/v3.16/manifests/calico.yaml
    • Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 验证:kubectl get nodes 应显示所有节点状态为 Ready

三 高可用与控制平面部署

  • 架构建议:使用 3 台及以上 控制平面节点构成 etcd 集群,结合 keepalived + haproxy 或云厂商 负载均衡器 对外暴露 API Server(6443),实现控制平面高可用与故障自动切换。
  • 引导方式:
    • 使用 kubeadm 的 HA 引导流程(kubeadm init 配合 --control-plane-endpoint 指向 VIP/LB),或采用自动化工具(如 kops、kubespray)进行大规模与标准化部署。
  • 验证与运维:
    • 检查控制平面组件:kubectl get pods -n kube-system
    • 检查 etcd 健康:kubectl get endpoints kube-controller-manager -n kube-systemkubectl get endpoints kube-scheduler -n kube-system
    • 升级与回滚:遵循 kubeadm 的版本升级流程,先升级控制平面,再升级节点,确保兼容性。

四 日常管理关键操作

  • 节点管理
    • 驱逐与维护:kubectl drain <node> --ignore-daemonsets
    • 恢复调度:kubectl uncordon <node>
    • 加入/移除节点:使用 kubeadm join 加入;移除可用 kubeadm reset(谨慎操作并先驱逐)。
  • 应用与网络
    • 部署示例:kubectl create deployment nginx --image=nginx:1.25 --replicas=3
    • 暴露服务:kubectl expose deployment nginx --port=80 --type=NodePort
    • 查看资源:kubectl get pods,svc,deploy -A
  • 运维与可观测性
    • 建议部署 Prometheus + Grafana 进行指标监控,部署 ELK/EFK 进行日志收集与检索,提升故障定位效率。

五 常见问题与排查要点

  • 节点 NotReady
    • 检查网络插件是否就绪:kubectl get pods -n kube-system -l k8s-app=calico(或 flannel)
    • 确认 kubelet 状态:sudo systemctl status kubelet,查看日志 journalctl -u kubelet -f
  • kubeadm join 失败
    • 检查 token 是否过期,使用 kubeadm token create --print-join-command 重新生成。
  • 端口与防火墙
    • 放行 6443(API Server)10250(kubelet) 等关键端口;云环境需确保安全组/ACL 规则正确。
  • Swap 未关闭
    • 执行 sudo swapoff -a 并持久化;否则 kubelet 可能拒绝启动或性能异常。
  • SELinux 限制
    • RHEL/CentOS 可将 SELinux 设为 permissive 或按需配置策略以放行容器与 kubelet 操作。

0