您的位置:首页 > 科技 > IT业 > Linux系统【RockyLinux9.4】下K8S集群【1.31.0】安装部署指南

Linux系统【RockyLinux9.4】下K8S集群【1.31.0】安装部署指南

2024/11/19 12:01:58 来源:https://blog.csdn.net/qq_41865652/article/details/141964850  浏览:    关键词:Linux系统【RockyLinux9.4】下K8S集群【1.31.0】安装部署指南

1.概述

公司之前一直使用的是CentOS系统作为测试、开发、生产环境的基础系统镜像,由于最近的CentOS的镜像彻底终止维护之后,我们在为后续项目的基础系统镜像选型进行的调研, 最好是可以平替的进行类似系统的移植, 经过多番对比, 决定使用Rocky Linux系统来完成我们开发测试环境的系统移植,系统镜像的下载、安装、部署都比较简单, 基本跟CentOS发现版都很类似, 这里就不进行详细讲解说明了, 下面我们主要演示在Rocky Linux系统下完成K8S集群开发测试环境搭建的整个过程。

2.软件包来源及下载途径

RockyLinux9.4: https://rockylinux.org/zh-CN/download
docker-ce: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cri-docker: https://github.com/Mirantis/cri-dockerd/releases
cri-docker.service: https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
cri-docker.socket: https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket
阿里云k8s源: https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/
gpgkey: https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/repodata/repomd.xml.key
Calico配置文件: https://github.com/projectcalico/calico/blob/master/manifests/calico.yaml

3.K8S集群规划

由于资源限制,只有3台开发服务器, 这里的K8S集群搭建采用 1台master, 2台worker节点
集群各节点资源规划分配

IP地址主机名角色系统版本CPU/内存/磁盘
10.10.100.128master管理节点Rocky Linux 9.42U/4G/100G
10.10.100.129worker01管理节点Rocky Linux 9.42U/4G/100G
10.10.100.130worker02管理节点Rocky Linux 9.42U/4G/100G

4.主机集群基础环境配置

4.1.集群各节点域名设置

把每一台主机进行hostname设置,方便查看【master、worker节点】

,master节点执行

hostnamectl set-hostname master

,worker01节点执行

hostnamectl set-hostname worker01

,worker02节点执行

hostnamectl set-hostname worker02

4.2.集群IP域名映射

以下命令在所有节点上都执行.

cat >> /etc/hosts << "EOF"
10.10.100.128 master
10.10.100.129 worker01
10.10.100.130 worker02
EOF

4.3.修改终端颜色

以下命令在所有节点上都执行.

cat << EOF >> ~/.bashrc
PS1="\[\e[37;47m\][\[\e[32;47m\]\u\[\e[34;47m\]@\h \[\e[36;47m\]\w\[\e[0m\]]\\$ "
EOF

让修改立即生效

source ~/.bashrc

4.4.关闭防火墙

以下命令在所有节点上都执行.

systemctl disable --now firewalld && systemctl is-enabled firewalldsystemctl status firewalld

4.5.禁用selinux

以下命令在所有节点上都执行.

sed -ri 's#(SELINUX=)enforcing#\1disabled#' /etc/selinux/configgrep ^SELINUX= /etc/selinux/configsetenforce 0getenforce 

4.6.修改软件镜像源

以下命令在所有节点上都执行.

sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' -i.bak /etc/yum.repos.d/rocky-*.repo

在所有节点上都执行以下命令将服务器上的软件包信息缓存到本地,

yum makecache

4.7.配置epel源

以下命令在所有节点上都执行. 所有的主机节点上都要进行配置

vi /etc/yum.repos.d/epel.repo

repo文件内容如下:

