温馨提示×

Ubuntu部署Kubernetes有哪些技巧

小樊
45
2025-12-26 10:28:09
栏目: 智能运维

Ubuntu 部署 Kubernetes 的实用技巧

一 环境准备与内核参数

  • 统一系统版本与基础工具:优先选择 Ubuntu 22.04/24.04,执行 sudo apt update && sudo apt upgrade -y,安装 curl、gnupg、apt-transport-https、ca-certificates 等基础包,便于后续添加仓库与签名校验。
  • 彻底关闭 Swap:Kubernetes 要求关闭 Swap。执行 sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免重启后恢复。
  • 启用内核转发与桥接流量:在 /etc/sysctl.conf 中设置 net.ipv4.ip_forward=1net.bridge.bridge-nf-call-iptables=1net.bridge.bridge-nf-call-ip6tables=1,随后 sudo sysctl -p 生效。
  • 容器运行时建议:优先使用 containerd(轻量、与 kubelet 集成更好)。安装后生成默认配置并启用:sudo containerd config default | sudo tee /etc/containerd/config.toml && sudo systemctl restart containerd && sudo systemctl enable containerd
  • 主机名与解析:为各节点设置唯一 hostname(如 k8s-master、k8s-worker1),并在 /etc/hosts 中写入节点 IP 与主机名映射,减少 DNS 依赖与偶发解析问题。

二 组件安装与版本控制

  • 添加 APT 源与密钥:导入 Kubernetes GPG 密钥并写入源列表(示例:/etc/apt/keyrings/kubernetes-archive-keyring.gpg/etc/apt/sources.list.d/kubernetes.list),确保包来源可信。
  • 指定一致版本:一次性安装并锁定 kubeadm、kubelet、kubectl 的同一小版本(如 1.28.x),避免组件版本漂移导致兼容性问题:sudo apt install -y kubeadm=1.28.* kubelet=1.28.* kubectl=1.28.*
  • 防止意外升级:安装后执行 sudo apt-mark hold kubeadm kubelet kubectl,保持集群组件版本稳定。
  • 启动与开机自启:仅对 kubelet 执行 sudo systemctl enable kubelet(暂不启动,待 kubeadm 初始化后再拉起),避免与容器运行时未就绪产生冲突。

三 集群初始化与网络插件

  • 合理规划网段:初始化时通过 --pod-network-cidr 指定 Pod 网段,需与所选 CNI 插件一致(如 Calico 常用 192.168.0.0/16Flannel 常用 10.244.0.0/16);多主或高可用场景建议同时设置 --control-plane-endpoint 指向 负载均衡 VIP
  • 初始化命令要点:sudo kubeadm init --pod-network-cidr=... --apiserver-advertise-address=<主节点IP> [--control-plane-endpoint=<VIP|主节点IP>];成功后按提示拷贝 /etc/kubernetes/admin.conf$HOME/.kube/config 并赋权。
  • 安装 CNI 网络插件:
    • Calico:kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml
    • Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • 加入工作节点:使用 kubeadm init 输出中的 join 命令(包含 token–discovery-token-ca-cert-hash),在对应节点执行完成入群。
  • 快速体验替代方案:在开发/测试环境可用 MicroK8s 一键安装(sudo snap install microk8s --classic),通过 microk8s enable dns dashboard registry 快速启用常用组件。

四 常见故障排查与快速修复

  • Pod 处于 Pending:优先执行 kubectl describe pod <name> | grep Events 查看调度与资源事件;常见原因为 资源不足无可用节点匹配污点/节点选择器;结合 kubectl get nodes -o wide 与节点可分配资源核实。
  • Service 无法访问:核对 Service selector 与 Pod label 是否一致;执行 kubectl describe service <svc> 检查 Endpoints 是否为空;排查是否存在 NetworkPolicy 拦截入站流量。
  • 节点 NotReady:检查 containerdkubelet 状态与日志(sudo systemctl status containerd/kubeletjournalctl -u kubelet -f),确认 CNI 插件 Pod 已 Running 且节点网络配置正确。
  • 忘记 Join 命令:在控制平面执行 kubeadm token create --print-join-command 重新生成 join 命令;若 token 过期,先 kubeadm token create 再生成。

五 生产级优化与安全加固

  • 高可用控制平面:使用 kubeadm 部署多主,首节点初始化后,其余主节点使用 kubeadm join ... --control-plane 加入;前置 负载均衡 对外暴露 6443 端口,提升控制面容灾能力。
  • 持久化存储:结合 StorageClass/Local PV 提供有状态应用持久化;示例 Local PV 可绑定节点本地目录并设置 nodeAffinity,确保调度到指定节点。
  • 安全加固:启用 RBAC 最小权限模型;按需配置 NetworkPolicy 实现命名空间与服务间流量隔离;定期审计与更新集群组件版本。
  • 监控与弹性:部署 Metrics Server 以启用 kubectl top;为关键业务 Deployment 配置 HPA(如基于 CPU 利用率自动扩缩)。
  • 备份与恢复:定期备份 etcd(示例:ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db ...),灾难恢复时按流程停止 kube-apiserver/etcd、恢复快照并重启服务。

0