温馨提示×

Debian上K8s安装的最佳实践

小樊
44
2025-12-28 19:50:20
栏目: 智能运维

Debian 上 Kubernetes 安装最佳实践

一 环境与规划

  • 操作系统与版本:优先选择 Debian 12(Bookworm),内核与驱动支持更好,容器生态兼容性强。
  • 硬件基线:控制平面建议至少 2 核 CPU / 4 GB RAM / 20 GB 磁盘;工作节点按业务负载适当提升。
  • 网络与互通:所有节点间需 IP 可达,规划好 Pod 网络 CIDRService CIDR,避免与现有网段冲突;多网卡环境明确 API Server 广告地址
  • 主机名与解析:为每个节点设置清晰主机名(如 master、worker1),并在 /etc/hosts 或 DNS 中维护解析,减少因解析异常导致的组件异常。
  • 时间同步:安装并启用 NTP/chrony,确保证书校验、日志与调度稳定。

二 系统准备与内核参数

  • 系统更新与依赖:执行 apt update && apt upgrade -y,安装 apt-transport-https、ca-certificates、curl、gnupg 等基础工具。
  • 禁用 Swap:执行 swapoff -a 并注释 /etc/fstab 中的 swap 行,避免 kubelet 调度与稳定性受影响。
  • 内核模块与转发:加载 overlay、br_netfilter 并开启桥接与转发。
  • sysctl 网络参数:开启桥接流量进入 iptables、启用 IPv4 转发,确保 Pod 间与服务流量正常。
  • 参考命令
    • 模块加载
      sudo tee /etc/modules-load.d/containerd.conf <<EOF
      overlay
      br_netfilter
      EOF
      sudo modprobe overlay
      sudo modprobe br_netfilter
      
    • sysctl 配置
      sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf <<EOF
      net.bridge.bridge-nf-call-iptables  = 1
      net.bridge.bridge-nf-call-ip6tables = 1
      net.ipv4.ip_forward                 = 1
      EOF
      sudo sysctl --system
      

三 容器运行时选择与安装

  • 运行时选型:生产环境优先 containerd(与 K8s 原生集成、维护简单);如需 Docker,也可使用其内置的 containerd。
  • containerd 安装与配置
    • 安装与启用
      sudo apt-get update
      sudo apt-get install -y containerd
      sudo systemctl enable --now containerd
      
    • 生成默认配置并启用 SystemdCgroup(与 kubelet 一致)
      sudo mkdir -p /etc/containerd
      containerd config default | sudo tee /etc/containerd/config.toml
      sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
      sudo systemctl restart containerd
      
  • Docker 安装(可选)
    sudo apt-get update
    sudo apt-get install -y docker-ce docker-ce-cli containerd.io
    sudo systemctl enable --now docker
    

四 安装 kubeadm kubelet kubectl 与初始化集群

  • 添加仓库与安装组件(锁定版本避免滚动升级引发不一致)
    curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/kubernetes-archive-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo apt-get update
    sudo apt-get install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
    
  • 初始化控制平面(按网络规划设置参数)
    sudo kubeadm init \
      --pod-network-cidr=10.244.0.0/16 \
      --service-cidr=10.0.0.0/16 \
      --apiserver-advertise-address=<MASTER_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
    
  • 安装网络插件(与 Pod CIDR 保持一致)
    • 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
      
  • 工作节点加入
    • 使用 kubeadm init 输出中的 kubeadm join 命令在各 Worker 上执行,加入完成后在 Master 上执行 kubectl get nodes 检查状态。

五 防火墙端口 安全与运维

  • 防火墙放行(示例为 UFW;如使用 firewalld/iptables 请放行等价端口)
    sudo ufw allow 6443/tcp   # API Server
    sudo ufw allow 2379:2380/tcp # etcd
    sudo ufw allow 10250/tcp # kubelet API
    sudo ufw allow 10251/tcp # kube-scheduler
    sudo ufw allow 10252/tcp # kube-controller-manager
    sudo ufw allow 10255/tcp # kubelet read-only(可选)
    sudo ufw reload
    
  • 安全与稳定
    • 全程 禁用 Swap;按需最小化开放端口;使用 密钥登录 替代口令;为 kubelet 配置合适的 cgroup 驱动(与容器运行时一致)。
  • 备份与升级
    • 定期备份 etcd(如使用外部 etcd,建议定期快照);升级前在测试环境验证,采用 滚动升级 策略,先升级控制平面再升级工作节点,保持 kubelet/kubeadm/kubectl 版本一致。
  • 监控与合规
    • 部署监控告警(如节点资源、Pod 状态)、审计日志与基线检查(如 kube-bench),持续验证集群安全与合规状态。

0