news 2026/6/20 22:10:58

手把手教程:Ubuntu 使用 kubeadm 从零搭建 Kubernetes v1.33 集群(含 Calico 网络、cri-docker)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教程:Ubuntu 使用 kubeadm 从零搭建 Kubernetes v1.33 集群(含 Calico 网络、cri-docker)

前言

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 强制要求关闭 swap,swap 会影响调度与内存管控性能,两条命令分别实现临时关闭、永久注释配置:

# 临时关闭swap swapoff -a # 永久注释fstab内swap配置,重启不失效 sed -i 's/.*swap.*/#&/' /etc/fstab

1.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 --system

1.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 kubelet=1.33.0-1.1 kubeadm=1.33.0-1.1 kubectl=1.33.0-1.1 # 锁定版本,防止apt自动升级 apt-mark hold kubelet kubeadm kubectl

1.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/kubeadm

1.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.yaml

2.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 执行 kubectl:

mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.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-socket=unix:///var/run/cri-dockerd.sock

四、Master 节点校验集群、标记 Worker 角色

4.1 给 Worker 节点打角色标签

区分节点角色,便于运维识别:

kubectl label nodes cka-worker1 cka-worker2 node-role.kubernetes.io/worker=

4.2 完整集群状态检查

1. 查看集群全部系统 Pod,全部 Running 代表组件正常

kubectl pod -A

2. 查看集群节点状态,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 集群

  1. Ansible 通过 playbook 脚本统一推送所有节点环境配置(关闭 swap、sysctl 网桥参数、安装 kube 工具、cri-docker);
  2. 自动分发 kubeadm 初始化模板,一键执行 Master 初始化;
  3. 自动生成 join 命令,批量让所有 Worker 节点接入集群;
  4. 自动部署 Calico、监控、存储类插件,统一标准化集群环境;
  5. 支持集群扩容、版本升级、清理环境等一键操作。

本文仅讲解手动 kubeadm 部署流程,下一篇 CSDN 博客将完整分享 Ansible 自动化一键搭建 K8s 集群完整 Playbook 脚本,实现三行命令完成整套集群部署,敬请关注。

结尾

本篇覆盖 kubeadm 搭建集群全流程踩坑点,国内阿里云镜像完美解决谷歌镜像无法访问问题,cri-docker 适配新版 K8s 兼容 Docker,Calico 网络插件保证 Pod 跨节点通信。动手操作一遍可以彻底吃透 K8s 集群启动前置条件与核心组件运行逻辑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 22:09:58

终极指南:5步免费绕过iOS 15-16激活锁,解锁你的iPhone/iPad设备

终极指南&#xff1a;5步免费绕过iOS 15-16激活锁&#xff0c;解锁你的iPhone/iPad设备 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否曾经遇到过这样的困境&#xff1a;购买二手iPhone后发现设…

作者头像 李华
网站建设 2026/6/20 22:01:10

GPT Pro + Codex:开发者到底能提升多少效率?

最近&#xff0c;不少开发者开始用 Codex 辅助写代码&#xff0c;也有人因为使用频率越来越高&#xff0c;开始考虑是否升级 ChatGPT Pro。但真正值得关注的问题不是“Pro 强不强”&#xff0c;而是&#xff1a;GPT Pro 配合 Codex&#xff0c;究竟能给开发工作带来多少实际提升…

作者头像 李华
网站建设 2026/6/20 21:53:30

2026多模态Agent开发实战:从微信小程序到STM32的工程落地

1. 项目概述&#xff1a;这不是一次技术预测&#xff0c;而是一份开发者实操路线图“从ChatGPT到多模态Agent&#xff1a;2026年AI技术演进与开发者新机遇”——这个标题里藏着三个被严重低估的关键词&#xff1a;ChatGPT、多模态Agent、2026。很多人一看到“2026”&#xff0c…

作者头像 李华
网站建设 2026/6/20 21:50:57

基于双流网络的时序动作识别:从原理到击掌计数实战

1. 项目概述&#xff1a;从“击掌”到“计数”的智能跨越 “High Five Counter”&#xff0c;一个听起来有点酷又有点生活化的项目。本质上&#xff0c;它是一个利用深度学习技术&#xff0c;自动识别并统计视频或实时摄像头画面中“击掌”动作次数的系统。你可能在体育比赛庆祝…

作者头像 李华
网站建设 2026/6/20 21:32:35

Taurus性能测试框架:声明式配置与多引擎集成实战指南

1. 项目概述&#xff1a;为什么我们需要超越传统性能测试工具&#xff1f; 如果你和我一样&#xff0c;在软件开发和运维领域摸爬滚打了十几年&#xff0c;肯定经历过无数次性能测试的“折磨”。从早期用LoadRunner写脚本写到手抽筋&#xff0c;到后来拥抱开源的JMeter&#xf…

作者头像 李华