)
前言Kubernetes简称 K8s是当下主流容器编排开源平台自动完成容器应用部署、扩缩容、运维管理。对于初学者、CKA 备考人员使用kubeadm手动搭建集群是吃透 K8s 底层组件、网络前置条件、集群初始化流程的最佳方式。本文基于 Ubuntu 系统完整覆盖主机环境初始化、容器运行时 cri-docker 部署、kubeadm 工具安装、Master 控制平面初始化、Worker 节点加入、Calico 网络插件部署、集群状态校验全流程所有命令均可直接复制执行采用阿里云镜像加速解决国内拉取镜像慢问题。环境说明 系统Ubuntu 22.04 K8s 版本v1.33.0 容器运行时cri-docker 网络插件Calico 集群规划1 台 Master 节点 cka-master (192.168.30.130)2 台 Worker 节点 cka-worker1、cka-worker2一、所有节点统一前置环境配置Master、Worker 全部执行1.1 永久关闭 swap 交换分区K8s 强制要求关闭 swapswap 会影响调度与内存管控性能两条命令分别实现临时关闭、永久注释配置# 临时关闭swap swapoff -a # 永久注释fstab内swap配置重启不失效 sed -i s/.*swap.*/#/ /etc/fstab1.2 开启网桥 iptables 转发K8s 网络必备开启br_netfilter内核模块开启 ip 转发、网桥流量 iptables/ip6tables 转发否则 Pod 跨节点通信异常# 加载网桥过滤模块并写入开机自启 # 写入/etc/modules-load.d/实现永久开机自启 cat EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF # 临时加载重启失效 modprobe br_netfilter # 写入sysctl网络参数 cat EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF # 生效配置 sudo sysctl --system1.3 安装 kubeadm、kubelet、kubectl 工具集采用阿里云 K8s 国内镜像源锁定 v1.33.0 版本避免自动更新导致集群版本错乱# 安装依赖 apt-get update apt-get install -y apt-transport-https curl # 写入阿里云k8s源 cat /etc/apt/sources.list.d/k8s.list EOF deb https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb / EOF # 导入阿里云密钥 curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.key | apt-key add - # 更新源并指定版本安装工具 apt-get update apt-get install -y kubelet1.33.0-1.1 kubeadm1.33.0-1.1 kubectl1.33.0-1.1 # 锁定版本防止apt自动升级 apt-mark hold kubelet kubeadm kubectl1.4 配置 kubectl、kubeadm 命令自动补全日常操作 kubectl 频繁开启 bash 自动补全大幅提升效率# 生成补全文件 kubectl completion bash /etc/bash_completion.d/kubectl kubeadm completion bash /etc/bash_completion.d/kubeadm # 生效补全 source /etc/bash_completion.d/kubectl source /etc/bash_completion.d/kubeadm1.5 部署 cri-docker 容器运行时新版 K8s 弃用 dockershim必须使用 cri-docker 适配 Docker 作为 CRI 运行时# 指定cri端点为docker sock crictl config runtime-endpoint unix:///run/cri-dockerd.sock # 验证镜像拉取功能 crictl images二、仅 Master 节点执行初始化控制平面2.1 生成并修改 kubeadm 初始化配置模板通过 yaml 自定义集群广告地址、主机名、阿里云镜像仓库、CRI 套接字规避国外镜像拉取失败问题# 导出默认初始化配置 kubeadm config print init-defaults kubeadm.yaml # 修改广告地址为本机MasterIP sed -i s/.*advert.*/ advertiseAddress: 192.168.30.130/g kubeadm.yaml # 修改集群名称 sed -i s/.*name.*/ name: cka-master/g kubeadm.yaml # 替换镜像仓库为阿里云容器镜像 sed -i s/imageRepo.*/imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers/g kubeadm.yaml # 指定cri-docker套接字路径 sed -i s/criSocket.*/criSocket: unix:\/\/\/run\/cri-dockerd.sock/ kubeadm.yaml # 加载网桥模块执行集群初始化 modprobe br_netfilter kubeadm init --config kubeadm.yaml2.2 保存 Worker 节点加入命令初始化完成后控制台会输出 join 命令示例如下务必保存Worker 节点加入集群使用kubeadm join 192.168.30.130:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:01f63cdf01927c5aee9c7488f62b9778f1758032dc12d48b72aa2a9a950f2aaa若 token 过期Master 节点执行kubeadm token create --print-join-command重新生成2.3 普通用户 kubectl 权限授权默认仅 root 能操作集群复制管理员证书至普通用户家目录免 sudo 执行 kubectlmkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config2.4 部署 Calico 网络插件K8s 集群初始化完成后节点状态为 NotReady必须部署网络插件实现 Pod 互通kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml三、Worker 节点操作加入集群3.1 Worker 前置操作所有 Worker 节点先完整执行第一章节全部环境初始化命令关闭 swap、网桥转发、安装 kube 工具、部署 cri-docker。3.2 执行 join 命令接入集群复制 Master 初始化输出的 join 指令追加 cri 套接字参数kubeadm join 192.168.30.130:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:01f63cdf01927c5aee9c7488f62b9778f1758032dc12d48b72aa2a9a950f2aaa \ --cri-socketunix:///var/run/cri-dockerd.sock四、Master 节点校验集群、标记 Worker 角色4.1 给 Worker 节点打角色标签区分节点角色便于运维识别kubectl label nodes cka-worker1 cka-worker2 node-role.kubernetes.io/worker4.2 完整集群状态检查1. 查看集群全部系统 Pod全部 Running 代表组件正常kubectl pod -A2. 查看集群节点状态STATUS 为 Ready 即部署完成kubectl get nodes正常输出示例NAME STATUS ROLES AGE VERSION cka-master Ready control-plane 7m47s v1.33.0 cka-worker1 Ready worker 3m27s v1.33.0 cka-worker2 Ready worker 3m5s v1.33.0五、手动 kubeadm 搭建总结与企业落地方案说明手动搭建优缺点优点完整熟悉集群初始化、前置依赖、CRI、网络插件底层逻辑适合学习、CKA 考证、测试环境。 缺点多节点重复执行大量命令手动操作易出错节点扩容、环境标准化效率极低完全不适合生产批量部署。企业真实落地标准方案在生产环境、大规模 K8s 集群建设中几乎没有运维人员手动逐台执行 kubeadm 命令搭建集群。企业统一使用Ansible 自动化批量部署 K8s 集群Ansible 通过 playbook 脚本统一推送所有节点环境配置关闭 swap、sysctl 网桥参数、安装 kube 工具、cri-docker自动分发 kubeadm 初始化模板一键执行 Master 初始化自动生成 join 命令批量让所有 Worker 节点接入集群自动部署 Calico、监控、存储类插件统一标准化集群环境支持集群扩容、版本升级、清理环境等一键操作。本文仅讲解手动 kubeadm 部署流程下一篇 CSDN 博客将完整分享 Ansible 自动化一键搭建 K8s 集群完整 Playbook 脚本实现三行命令完成整套集群部署敬请关注。结尾本篇覆盖 kubeadm 搭建集群全流程踩坑点国内阿里云镜像完美解决谷歌镜像无法访问问题cri-docker 适配新版 K8s 兼容 DockerCalico 网络插件保证 Pod 跨节点通信。动手操作一遍可以彻底吃透 K8s 集群启动前置条件与核心组件运行逻辑。