Ubuntu 配置 Kubernetes 环境
一 环境准备与前置检查
- 系统建议:Ubuntu 20.04/22.04/24.04,2 核 CPU、4 GB 内存、20 GB 磁盘以上。
- 主机名与解析:为各节点设置唯一主机名,并在 /etc/hosts 中做好解析,便于集群内通信。
- 时间同步:安装并启用 chrony 保证节点时间一致。
- 唯一性校验:确保各节点 MAC 地址 与 product_uuid 唯一,避免 kubelet 识别异常。
- 网络互通:确认节点间 ICMP/SSH 可达,规划好管理网与控制面网段。
- 端口与防火墙:放行 6443、10250、2379/2380、10251/10252 等端口,或临时关闭 ufw 以便部署。
- 交换分区:临时与永久关闭 swap,避免 kubelet 异常。
- 内核与 sysctl:加载 overlay、br_netfilter 模块,开启桥接流量转发。
- 容器运行时:推荐 containerd(CRI 兼容),也可使用 Docker(需 cri-dockerd 适配)。
二 安装容器运行时 containerd
- 安装与启动:
- sudo apt-get update && sudo apt-get install -y containerd
- sudo systemctl enable --now containerd
- 生成默认配置并启用 systemd cgroup:
- containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1
- sudo sed -i ‘s/SystemdCgroup = false/SystemdCgroup = true/g’ /etc/containerd/config.toml
- sudo systemctl restart containerd
- 验证:
- sudo crictl version
- sudo systemctl status containerd
- 说明:如使用 Docker,需额外安装 cri-dockerd 并配置 kubelet 使用其 CRI 端点。
三 安装 kubeadm kubelet kubectl
- 添加 Kubernetes APT 源(新版签名方式):
- sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
- 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
- 安装组件并锁定版本:
- sudo apt-get update
- sudo apt-get install -y kubelet kubeadm kubectl
- sudo apt-mark hold kubelet kubeadm kubectl
- 版本建议:保持 kubelet/kubeadm/kubectl 版本一致;控制面与 kubelet 允许 相差一个次要版本,但 kubelet 版本不可高于 API Server。
四 初始化控制平面与加入工作节点
- 控制平面初始化(在 master 节点执行,按需替换参数):
- 建议先拉取镜像以加速初始化:sudo kubeadm config images pull
- 初始化命令示例:
- sudo kubeadm init
–apiserver-advertise-address=<MASTER_IP>
–pod-network-cidr=10.244.0.0/16
–service-cidr=10.96.0.0/12
–image-repository=registry.aliyuncs.com/google_containers
- 配置 kubectl(在 master 节点执行):
- mkdir -p $HOME/.kube
- sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件(以 Flannel 为例,在 master 节点执行):
- kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 加入工作节点(在 worker 节点执行,使用 kubeadm init 成功输出的 join 命令):
- sudo kubeadm join <MASTER_IP>:6443 --token --discovery-token-ca-cert-hash
- 验证:
- kubectl get nodes
- kubectl get pods -A
五 常见问题与排错要点
- 初始化失败或异常中断:先执行 kubeadm reset 清理后再初始化。
- cgroup 驱动不一致:确保 containerd 使用 systemd cgroup,否则 kubeadm init 可能失败。
- 镜像拉取慢或失败:使用 –image-repository=registry.aliyuncs.com/google_containers 或提前执行 kubeadm config images pull。
- 节点 NotReady:检查 CNI 网络插件是否安装成功、Pod 网段是否与控制面配置一致(如 10.244.0.0/16)。
- 端口被占用:核对 6443/10250/2379-2380/10251-10252 等端口占用情况并释放。
- 防火墙/安全模块:部署阶段可临时 disable ufw,或按需放行端口;如使用 AppArmor,必要时调整策略。
- 节点唯一性:再次确认 MAC 地址 与 product_uuid 唯一,避免节点识别冲突。