温馨提示×

如何在Ubuntu上快速部署Kubernetes

小樊
34
2025-12-06 17:49:58
栏目: 智能运维

在 Ubuntu 上快速部署 Kubernetes 的可选方案

  • 使用 kubeadm 搭建标准多节点集群(可控、贴近生产、适合学习/测试/预发)。
  • 使用 microk8s 一键安装(最快、适合本地开发/验证,一条命令即可启动)。

方案一 使用 kubeadm 快速搭建多节点集群

  • 环境要求

    • 操作系统:Ubuntu 20.04/22.04(或 18.04
    • 资源:每节点至少 2 核 CPU、2–4 GB 内存、20 GB 磁盘
    • 网络:节点间 IP 互通,各节点 主机名/MAC/产品 UUID 唯一
    • 容器运行时:containerd(推荐)或 Docker(需额外配置 CRI 兼容层)
  • 所有节点前置准备(以 containerd 为例)

    • 关闭 Swap
      • 执行:sudo swapoff -a && sudo sed -i '/ swap / s/^/#/' /etc/fstab
    • 加载内核模块与开启桥接转发
      • 执行:
        • echo -e "br_netfilter\noverlay" | sudo tee /etc/modules-load.d/k8s.conf
        • sudo modprobe br_netfilter overlay
        • cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF
        • sudo sysctl --system
    • 安装并配置 containerd(使用 systemd cgroup 驱动)
      • 安装:sudo apt-get update && sudo apt-get install -y containerd
      • 生成默认配置:sudo containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
      • 启用 systemd cgroup:将 /etc/containerd/config.toml 中的 SystemdCgroup = false 改为 SystemdCgroup = true
      • 重启:sudo systemctl restart containerd && sudo systemctl enable containerd
    • 安装 kubeadm/kubelet/kubectl(版本保持一致)
      • 导入 GPG 并添加源:
        • curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.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 ufw disable
      • 确保各节点 MAC 地址product_uuid 唯一,避免 kubelet 识别异常。
  • 初始化控制平面(仅在 Master 节点)

    • 拉取所需镜像(可选,提前缓存以加速 init):sudo kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
    • 初始化(按需替换参数,示例采用 Flannel 的 Pod CIDR):
      • sudo kubeadm init \ --kubernetes-version=v1.28.2 \ --image-repository=registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 \ --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
    • 安装网络插件(Flannel):
      • kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
    • 记录节点加入命令(在 init 成功输出中),形如:
      • kubeadm join <MASTER_IP>:6443 --token <TOKEN> --discovery-token-ca-cert-hash sha256:<HASH>
  • 加入工作节点(在每个 Worker 节点)

    • 直接执行上一步保存的 kubeadm join ... 命令完成入群。
  • 验证集群

    • 在 Master 节点执行:kubectl get nodes,状态应为 Ready

方案二 使用 microk8s 一键安装(最快)

  • 安装与启用
    • 安装:sudo snap install microk8s --classic
    • 常用插件:microk8s enable dashboard dns registry community istio
    • 查看状态:microk8s status
  • 基本使用
    • 部署测试应用:
      • microk8s kubectl create deployment nginx --image=nginx
      • microk8s kubectl expose deployment nginx --port=80 --target-port=80 --type=ClusterIP
      • microk8s kubectl get service nginx
    • 启停集群:microk8s start / microk8s stop
  • 适用场景
    • 本地开发/功能验证/CI 环境,追求最快启动与最少配置。

常见问题与快速排查

  • 初始化失败或 kubelet 不断重启

    • 确认已关闭 Swap、加载 br_netfilter/overlay、开启 ip_forward,并执行 sysctl --system
    • 确认 containerd 使用 systemd cgroup 驱动并已重启
    • 检查端口占用(如 6443/10250/10251/10252 等),必要时关闭占用进程或调整端口规划
    • 若曾异常中断,先执行 sudo kubeadm reset 再重新 init。
  • 节点 NotReady

    • 确认已安装并成功运行 CNI 网络插件(如 Flannel/ Calico)
    • 确认节点间 网络互通主机名唯一MAC/UUID 唯一
    • 查看 kubelet 日志:sudo journalctl -u kubelet -f,定位镜像拉取、cgroup、网络等问题。

0