Ubuntu 部署 Kubernetes 的实用技巧
一 环境准备与内核参数
sudo apt update && sudo apt upgrade -y,安装 curl、gnupg、apt-transport-https、ca-certificates 等基础包,便于后续添加仓库与签名校验。sudo swapoff -a 并注释 /etc/fstab 中的 swap 行,避免重启后恢复。net.ipv4.ip_forward=1、net.bridge.bridge-nf-call-iptables=1、net.bridge.bridge-nf-call-ip6tables=1,随后 sudo sysctl -p 生效。sudo containerd config default | sudo tee /etc/containerd/config.toml && sudo systemctl restart containerd && sudo systemctl enable containerd。二 组件安装与版本控制
/etc/apt/keyrings/kubernetes-archive-keyring.gpg 与 /etc/apt/sources.list.d/kubernetes.list),确保包来源可信。sudo apt install -y kubeadm=1.28.* kubelet=1.28.* kubectl=1.28.*。sudo apt-mark hold kubeadm kubelet kubectl,保持集群组件版本稳定。sudo systemctl enable kubelet(暂不启动,待 kubeadm 初始化后再拉起),避免与容器运行时未就绪产生冲突。三 集群初始化与网络插件
--pod-network-cidr 指定 Pod 网段,需与所选 CNI 插件一致(如 Calico 常用 192.168.0.0/16,Flannel 常用 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 并赋权。kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yamlkubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.ymlkubeadm init 输出中的 join 命令(包含 token 与 –discovery-token-ca-cert-hash),在对应节点执行完成入群。sudo snap install microk8s --classic),通过 microk8s enable dns dashboard registry 快速启用常用组件。四 常见故障排查与快速修复
kubectl describe pod <name> | grep Events 查看调度与资源事件;常见原因为 资源不足 或 无可用节点匹配污点/节点选择器;结合 kubectl get nodes -o wide 与节点可分配资源核实。kubectl describe service <svc> 检查 Endpoints 是否为空;排查是否存在 NetworkPolicy 拦截入站流量。sudo systemctl status containerd/kubelet、journalctl -u kubelet -f),确认 CNI 插件 Pod 已 Running 且节点网络配置正确。kubeadm token create --print-join-command 重新生成 join 命令;若 token 过期,先 kubeadm token create 再生成。五 生产级优化与安全加固
kubeadm join ... --control-plane 加入;前置 负载均衡 对外暴露 6443 端口,提升控制面容灾能力。kubectl top;为关键业务 Deployment 配置 HPA(如基于 CPU 利用率自动扩缩)。ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db ...),灾难恢复时按流程停止 kube-apiserver/etcd、恢复快照并重启服务。