温馨提示×

Debian如何优化K8s安装过程

小樊
37
2025-12-28 19:49:20
栏目: 智能运维

Debian 上优化 Kubernetes 安装的可执行方案

一 标准化与自动化

  • 使用 kubeadm 标准化部署,容器运行时优先 containerd(原生集成、维护简单),也可选 Docker
  • 将重复操作脚本化(关闭 Swap、加载内核模块、配置 sysctl、安装组件、初始化、安装 CNI),减少人为失误并便于复用。
  • 单节点快速体验可用一键脚本;多节点或 HA 场景使用 Kubespray(基于 Ansible)批量部署与升级。
  • 镜像拉取慢时,使用国内镜像源或在 kubeadm 初始化时通过 image-repository 指定镜像仓库,加速拉取。

二 系统预检与内核网络优化

  • 基础要求:每个节点至少 2 核 CPU、2GB 内存、20GB 磁盘;使用 Debian 11/12 稳定版,系统更新到最新补丁。
  • 主机名与解析:设置清晰主机名,并在 /etc/hosts 添加 IP-主机名 映射,避免 DNS 解析问题。
  • 时间同步:安装并启用 NTP,确保节点时间一致,避免证书校验与日志混乱。
  • 关闭 Swap:执行 swapoff -a 并注释 /etc/fstab 中的 swap 行,保证 kubelet 正常调度。
  • 内核模块与转发:加载 overlay、br_netfilter 并设置:
    • net.bridge.bridge-nf-call-iptables = 1
    • net.bridge.bridge-nf-call-ip6tables = 1
    • net.ipv4.ip_forward = 1
  • 可选性能调优(/etc/sysctl.conf 或 /etc/sysctl.d/):
    • net.core.somaxconn = 65535
    • net.ipv4.tcp_max_syn_backlog = 65535
    • net.ipv4.ip_local_port_range = 1024 65535
    • net.ipv4.tcp_tw_reuse = 1
    • net.ipv4.tcp_fin_timeout = 30
    • net.ipv4.tcp_max_tw_buckets = 180000
    • vm.swappiness = 10
      执行 sysctl --system 使配置生效。

三 容器运行时与 kubeadm 初始化优化

  • containerd(推荐):
    • 安装并启用:apt-get install -y containerd && systemctl enable --now containerd
    • 生成默认配置并启用 SystemdCgroup
      • containerd config default | tee /etc/containerd/config.toml
      • sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/g’ /etc/containerd/config.toml
      • systemctl restart containerd
  • Docker(可选):apt-get install -y docker.io && systemctl enable --now docker
  • 安装组件:在所有节点安装 kubelet、kubeadm、kubectl,并 apt-mark hold 固定版本,避免自动升级引发不兼容。
  • kubeadm 初始化要点:
    • 指定 Pod CIDR(与 CNI 一致,如 Flannel 使用 10.244.0.0/16
    • 指定 Service CIDR(如 10.96.0.0/1210.0.0.0/16,避免与现有网络冲突)
    • 指定 API Server 广告地址:–apiserver-advertise-address=<本机IP>
    • 镜像拉取慢:–image-repository=registry.aliyuncs.com/google_containers
    • 快速单节点示例:kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
  • 获取加入命令:在主节点执行 kubeadm token create --print-join-command,在 Worker 节点执行输出命令加入集群。

四 网络与安全配置

  • 防火墙放行关键端口(示例为 ufw):
    • 控制平面:6443(API Server)、2379-2380(etcd)、10250(kubelet)、10251/10252(kube-scheduler/kube-controller-manager)
    • 工作节点:10250(kubelet),如需只读端口可放行 10255
  • CNI 选择与安装:
    • Flannel(轻量、易用):kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • Calico(大规模、策略丰富):kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    • 确保 Pod CIDR 与 CNI 配置一致,否则节点会长期处于 NotReady
  • kubectl 配置:mkdir -p $HOME/.kube && sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config && sudo chown $(id -u):$(id -g) $HOME/.kube/config。

五 验证与后续维护

  • 快速验证:
    • kubectl get nodes(状态应为 Ready
    • kubectl get pods -n kube-system(确认 CNI 与核心组件 Running
  • 常见问题速排:
    • 节点 NotReady:确认 CNI 已安装PodCIDR 匹配
    • kubeadm init 失败:检查 Swap 关闭内核模块与转发生效容器运行时正常网络与端口可达
    • kubectl 权限问题:确认 $HOME/.kube/config 正确拷贝且属主正确
  • 备份与升级:
    • 定期备份 etcd(如 etcdctl snapshot save),用于灾难恢复
    • 使用 Kubespray 进行批量升级与维护,降低多节点变更风险

0