适合人群: ✔ 运维工程师 ✔ 正在学习 Kubernetes 的同学 ✔ 想自己动手搭一套 K8s 测试环境的人
很多人在学 Kubernetes 时,都会卡在第一步:环境怎么规划?版本怎么选?到底先干什么?
这篇文章不讲概念,只讲实操,手把手带你用 kubeadm + Docker,搭建一套 一主多从 Kubernetes 集群(v1.21)。
一、环境规划
1️⃣ 集群架构选择
Kubernetes 集群常见有两种:
① 一主多从(单 Master)
一个 Master + 多个 Node
部署简单
有单点故障
👉 适合学习 / 测试环境

② 多主多从(高可用)
多个 Master + 多个 Node
架构复杂
可用性高
👉 适合生产环境

📌 本文以测试为目的,选择一主多从架构。
2️⃣ Kubernetes 安装方式
常见部署方式对比:
Minikube: 单节点,适合体验,不适合深入学习
kubeadm(推荐): 官方工具,流程规范,接近生产
二进制安装: 最灵活,但维护成本高
👉 本文选择 kubeadm 部署方式。
3️⃣ 主机规划
建议三台机器 网络互通,云服务器建议使用私网。
4️⃣ 整体搭建流程
整个安装流程可以概括为 6 步:
基础环境准备(主机名 / 时间 / swap 等)
安装 Docker(所有节点)
安装 kubeadm / kubelet / kubectl
Master 初始化集群
Node 节点加入集群
安装 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 打基础

参与讨论
(Participate in the discussion)
参与讨论