温馨提示×

Debian Kubernetes安装步骤是什么

小樊
34
2025-12-09 04:15:09
栏目: 智能运维

在 Debian 上使用 kubeadm 安装 Kubernetes 的步骤

一 环境准备

  • 系统建议:使用 Debian 12(Bookworm),内核较新,容器生态兼容更好。
  • 硬件建议:每个节点至少 2 核 CPU、2GB 内存、20GB 磁盘(生产环境建议更高)。
  • 网络与时间:节点间网络互通,建议启用 NTP/chrony 时间同步。
  • 主机标识:设置唯一 主机名,必要时在 /etc/hosts 做解析;克隆的虚拟机需确保 MAC 地址product_uuid 唯一。
  • 防火墙与安全组:放通 6443(API Server)10250(kubelet)10251/10252(kube-scheduler/controller-manager)、以及 8472(Flannel VXLAN) 等端口(或临时关闭防火墙以便部署)。
  • 容器运行时:安装 Dockercontainerd(下文以 Docker 为例)。

二 安装容器运行时与系统参数

  • 安装 Docker(示例)
    sudo apt update
    sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
    curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt update
    sudo apt install -y docker-ce docker-ce-cli containerd.io
    sudo systemctl enable --now docker
    
  • 关闭 Swap
    sudo swapoff -a
    sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
    
  • 加载内核模块与开启桥接转发
    sudo modprobe overlay
    sudo modprobe br_netfilter
    
    cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
    overlay
    br_netfilter
    EOF
    
    cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-k8s.conf
    net.bridge.bridge-nf-call-iptables  = 1
    net.ipv4.ip_forward                 = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    EOF
    
    sudo sysctl --system
    

三 安装 kubeadm kubelet kubectl

  • 添加 Kubernetes APT 源并安装组件
    sudo apt update
    sudo apt install -y apt-transport-https curl
    
    # 注意:Debian 12 的发行代号是 bookworm,但 Kubernetes 仓库仍使用 xenial 目录
    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 > /dev/null
    
    sudo apt update
    sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl
    
  • 启动 kubelet
    sudo systemctl enable --now kubelet
    

四 初始化控制平面并配置 kubectl

  • 初始化 Master(示例)
    sudo kubeadm init \
      --apiserver-advertise-address=<MASTER_IP> \
      --pod-network-cidr=10.244.0.0/16 \
      --service-cidr=10.96.0.0/12
    
    如在国内环境拉取镜像较慢,可指定镜像仓库:
    sudo kubeadm init \
      --apiserver-advertise-address=<MASTER_IP> \
      --image-repository=registry.aliyuncs.com/google_containers \
      --pod-network-cidr=10.244.0.0/16 \
      --service-cidr=10.96.0.0/12
    
  • 配置 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
    
  • 获取加入命令(在 Master 上)
    kubeadm token create --print-join-command
    

五 加入工作节点与验证

  • 加入 Worker
    sudo kubeadm join <MASTER_IP>:6443 \
      --token <TOKEN> \
      --discovery-token-ca-cert-hash sha256:<HASH>
    
  • 验证集群
    kubectl get nodes
    kubectl get pods -A
    kubectl cluster-info
    
  • 简单应用测试
    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
    # 在浏览器或使用 curl 访问 NodeIP:NodePort
    

六 常见问题与排错要点

  • 镜像拉取失败:使用国内镜像仓库(如 registry.aliyuncs.com/google_containers),或提前 docker pull 所需镜像。
  • 节点 NotReady:确认 Flannel/Calico 已成功部署,Pod 网段与控制平面网段不冲突,内核转发与桥接规则已生效。
  • kubelet 启动失败:确认 Swap 已关闭cgroups 驱动一致(Docker 默认 cgroupfs,kubelet 常用 systemd;如不一致需统一),以及 /var/lib/kubelet 权限正确。
  • 加入命令过期:在 Master 重新生成 kubeadm token create --print-join-command
  • 时间不同步:部署并启用 chronyNTP,确保节点间时间误差在合理范围内。

0