温馨提示×

如何快速在Ubuntu上安装K8s

小樊
36
2025-11-30 20:34:08
栏目: 智能运维

在 Ubuntu 上快速安装 Kubernetes 的标准做法

一 环境准备与系统设置

  • 建议准备至少2 核 CPU、2 GB 内存、20 GB 磁盘的单机或1 主 N 从集群,Ubuntu 20.04/22.04 均可。以下命令默认以 root 执行,非 root 请在命令前加 sudo
  • 关闭 Swap(必须):
    • 临时:swapoff -a
    • 永久:sed -ri ‘/^[^#]*swap/s@^@#@’ /etc/fstab
  • 桥接流量转发与内核参数:
    • modprobe br_netfilter
    • echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    • echo 1 > /proc/sys/net/ipv4/ip_forward
  • 可选:简化网络策略(测试环境)
    • ufw disable
  • 主机名与解析(示例):
    • hostnamectl set-hostname master
    • echo “10.0.0.10 master” >> /etc/hosts
  • 容器运行时建议:优先使用 containerd(K8s 官方推荐),也可使用 Docker(需配置 cgroup 驱动为 systemd)。

二 安装容器运行时 containerd(推荐)

  • 安装与启动:
    • apt-get update && apt-get install -y containerd runc
    • systemctl enable --now containerd
  • 生成默认配置并启用 systemd cgroup:
    • containerd config default | tee /etc/containerd/config.toml
    • 在 [plugins.“io.containerd.grpc.v1.cri”] 下设置 SystemdCgroup = true
  • 配置国内镜像仓库并重启:
    • sed -i ‘s|sandbox_image = .*|sandbox_image = “registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9”|’ /etc/containerd/config.toml
    • systemctl restart containerd
  • 说明:pause 镜像版本需与后续 kubeadm 拉取的版本一致,可用 kubeadm config images list 查看。

三 安装 kubeadm kubelet kubectl

  • 配置国内 APT 源(以 Ubuntu 22.04/jammy 为例,安装 v1.28 系列):
    • mkdir -p -m 755 /etc/apt/keyrings
    • curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    • echo “deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.28/deb/ /” | tee /etc/apt/sources.list.d/kubernetes.list
  • 安装组件并固定版本:
    • apt-get update && apt-get install -y kubelet kubeadm kubectl
    • apt-mark hold kubelet kubeadm kubectl
  • 提示:如需其他版本,将上面 URL 中的 v1.28 替换为目标版本(如 v1.29)。

四 初始化控制平面与网络插件

  • 预拉取镜像(避免墙导致 init 卡住):
    • kubeadm config images pull --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers
  • 初始化 Master(单节点可直接使用,Pod 网段与后续 CNI 保持一致):
    • kubeadm init --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.28.0
  • 配置 kubectl:
    • mkdir -p $HOME/.kube
    • cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    • 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 get nodes(约等待 1–2 分钟变为 Ready)。

五 加入工作节点与常见问题

  • 加入 Node:在 Master 初始化输出中找到并复制 kubeadm join … 命令,在每台 Node 上执行。若 token 过期,可在 Master 上执行:kubeadm token create --print-join-command 重新生成。
  • 常见问题速解:
    • 镜像拉取失败:确认已设置 --image-repository,或用 kubeadm config images pull 预拉取;pause 镜像版本需与 kubeadm 一致。
    • cgroup 驱动不一致:containerd 需启用 SystemdCgroup;Docker 需配置 “exec-opts”: [“native.cgroupdriver=systemd”] 并重启。
    • 端口占用或防火墙:放行 6443/10250/10251/10252 等端口,或临时关闭防火墙用于测试。
    • 初始化失败回滚:执行 kubeadm reset 后重新 init。
    • 单节点需要调度系统 Pod:kubectl taint nodes --all node-role.kubernetes.io/control-plane- 或 kubectl taint nodes --all node-role.kubernetes.io/master-。

0