[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/
enabled=1
gpgcheck=1
countme=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever[epel-debuginfo]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/$basearch/debug/
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
gpgcheck=1[epel-source]
name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
# It is much more secure to use the #metalink, but if you wish to use a local mirror
# place its address here.
baseurl=https://repo.huaweicloud.com/epel/$releasever/Everything/source/tree/
enabled=0

在所有节点上都执行以下命令将服务器上的软件包信息缓存到本地,

yum makecache

4.8.主机集群时间同步设置

检查时区和时间
在这里插入图片描述
如果时区和时间不对,需要手动设置时区和设置时间同步,时间同步我们借助chrony服务来进行设置, 如果没有安装该服务, 先通过一下命令进行安装(所有主机节点都执行):

yum install -y ntpdate chrony

修改chrony服务配置文件

vim /etc/chrony.conf

#注释掉官方的时间服务器,换成国内的时间服务器即可

server ntp.aliyun.com iburst

在这里插入图片描述
重启chrony服务


systmctl enable chronyd  --now

4.9.修改系统最大打开文件数

以下命令在所有节点上都执行.

在/etc/security/limits.conf文件的末尾追加以下内容

* soft nofile 65535
* hard nofile 65535

4.10.修改sysctl.conf内核参数配置

以下命令在所有节点上都执行.

vim /etc/sysctl.conf

打开文件,在文件末尾追加以下几行:

net.ipv4.tcp_syncookies = 1 
net.ipv4.tcp_max_tw_buckets = 20480 
net.ipv4.tcp_max_syn_backlog = 20480
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_fin_timeout = 20 

并运行一下命令使得配置的sysctl.conf文件生效

 sysctl -p

4.11.关闭swap

以下命令在所有节点上都执行.

swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab

4.12.安装系统性能分析及其他工具

以下命令在所有节点上都执行.

yum install -y gcc autoconf sysstat 

4.13.开启bridge网桥过滤

以下命令在所有节点上都执行.

vim /etc/sysctl.d/k8s.conf

编辑文件写入以下几行

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

加载br_netfilter模块,并查看

modprobe br_netfilter && lsmod | grep br_netfilter

加载配置文件,使其生效

sysctl -p /etc/sysctl.d/k8s.conf

以上操作完毕之后,最好将整个集群下的所有主机都重启一边, 确保我们修改的系统配置项全部都生效,再继续进行操作。

5.给集群各个节点安装Docker服务

5.1. 配置国内阿里云docker源

以下命令在所有节点上都执行.

我们需要使用yum-config-manager 工具, 可以先执行以下命令安装,确保配置docker源的命令可以正常执行

yum install -y yum-utils

配置国内阿里云docker源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.2. 查看可用的docker版本

以下命令在所有节点上都执行.

yum list docker-ce.x86_64 --showduplicates | sort -r

在这里插入图片描述

5.3.安装docker27.2.0-1.el9版本

以下命令在所有节点上都执行.

yum -y install docker-ce-27.2.0-1.el9

在这里插入图片描述

5.4.在Docker中配置Cgroup

以下命令在所有节点上都执行.

vim /etc/docker/daemon.json

编辑文件写入以下行

{"exec-opts": ["native.cgroupdriver=systemd"]
}

在这里插入图片描述

5.5. 启动Docker服务并设置随机自启

以下命令在所有节点上都执行.

systemctl enable docker --now

在这里插入图片描述

6.cri-docker安装

从kubernetes 1.24开始,dockershim已经从kubelet中移除(dockershim 是 Kubernetes 的一个组件,主要目的是为了通过 CRI 操作 Docker),但因为历史问题docker却不支持kubernetes主推的CRI(容器运行时接口)标准,所以docker不能再作为kubernetes的容器运行时了,即从kubernetesv1.24开始不再使用docker了,默认使用的容器运行时是containerd。目前containerd比较新,可能存在一些功能不稳定的情况,所以这里我们使用容器运行时还是选择docker。

如果想继续使用docker的话,可以在kubelet和docker之间加上一个中间层cri-docker。cri-docker是一个支持CRI标准的shim(垫片)。一头通过CRI跟kubelet交互,另一头跟docker api交互,从而间接的实现了kubernetes以docker作为容器运行时。这里需要在全部节点执行cri-docker安装。

6.1.下载cri-docker

这里我们先在master节点下载该文件, 然后通过scp工具同步到其他节点

wget -c https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.14/cri-dockerd-0.3.14.amd64.tgz

6.2.解压cri-docker

tar -xvf cri-dockerd-0.3.14.amd64.tgz --strip-components=1 -C /usr/local/bin/

6.3.下载并修改cri-docker配置文件

6.3.1.下载cri-docker.service和cri-docker.socket文件

wget -O /etc/systemd/system/cri-docker.service https://github.com/Mirantis/cri-dockerd/blob/master/packaging/systemd/cri-docker.service
wget -O /etc/systemd/system/cri-docker.socket https://github.com/Mirantis/cri-dockerd/blob/master/packaging/systemd/cri-docker.socket

6.3.2.修改cri-docker.service和cri-docker.socket文件

修改cri-docker.service的启动命令ExecStart

vim /etc/systemd/system/cri-docker.service

修改内容如下:

ExecStart=/usr/local/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9 --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock --cri-dockerd-root-directory=/var/lib/dockershim --cri-dockerd-root-directory=/var/lib/docker

如下图:
在这里插入图片描述
修改cri-docker.socket的ListenStream参数,

vim /etc/systemd/system/cri-docker.socket

修改内容如下:

#ListenStream=%t/cri-dockerd.sock
ListenStream=/var/run/cri-dockerd.sock

在这里插入图片描述

6.4.同步cri-docker服务到其他节点

在master节点执行以下命令

[root@master ~]# scp cri-dockerd-0.3.14.amd64.tgz root@10.10.100.129:/root/
[root@master ~]# scp cri-dockerd-0.3.14.amd64.tgz root@10.10.100.130:/root/

6.5. 在各个worker节点安装cri-docker

在woker01节点、woker02节点执行

tar -xvf cri-dockerd-0.3.14.amd64.tgz --strip-components=1 -C /usr/local/bin/

6.6.同步cri-docker配置文件到其他worker节点

在master节点执行以下命令

[root@master ~]# scp cri-dockerd-0.3.14.amd64.tgz root@10.10.100.129:/etc/systemd/system/
[root@master ~]# scp cri-dockerd-0.3.14.amd64.tgz root@10.10.100.130:/etc/systemd/system

6.7.启动并设置cri-docker自启动

以下命令在所有节点上都执行.

systemctl daemon-reloadsystemctl enable cri-docker.service --now

7.使用kubeadm基于Docker Runtime部署kubernetes集群

7.1.配置阿里云K8S源

以下命令在所有节点上都执行.

vim /etc/yum.repos.d/k8s.repo

内容如下:

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/repodata/repomd.xml.key

7.2.安装K8S集群管理工具

以下命令在所有节点上都执行.

yum install -y kubelet kubeadm kubectl

在这里插入图片描述
在这里插入图片描述

7.3. 配置k8s Cgoup控制组

以下命令在所有节点上都执行.

vim /etc/sysconfig/kubelet

打开文件写入以下行

KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

7.4. 配置kubelet自启动

以下命令在所有节点上都执行.

systemctl enable kubelet.service

7.5. 初始化集群

初始化集群操作只需要在master节点运行

7.5.1. 打印master节点所需的镜像文件

只在master节点运行

 kubeadm config images list

在这里插入图片描述

7.5.2. 打印集群初始化配置文件

只在master节点运行

kubeadm config print init-defaults > kubeadm-config.yaml

在这里插入图片描述

7.5.3. 修改参数

只在master节点运行

主要修改advertiseAddress,criSocket, imageRepository这三个参数,如下:

apiVersion: kubeadm.k8s.io/v1beta4
bootstrapTokens:
- groups:- system:bootstrappers:kubeadm:default-node-tokentoken: abcdef.0123456789abcdefttl: 24h0m0susages:- signing- authentication
kind: InitConfiguration
localAPIEndpoint:advertiseAddress: 10.10.100.128 #修改为集群初始化的master节点IP地址bindPort: 6443
nodeRegistration:criSocket: unix:///var/run/cri-dockerd.sock #高版本默认使用containerd,这里修改成使用dcokerimagePullPolicy: IfNotPresentimagePullSerial: truename: mastertaints: null
timeouts:controlPlaneComponentHealthCheck: 4m0sdiscovery: 5m0setcdAPICall: 2m0skubeletHealthCheck: 4m0skubernetesAPICall: 1m0stlsBootstrap: 5m0supgradeManifests: 5m0s
---
apiServer: {}
apiVersion: kubeadm.k8s.io/v1beta4
caCertificateValidityPeriod: 87600h0m0s
certificateValidityPeriod: 8760h0m0s
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
encryptionAlgorithm: RSA-2048
etcd:local:dataDir: /var/lib/etcd
#imageRepository: registry.k8s.io
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers ##这里修改成使用阿里云容器镜像
kind: ClusterConfiguration
kubernetesVersion: 1.31.0
networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12
proxy: {}
scheduler: {}

7.5.4. 使用以上配置文件进行集群初始化

只在master节点运行

kubeadm init --config kubeadm-config.yaml --upload-certs

在这里插入图片描述
初始化成功之后就会出现如下图打印
在这里插入图片描述

7.5.5. 配置环境变量

只在master节点运行

集群初始化成功之后的打印中提示了我们 需要进行一下环境变量配置

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

7.5.6. 所有woker节点加入到集群中

在所有woker节点上运行

kubeadm join 10.10.100.128:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:92fe2882e5f86ea0e3f3172d1c498eeeb69199ca9b4c4686748d243b6164f151 --cri-socket=unix:///var/run/cri-dockerd.sock

在这里插入图片描述
在这里插入图片描述
以上命令需要注意一下几点:

  • 1.更换IP地址为你的集群的主节点的IP地址
  • 2.token使用你自己的token
  • 3.token-ca-cert-hash值需要使用你自己的
  • 4.–cri-socket=unix:///var/run/cri-dockerd.sock参数是指定使用docker作为容器管理引擎,这个通用。

8.集群网络准备

8.1 calico安装

只在master节点运行

K8s使用calico部署集群网络,只需要在Master节点安装即可。

wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml --no-check-certificate

8.2.创建calico网络

只在master节点运行

kubectl apply -f calico.yaml

在这里插入图片描述

8.3.验证集群可用性

root@master /home/software/k8s-cluster]# kubectl get nodes
NAME       STATUS   ROLES           AGE     VERSION
master     Ready    control-plane   2d23h   v1.31.0
worker01   Ready    <none>          2d23h   v1.31.0
worker02   Ready    <none>          2d23h   v1.31.0

