搭建K8s集群

前言:本次将通过kubeadm部署1个master节点,2个worker节点K8s集群,本次集群使用的容器运行工具为docker(题外话:K8s的容器运行工具也可以用docker、containerd、cio等等,其中containerd是一个轻量级、工业级的容器运行工具,containerd是docker公司捐献给cncf基金会的,所以docker的功能会比containerd的功能多,并且需要值得注意的是K8s在1.24版本后并未抛弃docker,只是在K8s的1.24版本以后移除了docker-shim,而Docker Engine默认又不支持CRI规范,因而二者将无法直接完成整合,为此,Mirantis和Docker联合创建了cri-dockerd项目,用于为Docker Engine提供一个能够支持到CRI规范的垫片,从而能够让Kubernetes基于CRI控制Docker ,所以想在K8s的1.24版本及以后的版本中使用docker,需要安装cri-dockerd)

安装K8s集群的准备条件:

1、准备3台主机,虚拟机也行,每台主机的内存都要在2GB以上,cpu都要在2颗以上,否则后续初始化K8s时会不通过,别不信邪,我亲身经历了的,后面搭建集群的人就不要学我了,血的教训(别说我骗你们,有图有真相)

[ERROR NumCPU]: the number of available CPUs 1 is less than the required 2
[ERROR Mem]: the system RAM (972 MB) is less than the minimum 1700 MB
[ERROR CRI]: container runtime is not running: output: E1019 23:31:30.275460    2642 remote_runtime.go:948] "Status from runtime service failed" err="rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService"

2、各主机间能通过网络互相通信(ping一下就知道通不通了)

3、禁用各主机上的swap设备(下面有教程,自己跟着来就行)

4、各主机时间同步(下面有教程,自己跟着来就行)

1、首先需要准备3台服务器或虚拟机,分别作为master、worker1、worker2节点(若是用虚拟机搭建集群,安装一台,其他两台克隆第一台即可;以下连接为虚拟机安装CentOS7的教程,有需要的同学可以看看)

https://blog.csdn.net/m0_64284147/article/details/126199002

2、禁止每个节点上的swap分区

swapoff -a

然后使用以下命令查看是否禁用成功

free -mh

禁用前:

 禁用后:

3、关闭每个节点上的防火墙

临时关闭:

systemctl stop firewalld

永久关闭:

systemctl disable firewalld

效果图:

5、关闭每个节点上的selinux

 临时关闭:

setenforce 0

永久关闭:

sed -i 's/enforcing/disabled/' /etc/selinux/config

5、分别在3个节点上输入以下命令,更改每个节点上的主机名称,方便后续的查看

hostnamectl set-hostname 要改的名字

输入以下命令查看主机名 

hostname

master节点的效果图:

6、在master节点里添加hosts

cat >> /etc/hosts << EOF
主节点ip master
工作节点ip worker1
工作节点ip worker2
EOF

例:(每台机器的Ip不同,截图仅供参考) 

效果图:

