温馨提示×

Debian上Kubernetes的安装实践

小樊
43
2026-01-03 16:20:11
栏目: 智能运维

在 Debian 上用 kubeadm 搭建可用的 Kubernetes 集群

一 环境与前置准备

  • 节点规划:至少准备 1 台控制平面 + 1 台工作节点;建议硬件 ≥2 核 CPU、≥2GB 内存、≥20GB 磁盘,并确保节点间网络互通。
  • 系统设置:为所有节点设置唯一 hostname 并在 /etc/hosts 做好解析;关闭 swap(执行 sudo swapoff -a 并注释 /etc/fstab 中的 swap 行);按需放行防火墙端口(如 6443、10250 等);确保 kubelet 能开机自启(sudo systemctl enable kubelet)。

二 安装容器运行时与 Kubernetes 组件

  • 容器运行时(两种常见做法,二选一)
    • Docker(便于上手)
      • 安装:sudo apt-get update && sudo apt-get install -y docker.io
      • 启动与开机:sudo systemctl start docker && sudo systemctl enable docker
    • containerd(更贴近 K8s 原生)
      • 安装:sudo apt-get update && sudo apt-get install -y containerd
      • 启用:sudo systemctl start containerd && sudo systemctl enable containerd
  • 添加 Kubernetes APT 源并安装组件(推荐新方式,便于版本管理)
    • 导入密钥:curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.33/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    • 添加源(将 $version 替换为目标版本,如 v1.33):
      • echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/$version/deb/ /" | 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
  • 说明
    • 旧教程常见写法为使用 apt-key addkubernetes-xenial 源,功能可用但新方式(signed-by + keyrings)更安全、可维护;若网络访问受限,可替换为国内镜像源(如 pkgs.k8s.io 的国内镜像)。

三 初始化控制平面与配置 kubectl

  • 初始化控制平面(示例命令,按需调整 Pod CIDR 与 kube-proxy 模式)
    • Flannel 网络:sudo kubeadm init --pod-network-cidr=10.244.0.0/16
    • Calico 网络:sudo kubeadm init --pod-network-cidr=192.168.0.0/16
  • 配置 kubectl(当前用户)
    • mkdir -p $HOME/.kube
    • sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 安装网络插件(二选一)
    • 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
  • 验证:kubectl cluster-infokubectl get nodes(节点状态应为 Ready)。

四 加入工作节点与验证

  • 获取加入命令:在控制平面执行 kubeadm token create --print-join-command,复制输出的完整 kubeadm join ... 命令。
  • 在工作节点执行该命令(示例)
    • sudo kubeadm join <Master-IP>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
  • 回到控制平面验证
    • kubectl get nodes(所有节点 Ready
    • 运行示例应用: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 字段可见端口,如 31743
    • 访问测试:curl http://<任意节点IP>:<NodePort>

五 常见问题与优化建议

  • 镜像与网络
    • 若拉取镜像失败,可配置国内镜像仓库或使用本地镜像缓存;确保节点可访问 k8s.gcr.io / registry.k8s.io 等镜像源。
    • Pod 网段需与所选 CNI 插件一致(如 Flannel 10.244.0.0/16Calico 192.168.0.0/16)。
  • 防火墙与安全组
    • 放行 6443(API Server)10250(kubelet)8472(Flannel VXLAN)30000–32767(NodePort) 等端口;云上环境同步配置安全组规则。
  • 版本与升级
    • 生产环境建议固定 Kubernetes 小版本,避免误升级;使用 apt-mark hold kubelet kubeadm kubectl 锁定版本,升级前先在测试环境验证。
  • 容器运行时与 CRI
    • 若计划使用 containerd/CRI-O,需按官方指引配置 CRI 与镜像仓库;kubeadm 默认会检测并适配已配置的容器运行时。
  • 单节点场景
    • 若仅单节点学习/测试,可在 kubeadm init 后执行 kubectl taint nodes --all node-role.kubernetes.io/control-plane- 以允许调度系统 Pod 到控制平面。

0