Skip to content

实战-kubeadm方式搭建k8s集群-v1-27-6-20231107-测试成功-阳明-荐(CRI-Containerd)

实战:kubeadm方式搭建k8s集群(k8s-v1.27.6,containerd-v1.6.20)-2023.11.7(部署成功-阳明)【荐】

搭建时期:2023年11月7日20:58:24

目录

[toc]

==写在前面==

本文档搭建步骤是在前面一篇文章实战:kubeadm方式搭建k8s集群(k8s-v1.25.4,containerd-v1.6.10)-2023.10.28(部署成功-阳明)【荐】.md基础上,仅修改一部分内容,而搭建的。

最终搭建效果是成功了,至于后期是否存在问题,及其他潜在问题,待实际测试验证。

1、containerd-v1.6.20搭建过程和前面一样;

2、k8s-v1.27.6 就kubeadm.yaml文件里的

bash
(1)registry.aliyuncs.com/k8sxio改为imageRepository:registry.aliyuncs.com/google_containers(2)coredns镜像也不用再单独拉取了;

3、kube-flannel下载新版本v0.22.2版本;

其他操作,无任何改变。

实验软件新增kubeadm.yaml,及config.toml

实验环境

1、硬件环境3台虚机 2c2g,20g。(nat模式,可访问外网)

角色主机名ip内核版本
master节点master1172.29.9.613.10.0-1160.71.1.el7.x86_64
node节点node1172.29.9.623.10.0-1160.71.1.el7.x86_64
node节点node2172.29.9.633.10.0-1160.71.1.el7.x86_64

2、软件环境

软件版本
操作系统centos7.6_x64 1810 mini(其他centos7.x版本也行)
containerdv1.6.20
kubernetesv1.27.6

注意:默认CentOS Linux release 7.6.1810 (Core)的内核是3.10.0-957.el7.x86_64,但老师当前的内核版本有发生改变。基于之前经验,如果内核版本太低,后续的一些实验可能会有影响。这里就暂且使用默认的内核版本就好,后续遇到问题时,再升级下内核或者安装好k8s集群后升级下内核就好,或者先升级完内核再k8s集群都是可以的。

实验软件

链接:https:bashhostnamectl--staticset-hostnamenode1bashhostnamectl--staticset-hostnamenode2bash

注意: 节点的 hostname 必须使用标准的 DNS 命名,另外千万不用什么默认的 localhost的 hostname,会导致各种错误出现的。 在 Kubernetes 项目里,机器的名字以及一切存储在 Etcd 中的 API 对象,都必须使用标准的 DNS 命名(RFC 1123)。 可以使用命令 hostnamectl set-hostname node1来修改 hostname。

3.关闭防火墙,selinux

bash
systemctlstopfirewalld&&systemctldisablefirewalldsystemctlstopNetworkManager&&systemctldisableNetworkManagersetenforce0sed-is/SELINUX=enforcing/SELINUX=disabled//etc/selinux/config

1

bash
# 使用下面命令验证是否禁用成功cat/etc/selinux/configSELINUX=disabled# 或者用如下命令验证:[root@master1 ~]#getenforce Disabled

注意: 如果使用的是云服务器,比如阿里云、腾讯云等,需要配置安全组,放开端口,如果只是为了测试方便可以直接全部放开,对于生产环境则只需要放开 K8s 要是使用到的一些端口,比如 6443 等等。 image-20230213110136385

4.关闭swap分区

bash
# 修改 /etc/fstab 文件,注释掉 SWAP 的自动挂载swapoff-ased-ri's/.*swap.*/#&/'/etc/fstab# 使用 free -m 确认 swap 已经关闭[root@master1 ~]#free -mhtotalusedfreesharedbuff/cacheavailableMem:1.8G89M1.5G9.5M144M1.5GSwap:0B0B0B

问题:k8s集群安装为什么需要关闭swap分区? swap必须关,否则kubelet起不来,进而导致k8s集群起不来;可能kublet考虑到用swap做数据交换的话,对性能影响比较大

5.配置dns解析

bash
cat>>/etc/hosts<<EOF172.29.9.61 master1172.29.9.62 node1172.29.9.63 node2EOF

节点的 hostname 必须使用标准的 DNS 命名,另外千万别用默认 localhost 的 hostname,会导致各种错误出现的。在 Kubernetes 项目里,机器的名字以及一切存储在 Etcd 中的 API 对象,都必须使用标准的 DNS 命名(RFC 1123)。可以使用命令 hostnamectl set-hostname xxx 来修改 hostname。

问题:k8s集群安装时节点是否需要配置dns解析? 就是后面的kubectl如果需要连接运行在node上面的容器的话,它是通过kubectl get node出来的名称去连接的,所以那个的话,我们需要在宿主机上能够解析到它。如果它解析不到的话,那么他就可能连不上;🤣

6.开启内核 ipv4 转发

由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载下该模块:

bash
[root@master1 ~]#lsmod |grepbr_netfilter[root@master1 ~]#modprobe br_netfilter[root@master1 ~]#lsmod |grepbr_netfilterbr_netfilter222560bridge1513361br_netfilter

🚩 ==注意:==

最好将上面的命令设置成开机启动,因为重启后模块失效,下面是开机自动加载模块的方式,在 /etc/rc.d/rc.local 文件末尾添加如下脚本内容:

bash
cat>>/etc/rc.d/rc.local<<EOFfor file in /etc/sysconfig/modules