1、环境准备

针对本次K8S集群搭建环境,可以使用虚拟机,不过这里我直接模拟真实生产线上环境,忍痛购买了3台阿里云ECS服务器,服务器信息如下:

  • 主节点 k8s-master:4核8G、40GB硬盘、CentOS7.9(内网IP:172.21.180.114)
  • 从节点 k8s-node1: 4核8G、40GB硬盘、CentOS7.9(内网IP:172.21.180.115)
  • 从节点 k8s-node2: 4核8G、40GB硬盘、CentOS7.9(内网IP:172.21.180.116)

本次搭建只需要这三台服务器即可,个人亲测搭建成功

2、搭建流程

2.1 章节每步操作需要 3 台服务器都执行

2.1、初始化配置

首先,3台服务器都需要关闭Selinux、Swap:

# 关闭 Selinux:防止服务可能无法启动(企业中基本上都会选择关闭)
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

# 关闭 Swap:防止 kubelet 组件无法启动
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab 

3台服务器,分别规划设置主机名:

# 主服务器(bash显示主机名)
hostnamectl set-hostname k8s-master
bash

# 从服务器1(bash显示主机名)
hostnamectl set-hostname k8s-node1
bash

# 从服务器2(bash显示主机名)
hostnamectl set-hostname k8s-node2
bash

3台服务器,确保网络桥接的数据包经过Iptables处理,启用相关的内核参数:

# 访问网络插件丢包
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

# 生效配置
sysctl --system

2.2、安装 Docker

2.2 章节每步操作需要 3 台服务器都执行

首先配置阿里YUM镜像源,否则下载很慢:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

器通过 YUM 安装 Docker 最新版本(大概需要3min,稍安勿躁):

yum -y install docker-ce

启动Docker,并设置为开机启动:

systemctl enable docker && systemctl start docker

配置 Docker 镜像加速器和设置 Cgroup 驱动:

# 配置加速器
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": [
          "https://8er86g8v.mirror.aliyuncs.com",
          "https://docker.1panel.live/"
  ],
  "exec-opts": ["native.cgroupdriver=systemd"]
}
EOF

# 重启 Docker
systemctl restart docker

安装 cri-dockerd(Docker与Kubernetes通信的中间程序):

# 下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm

# 安装
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm

指定 cri-docker 依赖镜像地址为国内镜像地址:

# 修改配置
vim /usr/lib/systemd/system/cri-docker.service

将 ExecStart 配置改成下述这样:

ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

在这里插入图片描述

重新加载 cri-docker 配置:

systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker

2.3、部署 K8S

在3台服务器上,都添加 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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

在3台服务器上,都安装 kubeadm、kubelet、kubectl

# 安装工具
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0

# 设置开机自启
systemctl enable kubelet

在 Master 节点上,进行初始化操作:

# apiserver-advertise-address 设置为主机内网ip地址
kubeadm init \
  --apiserver-advertise-address=172.21.180.114 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock

出现下述输出,说明安装完成:
在这里插入图片描述

按照控制台输出提示,在 Master 节点中执行上述图片中的命令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

接下来,将控制台中第二条命令在其他 Worker 节点中执行(并且指定一下socket):

# 尾部记得指定 socket,不要直接CV控制台!
# 如果不小心把 kubeadm join 命令清屏了,使用:kubeadm token create --print-join-command 重新生成
kubeadm join 172.21.180.114:6443 --token sf6stj.wbahjfh3kt33bgmx --discovery-token-ca-cert-hash sha256:9b10f3f5c6e624072db70985cc53924b122abd090b8a55b2bc7f497aa7477467 --cri-socket=unix:///var/run/cri-dockerd.sock

在 Master 节点上通过kubectl get nodes可以看到状态是不正常的,这是因为没有下载网络插件进行通信:
在这里插入图片描述
此时需要 Master 节点安装 Calico 网络插件,通过下述命令进行下载 calico.yaml 文件:

# 下载 calico.yaml 文件
cd ~
wget https://xuzhibin-bucket.oss-cn-beijing.aliyuncs.com/k8s/calico.yaml

下载完毕后,修改 calico.yaml 文件中的 CALICO_IPV4POOL_CIDR 配置,修改成上面 pod-network-cidr 的值:10.244.0.0/16,如下所示:
在这里插入图片描述

修改完毕后,Master 启动配置文件:

kubectl apply -f calico.yaml

等待3分钟后,查看 Pod 运行状态,发现 pods 全部状态为 Running 成功,这样就说明 k8s 集群部署完毕了!:

kubectl get pods -A -o wide

在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