适合人群: ✔ 运维工程师 ✔ 正在学习 Kubernetes 的同学 ✔ 想自己动手搭一套 K8s 测试环境的人

很多人在学 Kubernetes 时,都会卡在第一步:环境怎么规划?版本怎么选?到底先干什么?

这篇文章不讲概念,只讲实操,手把手带你用 kubeadm + Docker,搭建一套 一主多从 Kubernetes 集群(v1.21)

一、环境规划

1️⃣ 集群架构选择

Kubernetes 集群常见有两种:

① 一主多从(单 Master)

  • 一个 Master + 多个 Node

  • 部署简单

  • 有单点故障

  • 👉 适合学习 / 测试环境

微信图片_2026-01-19_160826_080.png

② 多主多从(高可用)

  • 多个 Master + 多个 Node

  • 架构复杂

  • 可用性高

  • 👉 适合生产环境

微信图片_2026-01-19_162349_425.png

📌 本文以测试为目的,选择一主多从架构。

2️⃣ Kubernetes 安装方式

常见部署方式对比:

  • Minikube: 单节点,适合体验,不适合深入学习

  • kubeadm(推荐): 官方工具,流程规范,接近生产

  • 二进制安装: 最灵活,但维护成本高

👉 本文选择 kubeadm 部署方式。


3️⃣ 主机规划

角色

IP 地址

操作系统

硬件配置

主机名

Master

192.168.100.242

CentOS 7.9

2C / 4G / 50G

k8s-master

Node1

192.168.100.243

CentOS 7.9

2C / 4G / 50G

k8s-node1

Node2

192.168.100.244

CentOS 7.9

2C / 4G / 50G

k8s-node2

建议三台机器 网络互通,云服务器建议使用私网。


4️⃣ 整体搭建流程

整个安装流程可以概括为 6 步:

  1. 基础环境准备(主机名 / 时间 / swap 等)

  2. 安装 Docker(所有节点)

  3. 安装 kubeadm / kubelet / kubectl

  4. Master 初始化集群

  5. Node 节点加入集群

  6. 安装 CNI 网络插件


二、Kubernetes 安装准备

1️⃣ 版本说明

本文使用版本组合:

  • Docker:20.10.x

  • Kubernetes:v1.21.10

这是一个 稳定、成熟、踩坑少 的组合。


2️⃣ 关闭防火墙(测试环境)

三台机器执行:

systemctl stop firewalld
systemctl disable firewalld

3️⃣ 设置主机名

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

4️⃣ 配置主机名解析

cat >> /etc/hosts << EOF
127.0.0.1 $(hostname)
192.168.100.242 k8s-master
192.168.100.243 k8s-node1
192.168.100.244 k8s-node2
EOF

5️⃣ 时间同步

yum install -y ntpdate
ntpdate time.windows.com

6️⃣ 关闭 SELinux

setenforce 0
sed -i 's/enforcing/disabled/' /etc/selinux/config

7️⃣ 关闭 swap

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

三、安装 Docker(所有节点)

1️⃣ 卸载旧版本

yum remove -y docker*

2️⃣ 安装 Docker 20.10

yum-config-manager --add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce-20.10.8 docker-ce-cli-20.10.8 containerd.io

3️⃣ 配置镜像加速 & Cgroup

mkdir -p /etc/docker

cat > /etc/docker/daemon.json << EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": [
    "https://du3ia00u.mirror.aliyuncs.com"
  ],
  "storage-driver": "overlay2"
}
EOF

启动 Docker:

systemctl daemon-reload
systemctl start docker
systemctl enable docker

四、安装 Kubernetes 组件

1️⃣ 添加阿里云 YUM 源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF

2️⃣ 安装 kubeadm / kubelet / kubectl

yum install -y kubelet-1.21.10 kubeadm-1.21.10 kubectl-1.21.10

设置开机启动:

systemctl enable kubelet

五、初始化 Master 节点

仅在 Master 节点 执行:

kubeadm init \
--apiserver-advertise-address=192.168.100.242 \
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version=v1.21.10 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

初始化成功后,按提示配置 kubectl:

mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config

六、Node 节点加入集群

在 Node1 / Node2 执行:

kubeadm join 192.168.100.242:6443 \
--token xxxx \
--discovery-token-ca-cert-hash sha256:xxxx

七、安装网络插件(Calico)

在 Master 节点执行:

kubectl apply -f https://projectcalico.docs.tigera.io/v3.19/manifests/calico.yaml

查看状态:

kubectl get pods -n kube-system
kubectl get nodes

八、部署 Nginx 验证集群

kubectl create deployment nginx --image=nginx:1.14-alpine
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pods,svc

看到 Pod Running、Service 正常,即表示集群可用 🎉

这套 Kubernetes v1.21 一主多从集群,适合:

  • 学习 K8s 基础

  • 理解 kubeadm 初始化流程

  • 为后续 Helm / CI-CD / DevOps 打基础