前言
本篇使用 kubeadm 东西来装置和布置Kubernetes 1.24.9版别的一主多从集群环境。首先声明下没有挑选最新版别的 K8S 原因是 Kubesphere 的版别兼容 ,好在不同版别装置的进程大同小异。
前置准备
装置虚拟机
K8S
一主两从的3 台 Linux 体系服务器装备如下:
主机名 | K8S人物 | IP | 装备 | 操作体系 |
---|---|---|---|---|
k8s-master | Master节点 | 192.168.179.21 | 4核CPU 8G内存 20G硬盘 | CentOS 7.9 |
k8s-node1 | Worker节点 | 192.168.179.22 | 4核CPU 8G内存 20G硬盘 | CentOS 7.9 |
k8s-node2 | Worker节点 | 192.168.179.23 | 4核CPU 8G内存 20G硬盘 | CentOS 7.9 |
❗️ 假如你没有装置虚拟机,你能够依照这篇文章 VMware 基于CentOS 7.9 镜像建立 K8S 一主多从本地虚拟服务器 的过程来完结建立。
封闭防火墙
一切节点均要履行
# 封闭防火墙
systemctl stop firewalld
# 重启禁用防火墙
systemctl disable firewalld
# 检查防火墙状况
systemctl status firewalld
禁用 SELinux
一切节点均要履行
sed -i 's/enforcing/disabled/' /etc/selinux/config
封闭 Swap
分区
一切节点均要履行
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
时区设置和时刻同步
# 时区设置
sed -i '$a\export TZ=Asia/Shanghai' /etc/profile && source /etc/profile && date
# 时刻校准(阿里云 ntp 时刻服务器)
yum -y install ntpdate
ntpdate time1.aliyun.com
主机名和域名解析装备
192.168.179.21 主机履行
# 192.168.179.21 设置主机名 k8s-master
hostnamectl set-hostname k8s-master
# 当即收效设置
exec bash
192.168.179.22 主机履行
# 192.168.179.22 设置主机名 k8s-node1
hostnamectl set-hostname k8s-node1
# 当即收效设置
exec bash
192.168.179.23 主机履行
# 192.168.179.23 设置主机名 k8s-node2
hostnamectl set-hostname k8s-node2
# 当即收效设置
exec bash
装备域名解析 ( 一切节点机器均要履行 )
cat >> /etc/hosts << EOF
192.168.179.21 k8s-master
192.168.179.22 k8s-node1
192.168.179.23 k8s-node2
EOF
转发 IPv4
并让 iptables
看到桥接流量
一切节点机器均要履行
官方文档:转发 IPv4 并让 iptables 看到桥接流量
履行下述指令:
#
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# 设置所需的 sysctl 参数,参数在重新发动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新发动
sudo sysctl --system
经过运行以下指令承认 br_netfilter
和 overlay
模块被加载:
lsmod | grep br_netfilter
lsmod | grep overlay
经过运行以下指令承认 net.bridge.bridge-nf-call-iptables
、net.bridge.bridge-nf-call-ip6tables
和 net.ipv4.ip_forward
体系变量在你的 sysctl
装备中被设置为 1:
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
Docker 装置
一切节点机器均要履行
装置依靠包
yum install -y yum-utils device-mapper-persistent-data lvm2
装备 Docker
阿里云 yum
源
yum-config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
装置 docker-ce
yum install -y docker-ce
装备 Docker
阿里云镜像加快
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://g6jp4cfd.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
}
}
EOF
sudo systemctl daemon-reload
发动 Docker
# 发动 Docker & 开机自启
systemctl enable --now docker
cri-docker 装置
自
Kubernetes
v1.24 版别开始,已移除了Dockershim
。然而,Docker Engine
默认不支撑CRI
规范,这导致无法直接集成两者。为了处理这个问题,Mirantis
和Docker
一起创立了cri-dockerd
项目,它提供了一个适配器来支撑CRI
规范,使得Kubernetes
能够经过CRI
控制Docker Engine
。
一切节点机器均要履行
下载 cri-dockerd
⬇️下载地址 (无法访问请移步 百度网盘)
# 网络欠好可多尝试几次,真实不可从网盘下载再上传文件至服务器装置
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
装置 cri-dockerd
rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm
装备 cri-dockerd
vi /usr/lib/systemd/system/cri-docker.service
# ExecStart=/usr/bin/cri-dockerd 追加装备
--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8
发动 cri-dockerd
# 设置 cri-docker 开机自启 & 当即发动
systemctl enable --now cri-docker
# 检查 cri-docker 状况
systemctl status cri-docker
Kubernetes 布置
装备 Kubernetes 镜像源
一切节点机器均要履行
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
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Kubernetes 组件装置
kubeadm、kubelet 和 kubectl 是 Kubernetes 生态体系中的三个重要组件:
组件 阐明 kubeadm kubeadm 是一个指令行东西,用于初始化和管理 Kubernetes 集群的引导东西。 kubelet kubelet 是运行在每个 Kubernetes 节点,负责管理节点上的容器运行时,并与 Kubernetes 控制平面通信。 kubectl kubectl 是 Kubernetes 的指令行东西,能够履行各种操作,如创立、删除和管理 Kubernetes 资源
一切节点机器均要履行
# 检查版别
yum list kubeadm --showduplicates | sort -r
# 装置
yum install -y kubelet-1.24.9-0 kubeadm-1.24.9-0 kubectl-1.24.9-0
# 发动 & 开机自启
systemctl enable --now kubelet
# 检查状况
systemctl status kubelet
Master 节点初始化
Master 节点机器履行
kubeadm init\
--apiserver-advertise-address=192.168.179.21 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.24.9 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///var/run/cri-dockerd.sock
初始化成功提示信息如下(重要):
根据提示履行以下指令来装备 kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
仿制 Node 节点参加集群指令(下文用)
Node 节点参加集群
Node节点机器履行
kubeadm join 192.168.179.21:6443 --token 2gu3ls.e1l6gdi97o92zxlr \
--discovery-token-ca-cert-hash sha256:280e47038be497d46c065cbcef5212918d93910642e5ea808e79944340cb6a8b \
--cri-socket unix:///var/run/cri-dockerd.sock
Calico 网络插件装置
Master 节点机器装置
Calico 是一个强大的容器网络插件,为 Kubernetes 提供 IP 网络互连、网络策略和跨主机网络连接等功能,完成高性能和安全的容器通信。
官方:Calico 装置和装备
下载装备
curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O
修正装备
在上节「Master 节点初始化」 Pod 分配的 IP 地址规模 --pod-network-cidr=10.244.0.0/16
,而非 192.168.0.0/16
,根据官网装置过程2需要将装备中的 CALICO_IPV4POOL_CIDR
变量设置为 10.244.0.0/16
。
vi calico.yaml
装置 Calico
sudo kubectl apply -f calico.yaml
稍等片刻…
K8S 布置成功验证
在 Master
节点履行 kubectl get nodes
指令检查各个节点状况为 Ready 表明 Kubernetes
装置成功
结语
至此,咱们成功完结了一主多从的Kubernetes环境建立。后续文章中,咱们将进行Kubesphere的装置,以便将前后端分离项目 youlai-boot + vue3-element-admin 和微服务项目 youlai-mall 布置到Kubernetes集群上。