在这里插入图片描述

8.4.查看集群健康情况

[root@master /home/software/k8s-cluster]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                 STATUS    MESSAGE   ERROR
scheduler            Healthy   ok        
controller-manager   Healthy   ok        
etcd-0               Healthy   ok

在这里插入图片描述

8.5.查看kubernetes集群pod运行情况

root@master /home/software/k8s-cluster]# kubectl get pods -n kube-system
NAME                                      READY   STATUS    RESTARTS   AGE
calico-kube-controllers-94fb6bc47-2slv8   1/1     Running   0          2d23h
calico-node-gt2lx                         1/1     Running   0          2d23h
calico-node-nfkn4                         1/1     Running   0          2d23h
calico-node-q7lbr                         1/1     Running   0          2d23h
coredns-d4ddbc888-7k4s8                   1/1     Running   0          3d
coredns-d4ddbc888-gdjs8                   1/1     Running   0          3d
etcd-master                               1/1     Running   0          3d
kube-apiserver-master                     1/1     Running   0          3d
kube-controller-manager-master            1/1     Running   0          3d
kube-proxy-8qrqc                          1/1     Running   0          2d23h
kube-proxy-g28lf                          1/1     Running   0          2d23h
kube-proxy-klmh5                          1/1     Running   0          3d
kube-scheduler-master                     1/1     Running   0          3d

