温馨提示×

Debian服务器K8s安装全攻略

小樊
35
2025-12-26 20:49:22
栏目: 云计算

Debian服务器K8s安装全攻略

一 环境准备与前置条件

  • 系统版本:建议使用 Debian 11/12,内核较新且支持容器特性。
  • 硬件建议:每节点至少 2 核 CPU、2GB 内存、20GB 磁盘(生产建议 4GB+)。
  • 网络与解析:所有节点配置 静态 IP,并在 /etc/hosts 中写入主机名映射,确保节点互相解析;节点间可 SSH 互通并具备外网访问能力(拉取镜像)。
  • 时间同步:安装并启用 NTP/chrony,避免时间漂移导致证书校验异常。
  • 防火墙与 SELinux:如启用防火墙需放行必要端口(如 6443、10250-10252 等);如使用 SELinux,建议设为 permissive
  • 主机名:为各节点设置唯一 hostname(如 master、worker1)。

二 系统基础配置

  • 关闭 Swap(Kubernetes 要求):
    • 临时:sudo swapoff -a
    • 永久:注释 /etc/fstab 中的 swap 行
  • 内核模块与转发:
    • 加载模块:sudo modprobe overlay && sudo modprobe br_netfilter
    • 写入配置:
      • /etc/modules-load.d/containerd.conf:overlaybr_netfilter
      • /etc/sysctl.d/99-kubernetes-k8s.conf:
        • net.bridge.bridge-nf-call-iptables = 1
        • net.ipv4.ip_forward = 1
    • 生效:sudo sysctl --system
  • 容器运行时(二选一,推荐 containerd):
    • containerd(更贴近 K8s 原生):
      • 安装:sudo apt update && sudo apt install -y containerd
      • 生成默认配置:sudo containerd config default | sudo tee /etc/containerd/config.toml
      • 可选镜像加速(按需):在 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 下配置国内镜像源
      • 启动:sudo systemctl enable --now containerd
    • Docker(传统选择):
      • 安装依赖与源后:sudo apt install -y docker-ce docker-ce-cli containerd.io
      • 启动:sudo systemctl enable --now docker
  • 说明:Kubernetes 1.24+ 默认使用 containerd 作为容器运行时,但仍可通过 Docker 间接提供(需安装 cri-dockerd)。

三 安装Kubernetes核心组件

  • 添加 Kubernetes APT 源并安装组件(所有节点执行):
    • 添加源与密钥:
      • 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(避免自动升级引发不兼容)
  • 说明:上述源适用于 x86_64;其他架构请参考官方说明。

四 初始化Master节点与配置kubectl

  • 初始化控制平面(仅在 Master 执行):
    • Flannel 网络插件:sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    • Calico 网络插件:sudo kubeadm init(使用 Calico 默认 Pod CIDR,后续以 Calico 清单为准)
  • 配置 kubectl:
    • mkdir -p $HOME/.kube
    • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 记录输出中的 kubeadm join 命令,用于后续 Worker 加入。

五 安装网络插件与加入Worker节点

  • 安装网络插件(在 Master 执行,二选一):
    • 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
  • 加入 Worker 节点(在各 Worker 执行):
    • 使用 kubeadm init 输出中的命令,例如:
      • sudo kubeadm join 192.168.1.10:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  • 验证:
    • 节点状态:kubectl get nodes(所有节点应为 Ready
    • 系统 Pod:kubectl get pods -n kube-system(如 kube-flannel-dscalico-* 均为 Running

六 验证与常见问题处理

  • 快速验证:
    • 部署测试应用:kubectl create deployment nginx-app --image=nginx --replicas=2
    • 暴露服务:kubectl expose deployment nginx-app --name=nginx-web-svc --type=NodePort --port=80 --target-port=80
    • 访问测试:kubectl get svc nginx-web-svc 获取 NodePort,通过 http://<任意节点IP>:<NodePort> 访问
  • 常见问题与排查:
    • 节点 NotReady:检查 CNI 插件是否就绪、Pod CIDR 是否与插件配置一致(如 Flannel 使用 10.244.0.0/16
    • kubelet 启动失败:确认 Swap 已关闭cgroups 驱动一致(containerd 常见为 systemd)、镜像可拉取
    • 端口被拒:放行 6443(API Server)10250(kubelet)10251/10252(kube-scheduler/controller-manager) 等必要端口
    • 镜像拉取慢/失败:配置 containerd 镜像加速 或使用国内镜像仓库
    • Token 过期:在 Master 执行 kubeadm token create --print-join-command 重新生成加入命令
  • 生产建议:
    • 使用 3 控制平面节点 实现高可用(kubeadm HA)
    • 采用 Calico 等支持网络策略的 CNI,按需配置 RBAC、准入控制、审计
    • 配置 持久化存储(如 NFS、Ceph、Longhorn)与 备份/恢复 策略

0