7、分别在3个节点上输入以下命令,将桥接的IPV4流量传递到iptables的链(同一节点的不同pod是利用linux bridge在网路的第二层进行通讯,由于没有原路返回造成pod请求services时的session无法收到返回值而连接超时,所以需要进行设置让第二层的bridge在转发时也通过第三层的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

master节点的效果图:

8、让3个节点上的时间保持一致

(1)分别在3个节点上输入以下命令安装软件包ntpdate

yum install ntpdate -y

(2)分别在3个节点上输入以下命令同步时间

ntpdate ntp1.aliyun.com

国内常用的NTP服务器 

1、cn.pool.ntp.org  中国开源免费NTP服务器
2、ntp1.aliyun.com 阿里云NTP服务器
3、ntp2.aliyun.com 阿里云NTP服务器
4、time1.aliyun.com 阿里云NTP服务器
5、time2.aliyun.com 阿里云NTP服务器

效果图:

9、由于要让K8s的容器运行工具Docker,所以需要先安装Docker


我的另一篇文章关于Docker的安装教程,有需要的同学可以拿来参考:https://blog.csdn.net/m0_64284147/article/details/126025ru


以上文章的安装教程是根据官方文档来进行的,比较繁琐,又需要安装的与Docker相关的东西,会占用内存,以下提供另一种简单的只安装Docker引擎的安装教程

(1)分别在3个节点上输入以下命令从阿里云上下载Docker的仓库配置文件

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

效果图:

(2)分别在3个节点上输入以下命令命令安装Docker

yum -y install docker-ce-20.10.17

(3)分别在3个节点上输入以下命令启动Docker并设置Docker开机自启动

systemctl enable docker && systemctl start docker

master节点效果图:

(4)分别在3个节点上输入以下命令查看Docker的版本

docker version

master节点效果图: 

10、配置阿里云镜像加速器,加快对Docker镜像的下载速度(因为Docker的镜像仓库在国外,不配置,下载镜像的速度会比较慢甚至被墙了的话Docker镜像就下载不下来了,注意!!!3个节点都要设置)

我的另一篇文章关于配置阿里云镜像加速器的教程,有需要的同学可以拿来参考:https://blog.csdn.net/m0_64284147/article/details/126807095

11、K8s在1.24版本后并未抛弃docker,而是K8s的1.24版本以后移除了docker-shim,而Docker Engine默认又不支持CRI规范,因而二者将无法直接完成整合,为此,Mirantis和Docker联合创建了cri-dockerd项目,用于为Docker Engine提供一个能够支持到CRI规范的垫片,从而能够让Kubernetes基于CRI控制Docker ,所以想在K8s的1.24版本及以后的版本中使用docker,需要安装cri-dockerd,然后K8s集群通过cri-dockerd联系到docker(注意每个节点都要安装)

项目地址:https://github.com/Mirantis/cri-dockerd

 (1)查看主机的系统内核版本

uname -r

master节点效果图: 

 

(2)根据主机的系统内核版本来选择相应的包


rpm二进制包:已经使用GCC编译后的(二进制已经可以被操作系统直接执行了)

tar源码包:需要编译(源码包就是你能看懂的,基于字符的,还需要进行编译)


(3)根据自己主机的系统内核版本下载相应的包

例:

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.2.6/cri-dockerd-0.2.6-3.el7.x86_64.rpm

master节点效果图: 

(4)安装cri-dockerd

例:

yum install -y cri-dockerd-0.2.6-3.el7.x86_64.rpm

效果图:

(5)查看cri-dockerd.sock

cd /var/run/

12、分别在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=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

master节点效果图:

12、分别在3个节点上安装kubeadm、kubelet和kubectl(不选择版本会默认安装最新,我安装时kubeadm的最新版本为1.25.4)

yum install -y --nogpgcheck kubelet kubeadm kubectl

master节点效果图(仅供参考,反正安装过程中没报错就是安装成功了):

13、查看安装的kubeadm的版本

kubeadm version

效果图: 

kubeadm config images list

效果图:

14、分别在3个节点上设置开机自启动

systemctl enable kubelet

master节点效果图:


另:附上取消开机自启动的命令

systemctl disable kubelet

15、整合kubelet和cri-dockerd


需要注意的是,15及以下16步整合kubelet和cri-dockerd的操作也可以不用做,而是直接在后面的各种kubeadm命令后面加上“--cri-socket unix:///run/cri-dockerd.sock”选项。 (而且我也做了配置,不知道是不是我个人没配对的原因,最后还是没效果需要在后面的各种kubeadm命令后面加上“--cri-socket unix:///run/cri-dockerd.sock”选项)


(1)编辑cri-docker.service文件

vim /usr/lib/systemd/system/cri-docker.service

(2)把ExecStart的属性值变成以下内容

#各配置参数的解释
--network-plugin:指定网络插件规范的类型,这里要使用CNI;
--cni-bin-dir:指定CNI插件二进制程序文件的搜索目录;
--cni-cache-dir:CNI插件使用的缓存目录;
--cni-conf-dir:CNI插件加载配置文件的目录;

ExecStart=/usr/bin/cri-dockerd --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8 --container-runtime-endpoint fd:// --network-plugin=cni --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.d

效果图:

(3)重载并重启cri-docker.service服务

systemctl daemon-reload && systemctl restart cri-docker.service

16、配置kubelet,为其指定cri-dockerd在本地打开的Unix Sock文件的路径,该路径一般默认为“/run/cri-dockerd.sock“

(1)编辑文件/etc/sysconfig/kubelet(若没有则新建)

vim /etc/sysconfig/kubelet

(2)为KUBELET_EXTRA_ARGS添加以下指定参数

KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/cri-dockerd.sock"

17、在master节点输入以下命令,对master节点做初始化(这个理论上配置完15、16步就不用在命令后面加--cri-socket unix:///var/run/cri-dockerd.sock这一选项,但我也尝试了,会报缺失--cri-socket unix:///var/run/cri-dockerd.sock这一选项的错误)

#参数解释
–apiserver-advertise-address:用于指定
–image-repository: 指定镜像仓库地址
kube-apiserver监听的ip地址,就是 master本机IP地址。
–pod-network-cidr:用于指定Pod的网络范围

kubeadm init --apiserver-advertise-address=192.168.194.128 --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.25.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.224.0.0/16

实际上还是需要加上“--cri-socket unix:///var/run/cri-dockerd.sock”这一选项才能进行kubelet和cri-dockerd的整合,下面这句初始化命令给各位同学参考:

#参数解释
–apiserver-advertise-address:用于指定
–image-repository: 指定镜像仓库地址
kube-apiserver监听的ip地址,就是 master本机IP地址。
–pod-network-cidr:用于指定Pod的网络范围
--cri-socket就是整合cri-docker

kubeadm init --kubernetes-version=v1.25.4 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.194.128 --cri-socket unix:///var/run/cri-dockerd.sock

注意:卡在这里不要慌,只是主机在下载镜像,有点慢而已

master节点初始化成功的效果图(只要出现我截图里圈起来的提醒语句就是成功了): 

然后往下看初始K8s时输出的日志,能看到初始化K8s后日志里给出了后续K8s的安装步骤,我们接下来按照日志里的提示来继续安装即可。

18、根据日志的提示创建文件夹

创建文件夹的目的是把客户端所使用的配置文件放进这个文件夹

mkdir -p $HOME/.kube

19、根据日志的提示把配置文件复制进刚刚新创建的文件夹里

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

20、根据日志的提示输入以下命令

chown $(id -u):$(id -g) $HOME/.kube/config

21、根据提示把worker节点加进master节点,复制你们各自在日志里的提示,然后分别粘贴在2个worker节点上,最后回车即可(注意要在后面加上--cri-socket unix:///var/run/cri-dockerd.sock这一参数,不然可能会失败)

kubeadm join 192.168.194.128:6443 --token 8fcaro.ekkbz9l62zemm1js --discovery-token-ca-cert-hash sha256:81244cd26a3e7cf6dd49a74d9f1a765321a7951a548ecdeab2b30972ce75c92e --cri-socket unix:///var/run/cri-dockerd.sock

效果图:

worker1节点效果图: 

 worker2节点效果图:

22、查看K8s集群node节点的状态

kubectl get nodes

效果图: 


若报“The connection to the server localhost:8080 was refused - did you specify the right host or port?”的错误,可以参考我的另一篇文章来解决

https://blog.csdn.net/m0_64284147/article/details/128072008


23、使用calico给K8s集群做网络支撑

calico是一种自定义的软件,并不是K8s集群的标准的资源对象

(1)命令下载calico

wget https://docs.projectcalico.org/manifests/tigera-operator.yaml

 效果图:

(2)安装calico的operator

kubectl create -f tigera-operator.yaml

效果图:

(3)下载自定义配置文件

wget https://docs.projectcalico.org/manifests/custom-resources.yaml

效果图:

(4)打开刚刚下载完的custom-resources.yaml文件

vim custom-resources.yaml

效果图: 

(5)修改custom-resources.yaml文件里cidr的值,然后保存并退出


 注意!!!注意!!!注意!!!

这里cidr修改成17步初始化K8s时填的cidr,即10.224.0.0,我17步填的是10.224.0.0(如下命令所示),需要各位同学根据自己在17步填的cidr再在这里填一次,否则会出问题,后续会进行不下去

#参数解释
–apiserver-advertise-address:用于指定
–image-repository: 指定镜像仓库地址
kube-apiserver监听的ip地址,就是 master本机IP地址。
–pod-network-cidr:用于指定Pod的网络范围
--cri-socket就是整合cri-docker

kubeadm init --kubernetes-version=v1.25.4 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.194.128 --cri-socket unix:///var/run/cri-dockerd.sock

效果图: 

(6)应用custom-resources.yaml配置文件

kubectl apply -f custom-resources.yaml

效果图:

(7)实时查看网络插件部署情况

watch kubectl get pods -n calico-system

效果图:

24、当calico网络插件下载完毕后重新查看K8s集群节点的状态,此时显示3个节点的STATUS都是Ready,至此K8s集群搭建成功。

kubectl get nodes

 效果图:

其他:

1、报错信息

Found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the 'criSocket' field in the kubeadm configuration file: unix:///var/run/containerd/containerd.sock, unix:///var/run/cri-dockerd.sock
To see the stack trace of this error execute with --v=5 or higher

 2、原因:

没有整合kubelet和cri-dockerd

3、解决办法,在命令后面加上以下选项

--cri-socket unix:///var/run/cri-dockerd.sock
[root@worker2 ~]# kubeadm init --kubernetes-version=v1.25.4 --pod-network-cidr=10.224.0.0/16 --apiserver-advertise-address=192.168.194.128 --image-repository registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock
[init] Using Kubernetes version: v1.25.4
[preflight] Running pre-flight checks
	[WARNING Swap]: swap is enabled; production deployments should disable swap unless testing the NodeSwap feature gate of the kubelet
	[WARNING Hostname]: hostname "worker2" could not be reached
	[WARNING Hostname]: hostname "worker2": lookup worker2 on 8.8.8.8:53: no such host
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'

2、卸载K8s的命令(同样需要在命令后面加上--cri-socket unix:///var/run/cri-dockerd.sock选项)

kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock

效果图:

创作不易,如果这篇文章对你有帮助,希望能点个赞帮助文章的推广,如果文章有错漏,希望各位能批评指正,谢谢大家。

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Rancher是一个开源的容器管理平台,可以用来搭建和管理Kubernetes集群。使用Rancher搭建Kubernetes集群的步骤可以分为三个主要部分:虚拟机环境配置、安装Rancher和通过Rancher安装Kubernetes集群。 在虚拟机环境配置部分,你需要配置一台或多台虚拟机作为Kubernetes集群的节点。这包括设置虚拟机的操作系统和资源分配等配置。 接下来,在安装Rancher的部分,你需要在Docker中安装Rancher,这将提供一个可视化的管理界面来管理和监控Kubernetes集群。 最后,在通过Rancher安装Kubernetes集群的部分,你需要按照一系列步骤来配置和安装Kubernetes集群。这包括安装RKE和kubectl工具、使用RKE安装Kubernetes、设置环境变量、安装和配置Helm等。 当然,如果你想清理Rancher创建的Kubernetes集群,还可以按照相应的步骤进行清理操作。 综上所述,使用Rancher搭建Kubernetes集群的主要步骤包括虚拟机环境配置、安装Rancher和通过Rancher安装Kubernetes集群。<span class="em">1</span> #### 引用[.reference_title] - *1* [Rancher搭建k8s集群](https://blog.csdn.net/aa18855953229/article/details/112200578)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值