目录
[1. 永久关闭 Swap 分区](#1. 永久关闭 Swap 分区)
[2. 配置桥接流量转发与 iptables 规则](#2. 配置桥接流量转发与 iptables 规则)
[3. 安装容器运行时(cri-dockerd)](#3. 安装容器运行时(cri-dockerd))
[4. 安装 K8s 核心组件(kubeadm/kubelet/kubectl)](#4. 安装 K8s 核心组件(kubeadm/kubelet/kubectl))
[三、Master 节点专属操作](#三、Master 节点专属操作)
[1. 自定义配置并初始化集群](#1. 自定义配置并初始化集群)
[2. 配置 kubectl 管理员权限](#2. 配置 kubectl 管理员权限)
[3. 部署 Calico 网络插件](#3. 部署 Calico 网络插件)
[四、Worker 节点入群操作](#四、Worker 节点入群操作)
[1. 节点前置准备](#1. 节点前置准备)
[2. 执行入群命令](#2. 执行入群命令)
[3. 节点打标签(区分角色)](#3. 节点打标签(区分角色))
[1. 桥接流量转发&iptables规则作用](#1. 桥接流量转发&iptables规则作用)
[2. kubeadm / kubelet / kubectl 三者作用](#2. kubeadm / kubelet / kubectl 三者作用)
[3. Calico 网络插件作用](#3. Calico 网络插件作用)
[4. 底层网络配置 和 Calico 的核心区别](#4. 底层网络配置 和 Calico 的核心区别)
[5. 安装顺序是否必须固定?](#5. 安装顺序是否必须固定?)
一、环境说明
-
系统:Ubuntu 20.04/22.04
-
K8s版本:v1.33.0
-
容器运行时:cri-dockerd(适配Docker)
-
集群架构:1 Master + N Worker
-
网络插件:Calico
前置规则 :所有安装步骤顺序固定、不可颠倒、不可跳过,乱序直接报错、集群异常。
二、所有节点统一前置操作(必做)
1. 永久关闭 Swap 分区
K8s 强制要求关闭 Swap,否则 kubelet 无法启动
bash
swapoff -a sed -i 's/.*swap.*/#&/' /etc/fstab
验证:free -h,Swap total 为 0 即为成功
2. 配置桥接流量转发与 iptables 规则
加载内核模块、开启IP转发,为容器网络提供底层系统支撑
bash
# 加载桥接内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF modprobe br_netfilter
# 配置网络转发参数
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
3. 安装容器运行时(cri-dockerd)
K8s 1.24+ 不再默认支持Docker,必须手动安装 cri-dockerd 适配Docker作为容器运行时,此步骤为强制必做,缺失会导致集群初始化失败
bash
# 安装依赖
apt install git wget curl build-essential -y
# 下载cri-dockerd源码
git clone https://github.com/Mirantis/cri-dockerd.git cd cri-dockerd # 编译安装 make install
# 配置系统服务
cat > /etc/systemd/system/cri-docker.service <<EOF [Unit] Description=CRI Interface for Docker Application Container Engine Documentation=https://docs.mirantis.com After=network-online.target docker.service Wants=network-online.target docker.service [Service] Type=notify ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target EOF
# 启动并开机自启
systemctl daemon-reload systemctl start cri-docker systemctl enable cri-docker
# 验证运行状态
systemctl status cri-docker
4. 安装 K8s 核心组件(kubeadm/kubelet/kubectl)
配置阿里云镜像源,统一安装 v1.33.0 版本(必须在容器运行时安装完成后执行)
bash
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 # 设置kubelet开机自启
systemctl enable kubelet
配置阿里云镜像源,统一安装 v1.33.0 版本
bash
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
三、Master 节点专属操作
1. 自定义配置并初始化集群
导出默认配置,修改镜像源、节点IP、CRI套接字,适配国内环境和Docker运行时
bash
# 导出默认配置
kubeadm config print init-defaults > kubeadm.yaml
# 自定义配置(根据自己机器IP修改)
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 sed -i 's/ criSocket.*/ criSocket: unix:\/\/\/run\/cri-dockerd.sock/' kubeadm.yaml
# 初始化集群
kubeadm init --config kubeadm.yaml
重要 :保存终端输出的 kubeadm join 命令,Worker节点入群必备
2. 配置 kubectl 管理员权限
让普通用户可通过kubectl管理集群
bash
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 部署 Calico 网络插件
K8s 无自带网络,必须部署CNI插件实现Pod通信
bash
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
等待1-2分钟,Calico Pod全部Running,Master节点状态变为Ready
四、Worker 节点入群操作
1. 节点前置准备
所有Worker节点完整执行前文所有节点前置操作(关Swap、网络配置、安装K8s组件)
2. 执行入群命令
bash
kubeadm join 192.168.30.130:6443 --token abcdef.0123456789abcdef \ --discovery-token-ca-cert-hash sha256:xxxx \ --cri-socket=unix:///var/run/cri-dockerd.sock
3. 节点打标签(区分角色)
bash
kubectl label nodes cka-worker1 cka-worker2 node-role.kubernetes.io/worker=
五、集群状态验证
bash
# 查看所有节点状态(全部Ready为正常)
kubectl get nodes
# 查看所有核心Pod(全部Running为正常)
kubectl get pod -A
六、核心概念答疑(高频必懂)
1. 桥接流量转发&iptables规则作用
属于Linux系统底层基建,所有容器环境通用:
-
开启IP转发:将服务器变为小型路由器,允许容器、跨节点数据包转发
-
加载br_netfilter:让iptables防火墙可以管控网桥模式的容器流量
-
桥接调用iptables:支撑K8s Service负载均衡、端口映射、网络策略等核心功能
无此配置:容器跨节点不通、Service失效、集群网络彻底瘫痪
2. kubeadm / kubelet / kubectl 三者作用
-
kubelet:节点核心进程(所有节点必装),接收Master指令,负责创建、启停、监控节点上的Pod,是节点的核心管家
-
kubeadm:集群搭建工具,专门用于初始化Master节点、部署集群核心组件、生成节点入群命令,简化集群搭建
-
kubectl:集群命令行遥控器,用于查询、创建、删除集群所有资源,管理整个K8s集群
3. Calico 网络插件作用
属于K8s上层网络应用,依赖底层网络配置运行:
-
为每个Pod自动分配独立IP
-
实现跨节点Pod互通,规划集群路由
-
提供网络隔离策略,限制Pod访问权限
-
支撑K8s Service、负载均衡等网络功能
无Calico:仅单机容器互通,跨节点Pod无法通信,集群无法运行业务
4. 底层网络配置 和 Calico 的核心区别
-
底层桥接/iptables配置:系统级地基,负责打通服务器网络通路,无任何IP管理、路由规划功能,所有容器环境都需要
-
Calico插件:K8s专属上层应用,在底层通路通畅的基础上,做精细化的Pod组网、IP分配、网络管控
通俗比喻:底层配置是修路铺路 ,Calico是分配门牌号、规划通行规则
5. 安装顺序是否必须固定?
核心结论:核心顺序绝对不能颠倒、不能跳过,仅节点并行操作可灵活
固定强制顺序:关闭Swap → 底层网络配置 → 安装容器运行时 → 安装K8s三件套 → 初始化Master → 配置kubectl权限 → 部署Calico → Worker入群
可灵活操作:所有节点的前置准备工作可并行执行,无需逐个节点串行
乱序后果:kubelet启动失败、Calico部署异常、节点NotReady、集群网络瘫痪
七、总结
-
底层网络配置是系统基础,Calico是K8s专属组网工具,二者层级不同、缺一不可;
-
K8s三大核心组件分工明确,kubelet驻留节点、kubeadm搭建集群、kubectl管理集群;
-
严格遵循固定安装顺序,是集群安装成功的核心前提。