Kubernetes v1.32 集群部署详解(含命令 + 原理 + 图表)
一、部署架构总览
本次部署为1 Master + 2 Worker 的标准测试集群,适用于生产环境前的验证。
1️⃣ 节点规划表
角色 | 主机名 | IP | 核心组件 |
|---|---|---|---|
Control Plane | k8s-master01 | 192.168.222.141 | apiserver / etcd / scheduler / controller-manager |
Worker | k8s-node1 | 192.168.222.142 | kubelet / kube-proxy / Pod |
Worker | k8s-node2 | 192.168.222.143 | kubelet / kube-proxy / Pod |
2️⃣ 集群逻辑架构图
纯文本
纯文本
┌──────────────────────────────────┐ │ k8s-master01 │ │ ┌────────────┐ ┌────────────┐ │ │ │ apiserver │◄─┤ controller │ │ │ └─────▲──────┘ └─────┬──────┘ │ │ │ │ │ │ ┌─────┴──────┐ ┌─────▼──────┐ │ │ │ etcd │ │ scheduler │ │ │ └────────────┘ └────────────┘ │ └───────────────┬─────────────────┘ │ 6443 ┌──────────┴──────────┐ │ │ ┌────▼─────┐ ┌──────▼─────┐ │ k8s-node1│ │ k8s-node2 │ │ kubelet │ │ kubelet │ │ kube-proxy│ │ kube-proxy │ │ Calico │ │ Calico │ └──────────┘ └────────────┘📌知识点
apiserver 是唯一入口
etcd 存储所有集群状态
kubelet 是“节点管家”
CNI 解决 Pod 网络
二、系统层准备(所有节点)
1️⃣ 主机名与静态解析
bash
bash
hostnamectl set-hostname k8s-master01 hostnamectl set-hostname k8s-node1 hostnamectl set-hostname k8s-node2bash
bash
cat >> /etc/hosts << EOF 192.168.222.141 k8s-master01 192.168.222.142 k8s-node1 192.168.222.143 k8s-node2 EOF📌原理
K8s不使用 IP 识别节点,而是使用 hostname。
2️⃣ 关闭 Swap(强约束)
bash
bash
swapoff -a sed -i '/swap/s/^/#/' /etc/fstab项 | 原因 |
|---|---|
K8s 设计 | 假设内存可预测 |
Swap | 会导致 OOM 行为异常 |
后果 | kubelet 拒绝启动 |
3️⃣ 时间同步(分布式系统基础)
bash
bash
yum install -y chrony systemctl enable --now chronyd chronyc sources -v📌时间不一致的后果
etcd 选主失败
TLS 证书校验失败
调度时间漂移
三、内核参数与模块(网络核心)
1️⃣ 内核模块对照表
模块 | 作用 |
|---|---|
br_netfilter | 桥接流量进入 iptables |
ip_vs | IPVS 负载均衡 |
ip_vs_rr / wrr / sh | 调度算法 |
nf_conntrack | 连接跟踪 |
bash
bash
modprobe br_netfilter modprobe ip_vs modprobe ip_vs_rr modprobe ip_vs_wrr modprobe ip_vs_sh modprobe nf_conntrack2️⃣ sysctl 参数(K8s 网络必需)
bash
bash
cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 vm.swappiness = 0 fs.file-max = 52706963 net.netfilter.nf_conntrack_max = 2310720 EOF sysctl --system📌作用
Service NAT
Pod 跨节点通信
CNI 插件依赖
四、资源限制(防雪崩)
bash
bash
cat >> /etc/security/limits.conf << EOF * soft nofile 655360 * hard nofile 655360 * soft nproc 655360 * hard nproc 655360 EOFbash
bash
sed -i 's/^#DefaultLimitNOFILE=.*/DefaultLimitNOFILE=655360/' /etc/systemd/system.conf systemctl daemon-reload📌原因
单节点可运行数百 Pod
文件句柄不足 → kubelet 崩溃
五、容器运行时(Docker + cri-dockerd)
1️⃣ 架构关系图
纯文本
纯文本
kubelet │ ▼ CRI (cri-dockerd) │ ▼ Docker │ ▼ Container2️⃣ Docker 配置
bash
bash
cat > /etc/docker/daemon.json << EOF { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": [ "https://p3kgr6db.mirror.aliyuncs.com" ] } EOF systemctl enable --now docker📌关键点
cgroup driver 必须与 kubelet 一致
3️⃣ 安装 cri-dockerd
bash
bash
yum install -y libcgroup rpm -ivh cri-dockerd-0.3.16-3.fc35.x86_64.rpm systemctl enable --now cri-docker.socket cri-docker六、K8s 组件安装
bash
bash
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/rpm/repodata/repomd.xml.key EOFbash
bash
yum install -y kubelet kubeadm kubectl kubernetes-cni systemctl enable kubelet七、Master 初始化(核心)
bash
bash
kubeadm init \ --apiserver-advertise-address=192.168.222.141 \ --image-repository=registry.aliyuncs.com/google_containers \ --kubernetes-version=v1.32.13 \ --pod-network-cidr=10.244.0.0/16 \ --cri-socket=unix:///var/run/cri-dockerd.sock初始化后配置
bash
bash
mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config📌kubeadm 做了什么?
生成 CA
启动 etcd
启动 apiserver
生成 kubeconfig
八、Worker 加入集群
bash
bash
kubeadm join 192.168.222.141:6443 \ --token xxxxxx \ --discovery-token-ca-cert-hash sha256:xxxxxx \ --cri-socket unix:///var/run/cri-dockerd.sock九、Calico 网络插件
bash
bash
docker load -i /opt/calico_3.28.1_image.tar kubectl apply -f calico.yaml最终状态表
组件 | 状态 |
|---|---|
Node | Ready |
CoreDNS | Running |
Calico | Running |
kube-proxy | Running |