Ubuntu部署Kubernetes有哪些技巧
导读:Ubuntu 部署 Kubernetes 的实用技巧 一 环境准备与内核参数 统一系统版本与基础工具:优先选择 Ubuntu 22.04/24.04,执行 sudo apt update && sudo apt upgra...
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=1、net.bridge.bridge-nf-call-iptables=1、net.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/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 并赋权。 - 安装 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
- Calico:
- 加入工作节点:使用
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:检查 containerd 与 kubelet 状态与日志(
sudo systemctl status containerd/kubelet、journalctl -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、恢复快照并重启服务。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu部署Kubernetes有哪些技巧
本文地址: https://pptw.com/jishu/782241.html
