本文记录了在作者本地运用三台CentOS虚拟机,建立布置单Master双Slave Kubernetes集群。

题图源:Understanding Your Kubernetes Deployment Lifecycle


1 系统预备

建立布置包含1个Master结点和2个Slave结点的Kubernetes集群,需求预备3台Linux虚拟机作为集群结点,能够经过VMware Worksation快速创立三台CentOS虚拟机。

1.1 东西装置

1.2 网络装备

运用VMware东西本身的界面操作起来并不方便,对CentOS虚拟机固定IP后,可使虚拟机每次发动时IP不会发生变化,能够运用XShellTabby经过SSH访问虚拟机,进行后续的装备操作,会节约许多时刻。

此装备确保后续Kubernetes集群结点IP不会随意改动,这儿不做过多介绍,具体可参阅这篇文章:Vmware虚拟机Linux装备固定IP地址(具体版)

经过以上装备,在各个结点履行ip addr获取到三个结点的IP信息:

192.168.198.129
192.168.198.130
192.168.198.131

1.3 CentOS系统装备

1.3.1 主机名装备

设置192.168.198.129主机名 apple

hostnamectl set-hostname apple

设置192.168.198.130主机名 banana

hostnamectl set-hostname banana

设置192.168.198.131主机名 cherry

hostnamectl set-hostname cherry

1.3.2 装备主机IP地址

设置Apple IP地址为 192.168.198.129

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="529588ee-2c22-4dd4-99c1-c823fbf96642"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.198.129
GATEWAY=192.168.198.2
NETMASK=255.255.255.0

设置Banana IP地址为 192.168.198.130

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="529588ee-2c22-4dd4-99c1-c823fbf96642"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.198.130
GATEWAY=192.168.198.2
NETMASK=255.255.255.0

设置Cherry IP地址为 192.168.198.131

vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="529588ee-2c22-4dd4-99c1-c823fbf96642"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.198.131
GATEWAY=192.168.198.2
NETMASK=255.255.255.0

1.3.3 装备DNS网络信息

在每个结点履行

# 缺少此装备或许无法访问外网
cat >> /etc/resolv.conf << EOF
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 114.114.114.114
EOF

重启收效

# 重启网络服务
systemctl restart network
# 验证网络
ping www.baidu.com

1.3.4 装备主机名与IP地址解析

在每个结点履行

cat >> /etc/hosts << EOF
192.168.198.129 apple
192.168.198.130 banana
192.168.198.131 cherry
EOF

1.3.5 防火墙装备

在每个结点履行

# 封闭防火墙
systemctl stop firewalld
# 制止防火墙开机自启
systemctl disable firewalld

1.3.6 SELinux装备

在每个结点履行,修正后需求重启

# 永久封闭
sed -i 's/enforcing/disabled/' /etc/selinux/config
#临时封闭
setenforce 0

重启收效

reboot

1.3.7 swap分区装备

在每个结点履行,修正后需重启

# 永久封闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 临时封闭
swapoff -a

重启收效

reboot

1.3.8 装备内核转发及网桥过滤

在每个结点履行

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
# 加载br_netfilter模块
modprobe br_netfilter
# 检查是否加载
lsmod | grep br_netfilter
# 收效
sysctl --system  

1.3.9 时刻同步装备

在每个结点履行

# 装置 ntpdate
yum install ntpdate -y
# 同步时刻
ntpdate time.windows.com

1.3.10 IPVS装备

在每个结点履行

# 装置ipset和ipvsadm
yum -y install ipset ipvsadm
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 添加履行权限
chmod 755 /etc/sysconfig/modules/ipvs.modules
# 运转
bash /etc/sysconfig/modules/ipvs.modules
# 检查是否加载
lsmod | grep -e ipvs -e nf_conntrack_ipv4

1.3.11 晋级操作系统内核

在每个结点履行,晋级后需重启

装置YUM源

# 导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# 装置elrepo YUM源库房
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm

晋级内核版别

# 稳定版kernel-ml 长时间保护版别kernel-lt  
yum -y --enablerepo=elrepo-kernel  install  kernel-ml
# 检查已装置的内核
rpm -qa | grep kernel
# 检查默许内核
grubby --default-kernel
# 若不是最新版别时履行
grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo)

重启收效

reboot

至此,操作系统环境预备已完结,下一步能够进行Docker、容器运转时以及Kubernetes软件装置和装备!

1.4 创立快照