在这里插入图片描述

8.6.worker节点配置

当我们在Worker节点上执行kubectl命令管理时会报如下错误:

E0909 16:48:18.513539 3733430 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0909 16:48:18.515608 3733430 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0909 16:48:18.517357 3733430 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0909 16:48:18.518838 3733430 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0909 16:48:18.520453 3733430 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
The connection to the server localhost:8080 was refused - did you specify the right host or port?

在这里插入图片描述

如何解决已上报错, 很容易,按照如下命令进行操作:

只要把master上的管理文件/etc/kubernetes/admin.conf拷贝到Worker节点的$HOME/.kube/config就可以让Worker节点也可以实现kubectl命令管理。

#在Worker节点创建.kube目录
[root@worker01 ~]# mkdir /root/.kube
[root@worker02 ~]# mkdir /root/.kube#在master节点做如下操作
[root@master ~]# scp /etc/kubernetes/admin.conf root@10.10.100.129:/root/.kube/config
[root@master ~]# scp /etc/kubernetes/admin.conf root@10.10.100.130:/root/.kube/config

在这里插入图片描述
在这里插入图片描述
通过以上步骤, 我们就完成了K8S集群的安装部署了,接下来可以愉快的玩耍了。

9.K8S集群的启停管理

默认K8S我们只要设置了systemctl enable kubelet 后,会在开机自动启动K8S集群,如果想要停止kubernetes集群,我们可以通过systemctl stop kubelet 命令停止集群,但是必须先将节点上的docker停止。

不管你是通过哪种方式安装的K8S集群, 只要记住一句口诀就行了:启动K8S集群,先启动集群上所有的容器服务(不管是Docker还是Containerd),停止K8S集群,先停止集群上所有的容器服务。

9.1.停止K8S集群

以下命令在所有节点上都执行.

systemctl stop docker
systemctl stop kubectl

9.2.启动K8S集群

以下命令在所有节点上都执行.

systemctl start docker
systemctl start kubectl

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com