一、核心说明

1.1 集群架构选择

表格

架构类型特点适用场景
一主多从1 个 Master + 多个 Node,搭建简单测试 / 学习环境
多主多从多个 Master + 多个 Node,高可用生产环境

1.2 节点规划

表格

IP 地址节点类型操作系统硬件配置
192.168.200.129MasterCentOS 7.62 核 CPU、2G 内存、20G 硬盘
192.168.200.130Node1CentOS 7.62 核 CPU、2G 内存、20G 硬盘
192.168.200.131Node2CentOS 7.62 核 CPU、2G 内存、20G 硬盘

二、全节点初始化配置(Master+Node 都要执行)

2.1 检查操作系统版本

cat /etc/redhat-release  # 要求CentOS ≥7.5

2.2 主机名解析

# 切换至root权限
su root
# 编辑hosts文件
vi /etc/hosts
# 添加以下内容
192.168.200.129  master
192.168.200.130  node1
192.168.200.131  node2

# 验证连通性
ping master -c 3
ping node1 -c 3
ping node2 -c 3

2.3 时间同步

yum install -y chrony
systemctl start chronyd
systemctl enable chronyd

2.4 关闭防火墙与 SELinux

# 关闭firewalld
systemctl stop firewalld
systemctl disable firewalld

# 关闭SELinux(修改后需重启生效)
vi /etc/selinux/config
# 修改为:SELINUX=disabled

2.5 禁用 Swap 分区

# 临时禁用
swapoff -a
# 永久禁用(注释/etc/fstab中的Swap分区)
vi /etc/fstab

2.6 修改 Linux 内核参数

# 创建内核配置文件
vi /etc/sysctl.d/kubernetes.conf
# 添加以下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

# 加载配置
sysctl -p
# 加载网桥模块
modprobe br_netfilter
# 验证模块加载
lsmod | grep br_netfilter

2.7 配置 IPVS 功能

# 安装ipset和ipvsadm
yum install ipset ipvsadm -y

# 编写模块加载脚本
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

# 执行脚本并验证
chmod +x /etc/sysconfig/modules/ipvs.modules
sh +x /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

2.8 重启系统

reboot  # 使所有配置生效

三、安装核心组件

3.1 安装 Docker(容器运行时)

# 配置Docker镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

# 安装指定版本Docker
yum install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7 -y

# 配置Docker加速与Cgroup驱动
mkdir /etc/docker
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": [ "https://66mzqrih.mirror.aliyuncs.com"]
}
EOF

# 启动Docker并设置开机自启
systemctl start docker
systemctl enable docker

# 验证安装
docker --version

3.2 安装 K8s 组件(kubeadm/kubelet/kubectl)

# 配置K8s阿里云镜像源
vi /etc/yum.repos.d/kubernetes.repo
# 添加以下内容
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
      http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

# 安装指定版本K8s组件
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 配置kubelet的Cgroup驱动
vi /etc/sysconfig/kubelet
# 添加以下内容
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

# 设置kubelet开机自启
systemctl enable kubelet

3.3 准备 K8s 集群镜像(解决海外镜像拉取问题)

# 定义需要的镜像列表
images=(
kube-apiserver:v1.17.4
kube-controller-manager:v1.17.4
kube-scheduler:v1.17.4
kube-proxy:v1.17.4
pause:3.1
etcd:3.4.3-0 
coredns:1.6.5
)

# 从阿里云拉取并重命名镜像
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
done

# 验证镜像
docker images

四、集群初始化与节点加入

4.1 Master 节点初始化(仅 Master 执行)

kubeadm init \
--kubernetes-version=v1.17.4 \
--pod-network-cidr=10.244.0.0/16 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.200.129

# 配置kubectl访问集群
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

4.2 Node 节点加入集群(Node1/Node2 执行)

# 替换为Master初始化后输出的实际token和hash值
kubeadm join 192.168.200.129:6443 --token xxxxx.xxxxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

4.3 验证节点状态(Master 执行)

kubectl get nodes  # 此时节点状态为NotReady,需安装网络插件后变为Ready

五、安装网络插件(Flannel)

5.1 配置并部署 Flannel

# 注意:先修改kube-flannel.yml中的镜像仓库为国内源(quay-mirror.qiniu.com)
# 应用Flannel配置
kubectl apply -f kube-flannel.yml

# 修正kubelet配置(删除--network-plugin=cni)
vi /var/lib/kubelet/kubeadm-flags.env
# 重启kubelet
systemctl daemon-reload
systemctl restart kubelet

5.2 验证网络插件

# 查看Pod状态
kubectl get pods -n kube-system
# 再次查看节点状态(应为Ready)
kubectl get nodes

六、部署 Nginx 应用验证集群

6.1 创建 Nginx Deployment

kubectl create deployment nginx --image=nginx:1.14-alpine

6.2 暴露 Nginx Service(NodePort 类型)

kubectl expose deployment nginx --port=80 --type=NodePort

6.3 验证访问

# 查看Service信息,获取NodePort端口
kubectl get svc nginx
# 访问任意Node节点IP:NodePort,验证Nginx是否正常运行
curl http://192.168.200.130:31347  # 替换为实际的NodePort端口

总结

  1. 集群搭建核心步骤:环境初始化(关闭防火墙 / SELinux、禁用 Swap、时间同步等)→ 安装 Docker 和 K8s 组件 → 初始化 Master → 加入 Node 节点 → 部署网络插件 → 验证应用。
  2. 关键注意点:K8s 集群要求节点时间一致、禁用 Swap、Docker 与 kubelet 的 Cgroup 驱动需统一为 systemd、需使用国内镜像源解决拉取问题。
  3. 验证集群可用性:通过部署 Nginx 应用并暴露 NodePort 服务,访问成功即代表集群搭建完成。

更多推荐