在VMware对3台虚拟机创立一份快照,便于后续装备出现问题时回滚。

graph LR
选择虚拟机 --> 右键
右键 --> 快照
快照 --> 拍照快照
拍照快照 --> 快照办理器检查

2 容器运转时预备

在每个结点履行

2.1 装置Docker

参阅:清华大学开源软件镜像站 Docker CE 软件库房

因作者本地为CentOS7.9操作系统环境,这儿运用CentOS/RHEL版别。

# 如果你之前装置过docker,请先删掉
yum remove docker 
          docker-client 
          docker-client-latest 
          docker-common 
          docker-latest 
          docker-latest-logrotate 
          docker-logrotate 
          docker-engine
# 装置依赖,下载repo文件,并把软件库房地址替换为镜像站:
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's https://download.docker.com https://mirrors.tuna.tsinghua.edu.cn/docker-ce ' /etc/yum.repos.d/docker-ce.repo
# 装置Docker及相关插件
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

2.2 装备镜像加快

参阅:中科大USTC镜像站 Docker Hub 源运用协助

# 在/etc路径下新建docker文件夹
sudo mkdir -p /etc/docker
# 在docker目录下新建daemon.json文件,并参加registry-mirrors
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}
EOF
# 重新加载systemd办理的单位文件
sudo systemctl daemon-reload
# 重新发动Docker服务
sudo systemctl restart docker
# 设置Docker服务开机自启
systemctl enable docker

2.3 装置cri-docker

选用软件包离线装置方法

# 下载cri-docker.rpm包
https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.8/cri-dockerd-0.3.8-3.el7.x86_64.rpm
# 装置libcgroup
yum install -y libcgroup
# 装置cri-docker
rpm -ivh cri-dockerd-0.3.8-3.el7.x86_64.rpm
# 修正cri-docker.service装备第10行
vi /usr/lib/systemd/system/cri-docker.service
修正为以下装备
ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint fd://
# 发动cri-docker服务
systemctl start cri-docker
# 设置cri-docker服务开机自启
systemctl enable cri-docker

3 布置Kubernetes集群

3.1 装备阿里云镜像源代理

在每个结点履行

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum makecache
yum install -y --nogpgcheck kubelet kubeadm kubectl
yum list kubelet --showduplicates | sort -r |grep 1.28

3.2 装置kubeadm、kubelet、kubectl

在每个结点履行

# 装置最新版别
yum install -y kubelet kubeadm kubectl -y
# 装备kubectl指令补全
yum install bash-completion -y
kubectl completion bash > /etc/profile.d/kubectl_completion.sh
. /etc/profile.d/kubectl_completion.sh
# 发动kubelet服务
systemctl start kubelet
# 设置kubelet开机自启
systemctl enable kubelet 

3.3 预备发动镜像

装备从阿里云镜像源拉取

kubeadm config images list --kubernetes-version=v1.28.2
kubeadm config images list --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2
kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.28.2 --cri-socket=unix:///var/run/cri-dockerd.sock

3.4 初始化Master结点

仅在Master结点履行

kubeadm init --kubernetes-version=v1.28.2  --image-repository registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock
# 依照提示完结以下装备
....
....
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
  export KUBECONFIG=/etc/kubernetes/admin.conf
....
....

3.5 布置CNI网络插件

仅在Master结点履行

# 若coredns始终处于ContainerCreating状况,需求在布置flannel前装备,否则每次重启节点后需求重新装备
vi /run/flannel/subnet.env
# 参加以下装备
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 检查coredns状况
kubectl get pods -n kube-system

3.6 将Slave结点参加集群

仅在Slave结点履行

# 参加worker结点
kubeadm join 192.168.198.129:6443 --token bfm2eb.vb29fgjiwy6d6otq --discovery-token-ca-cert-hash sha256:9ac42de793212b57b9672eab05463e6be286aad41badc4ca96bd5f8ecbf60517 --cri-socket=unix:///var/run/cri-dockerd.sock
# 若忘掉,可在master结点履行以下指令,重新获取
kubeadm token create --print-join-command

至此,一个单Master双Slave的Kubernetes集群建立布置完结,经过kubectl指令在Master结点检查。

kubectl get nodes
NAME     STATUS   ROLES           AGE    VERSION
apple    Ready    control-plane   165m   v1.28.2
banana   Ready    <none>          2m8s   v1.28.2
cherry   Ready    <none>          115s   v1.28.2