温馨提示×

Debian系统K8s安装的最佳实践分享

小樊
32
2025-12-22 23:45:46
栏目: 智能运维

Debian 上安装 Kubernetes 的最佳实践

一 环境与前置检查

  • 使用 Debian 12(Bookworm) 或更高版本,推荐至少 2 核 CPU、2GB 内存、20GB 磁盘,节点间网络互通且时间同步(建议启用 NTP/chrony)。
  • 设置主机名与解析:为每个节点设置唯一 hostname,并在 /etc/hosts 中添加所有节点的 IP-主机名 映射,避免解析依赖外部 DNS。
  • 关闭 Swap:临时执行 swapoff -a,并在 /etc/fstab 中注释含 “swap” 的行,确保 kubelet 正常运行。
  • 加载内核模块与网络参数:启用 overlay、br_netfilter,并开启桥接流量进入 iptables、IPv4 转发。
  • 资源与文件句柄:提升系统限制(如 nofile),避免高并发场景资源不足。
  • 唯一性校验:确保各节点的 MAC 地址product_uuid 唯一,避免虚拟化克隆导致的冲突。

二 容器运行时选择与配置

  • 运行时建议:自 v1.24 起,Dockershim 移除,推荐使用 containerdCRI-O;若必须使用 Docker,需通过 cri-dockerd 适配。
  • 安装与启用 containerd:安装后生成默认配置,启用 SystemdCgroup,并启动服务。
  • 配置示例(containerd):
    • 安装:sudo apt update && sudo apt install -y containerd
    • 生成配置:sudo containerd config default | sudo tee /etc/containerd/config.toml
    • 启用 cgroup:sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/’ /etc/containerd/config.toml
    • 重启:sudo systemctl restart containerd && sudo systemctl enable containerd
  • 如必须使用 Docker:安装 Docker 并配置 native.cgroupdriver=systemd,再部署 cri-dockerd,kubeadm 初始化时通过 –cri-socket unix:///var/run/cri-dockerd.sock 指定。

三 安装 kubeadm kubelet kubectl 与初始化

  • 添加 APT 源并安装组件(Debian 与 Ubuntu 通用仓库代号保持为 kubernetes-xenial):
    • 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 update && sudo apt install -y kubelet kubeadm kubectl
    • sudo apt-mark hold kubelet kubeadm kubectl(锁定版本,避免滚动升级导致不一致)
  • 版本兼容:控制平面与 kubelet 允许相差 1 个次要版本,但 kubelet 版本不可高于 API Server
  • 初始化控制平面(示例):
    • kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<主节点IP>
    • 如网络插件需要自定义网段,务必与初始化参数一致。
  • 配置 kubectl:
    • mkdir -p $HOME/.kube
    • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件:
    • Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    • 或 Flannel:kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
  • 加入工作节点:在控制平面输出或 kubeadm token create 生成的命令上执行 kubeadm join

四 防火墙与安全加固

  • 防火墙策略:不建议直接关闭防火墙,按需放行端口更稳妥。
  • UFW 放行示例(按需精简):
    • 控制平面:sudo ufw allow 6443/tcp(kube-apiserver)
    • etcd:2379/tcp、2380/tcp
    • kubelet API:10250/tcp
    • 调度与控制器:10251/tcp(kube-scheduler)10252/tcp(kube-controller-manager)
    • 节点指标:10255/tcp(kubelet read-only)
    • 重新加载:sudo ufw reload
  • 安全基线:启用 RBAC 最小权限;定期更新 Kubernetes 与容器镜像 修复漏洞;仅在必要时开放端口与访问来源。

五 验证 优化与常见坑

  • 验证与观测:
    • 查看集群与节点:kubectl cluster-info、kubectl get nodes
    • 部署监控与日志:部署 Prometheus + Grafana 监控资源与告警,使用 ELK/EFK 管理日志。
  • 常见坑与优化:
    • Pod 环境变量过多导致启动失败:在 Pod spec 中设置 enableServiceLinks: false
    • 节点不可调度:检查 污点(taints)容忍(tolerations) 配置。
    • 资源争抢:为工作负载设置合理的 requests/limits,结合 HPA 实现弹性。
    • 升级策略:跨版本升级需谨慎,先在非核心集群演练,遵循版本兼容规则。
    • 国内镜像加速:镜像拉取慢时,可预先拉取并 重打标签 或使用合规镜像仓库,再执行 kubeadm init。

0