K8s(2)安装,集群

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-node2
复制代码

bash

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_conntrack

2️⃣ 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
EOF
复制代码

bash

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
   │
   ▼
Container

2️⃣ 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
EOF
复制代码

bash

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 做了什么?

  1. 生成 CA

  2. 启动 etcd

  3. 启动 apiserver

  4. 生成 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
相关推荐
刘马想放假5 小时前
Docker 容器导出与镜像导出深度技术解析:docker export vs docker save
docker·容器
JP-Destiny6 小时前
docker-安装nacos
运维·docker·容器
你是个什么橙6 小时前
Docker下载安装及服务
运维·docker·容器
IT策士7 小时前
第 39 篇 k8s之Helm 入门:包管理工具与 Chart
云原生·容器·kubernetes
做个文艺程序员8 小时前
第07篇:K8s 安全加固指南:RBAC、NetworkPolicy、OPA——Java SaaS 多租户安全隔离深度实践
java·安全·kubernetes
衫水11 小时前
项目后端服务 Docker 部署SOP (2026-06-04)
运维·docker·容器
H_老邪11 小时前
Docker 学习之路-Linux安装指定版本docker
学习·docker·容器
IT策士11 小时前
第 40 篇 k8s之Helm:编写自定义 Helm Chart
云原生·容器·kubernetes
江华森11 小时前
Nacos 微服务注册与配置中心深度学习指南
微服务·云原生·架构