在 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
- 可选:简化网络策略(测试环境)
- 主机名与解析(示例):
- 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-。