☰
K8s(2)安装,集群
2026/10/19 23:07:51 网站建设 项目流程

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询