Kubernetes 一主两从集群搭建
·
一、核心说明
1.1 集群架构选择
表格
| 架构类型 | 特点 | 适用场景 |
|---|---|---|
| 一主多从 | 1 个 Master + 多个 Node,搭建简单 | 测试 / 学习环境 |
| 多主多从 | 多个 Master + 多个 Node,高可用 | 生产环境 |
1.2 节点规划
表格
| IP 地址 | 节点类型 | 操作系统 | 硬件配置 |
|---|---|---|---|
| 192.168.200.129 | Master | CentOS 7.6 | 2 核 CPU、2G 内存、20G 硬盘 |
| 192.168.200.130 | Node1 | CentOS 7.6 | 2 核 CPU、2G 内存、20G 硬盘 |
| 192.168.200.131 | Node2 | CentOS 7.6 | 2 核 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端口
总结
- 集群搭建核心步骤:环境初始化(关闭防火墙 / SELinux、禁用 Swap、时间同步等)→ 安装 Docker 和 K8s 组件 → 初始化 Master → 加入 Node 节点 → 部署网络插件 → 验证应用。
- 关键注意点:K8s 集群要求节点时间一致、禁用 Swap、Docker 与 kubelet 的 Cgroup 驱动需统一为 systemd、需使用国内镜像源解决拉取问题。
- 验证集群可用性:通过部署 Nginx 应用并暴露 NodePort 服务,访问成功即代表集群搭建完成。
更多推荐

所有评论(0)