✨✨ 欢迎大家来到景天科技苑✨✨
🎈🎈 养成好习惯,先赞后看哦~🎈🎈
🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,云原生k8s,linux,shell脚本等实操经验,网站搭建,数据库等分享。所属的专栏:云原生K8S,零基础到进阶实战
景天的主页:景天科技苑
文章目录
- kubeadm安装k8s-1.30版本
大家好,我是景天,前不久本专栏的博客中我更新了K8S集群的二进制部署和kubeadm两种方式的部署方式。
后来有小伙伴咨询说之前的K8S用的是docker,k8s 1.24版本之后采用的是containerd作为容器运行时,问啥时候更新一下基于containerd的k8s集群搭建方式的教程,这不,今天就来了。
目前k8s最新版本1.30.2集群搭建部署,保姆级教程,一文搞定搭建过程中的所有疑难杂症。
kubeadm安装k8s-1.30版本
k8s环境规划
物理机网段:10.10.0.0/24
Pod网段: 172.16.0.0/12
Service网段: 192.168.0.0/16
实验环境规划
操作系统:centos7.9或者rockylinux8.9
配置: 4Gib内存/4vCPU/60G硬盘
网络:NAT模式,用NAT模式可以确保机器在任何网络都能通过xshell连上去。
集群角色 ip 主机名 安装组件 控制节点 10.10.0.10 master01 apiserver、controller-manager、scheduler、etcd、docker、kube-proxy、容器运行时、calico、kubelet 工作节点 10.10.0.11 node01 Kube-proxy、calico、coredns、容器运行时、kubelet 工作节点 10.10.0.18 node02 Kube-proxy、calico、coredns、容器运行时、kubelet
1.1、初始化安装k8s集群的实验环境
在每台机器安装基础软件包,为了实验中用,提前安装即可:
yum install -y device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack telnet ipvsadm
上述命令解释如下:
1.device-mapper-persistent-data:设备映射器持久数据,用于设备映射器的持久化存储。
2.lvm2:逻辑卷管理器,用于管理逻辑卷。
3.wget:用于从网络下载文件的命令行工具。
4.net-tools:包含了一系列网络工具,如ifconfig和netstat,用于配置和管理网络。
5.nfs-utils:NFS(Network File System)工具,用于搭建和管理NFS网络文件系统。
6.lrzsz:提供了用于在UNIX系统和计算机终端之间传输文件的工具。
7.gcc:GNU编译器集合,用于编译C语言和C++程序。
8.gcc-c++:GNU编译器集合的C++编译器。
9.make:用于自动化编译和安装程序的工具。
10.cmake:用于跨平台软件构建的工具。
11.libxml2-devel:libxml2的开发库,用于开发基于XML的应用程序。
12.openssl-devel:OpenSSL的开发库,用于在应用程序中使用加密和安全功能。
13.curl:用于从命令行或脚本中进行URL数据传输的工具。
14.curl-devel:libcurl的开发库,用于在应用程序中使用libcurl进行URL数据传输。
15.unzip:用于解压缩ZIP文件的命令行工具。
16.sudo:用于以其他用户的身份执行命令的工具,通常用于提升权限。
17.ntp:网络时间协议客户端,用于同步系统时钟。
18.libaio-devel:异步I/O(AIO)的开发库,用于开发异步I/O应用程序。
19.vim:文本编辑器,通常用于在命令行中编辑文本文件。
20.ncurses-devel:ncurses的开发库,用于在文本终端上显示复杂的图形界面。
21.autoconf:用于自动配置软件包的工具。
22.automake:用于自动生成Makefile文件的工具。
23.zlib-devel:zlib的开发库,用于在应用程序中进行数据压缩和解压缩。
24.python-devel:Python的开发库,用于在应用程序中使用Python编程语言。
25.epel-release:Extra Packages for Enterprise Linux (EPEL)软件源的发布包,用于安装额外的软件包。
26.openssh-server:OpenSSH服务器,用于远程访问和管理服务器。
27.socat:多功能的网络工具,用于在不同类型的网络连接之间传输数据。
28.ipvsadm:IPVS管理工具,用于配置Linux内核中的IPVS(IP Virtual Server)负载均衡。
29.conntrack:用于查看和管理Linux内核连接跟踪表的工具。
30.telnet:用于通过Telnet协议连接到远程主机的工具。
1.1.1 修改机器IP,变成静态IP
如果是Centos7.9操作系统,按照如下方式修改:
[root@master01 ~ ]#vim /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE="Ethernet" BOOTPROTO="none" 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="8b354e37-4cf0-4e2a-9e56-8348bd232b25" DEVICE="ens33" ONBOOT="yes" IPADDR="10.10.0.10" PREFIX="24" GATEWAY="10.10.0.1" DNS1="223.5.5.5" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_PRIVACY="no"
修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:
systemctl restart network.service
1.1.2 关闭selinux,所有k8s机器均操作
为什么要关闭selinux?
SELinux 是 Linux 系统的一种安全机制,可以限制系统资源(如文件、网络等)的访问,提高系统的安全性。在 Kubernetes 运行过程中,需要访问系统资源,但 SELinux 可能会限制访问,从而影响 Kubernetes 的运行。因此,在安装 Kubernetes 时,需要关闭 SELinux,以避免它对 Kubernetes 的影响。
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
#备注:修改selinux配置文件之后,重启linux机器,selinux配置才能永久生效,重启之后,登录到机器,执行如下命令:
getenforce
如果显示Disabled说明selinux已经关闭
1.1.3 配置机器主机名
在10.10.0.10上执行如下:
hostnamectl set-hostname master01 && bash
在10.10.0.11上执行如下:
hostnamectl set-hostname node01 && bash
在10.10.0.18上执行如下:
hostnamectl set-hostname node02 && bash
1.1.4 配置主机hosts文件,相互之间通过主机名互相访问
修改每台机器的/etc/hosts文件,文件最后增加如下内容:
10.10.0.10 master01 10.10.0.11 node01 10.10.0.18 node02
修改之后的文件如下:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.10.0.10 master01 10.10.0.11 node01 10.10.0.18 node02
备注:Linux机器配置主机名的用处:
1.标识主机:主机名是用来标识计算机或网络设备的名称。通过配置主机名,可以使得其他计算机或网络服务更容易地识别和定位该主机。在网络环境中,主机名是在进行网络通信时进行标识的重要信息之一。
2.管理网络服务:一些网络服务和应用程序可能需要知道主机的名称才能正常运行。通过配置主机名,可以确保这些服务能够正确地识别和绑定到正确的主机上。
3.方便管理:在管理多台服务器或设备时,通过为每台设备配置唯一的主机名可以更轻松地进行识别和管理。这在进行系统日志分析、远程管理以及配置文件管理时特别有用。
4.日志记录:主机名通常会出现在系统日志中,以标识生成日志的主机。通过主机名,可以更容易地跟踪和管理日志,特别是在分布式系统中。
5.安全性:在一些情况下,主机名也用于识别访问权限。例如,通过配置防火墙规则或访问控制列表(ACL)时,可以基于主机名来限制对特定主机的访问。
1.1.5 配置主机之间无密码登录
不是必须操作,对安装k8s无直接影响,主要是为了方便相互之前传文件。
配置master01到其他机器免密登录
[root@master01 ~]# ssh-keygen #一路回车,不输入密码
把本地生成的密钥文件和私钥文件拷贝到远程主机
[root@master01 ~ ]#ssh-copy-id -i .ssh/id_rsa.pub node01
[root@master01 ~ ]#ssh-copy-id -i .ssh/id_rsa.pub node02
1.1.6 关闭交换分区swap,提升性能
Swap交换分区是一种在计算机中使用的虚拟内存技术。当物理内存不足以容纳当前运行的程序时,操作系统将会把一部分内存空间暂时转移到硬盘上,以便为当前程序提供运行所需的内存空间。
这个过程就称为交换。交换分区(Swap Partition)就是硬盘上专门预留给操作系统进行交换的一块空间。
交换分区的使用可以有效避免程序因为内存不足而崩溃或运行缓慢的问题,但是硬盘的读写速度比内存要慢得多,因此交换分区的使用会对系统的性能产生一定的影响。
在 Kubernetes 运行过程中,需要频繁地使用内存和磁盘等系统资源。如果使用了交换分区,会导致 Kubernetes 的运行速度变慢,从而影响整个集群的性能。因此,在安装 Kubernetes 时,通常会建议关闭交换分区。
以一个类比的方式来说,就好像开车上高速,如果路况通畅,车速可以很快,但是如果遇到堵车,需要走应急车道,就会耽误时间。交换分区就像是道路上的堵车,会影响系统的运行速度和效率。因此,为了让 Kubernetes 运行更加高效,通常会建议关闭交换分区。
临时关闭
[root@master01 ~]# swapoff -a [root@node01 ~]# swapoff -a [root@node02 ~]# swapoff -a
永久关闭:注释swap挂载,给swap这行开头加注释
[root@master01 ~]# vim /etc/fstab #/dev/mapper/centos-swap swap swap defaults 0 0 [root@node01 ~]# vim /etc/fstab #/dev/mapper/centos-swap swap swap defaults 0 0 [root@node02 ~]# vim /etc/fstab #/dev/mapper/centos-swap swap swap defaults 0 0
1.1.7 修改机器内核参数
每个节点都操作
[root@master01 ~]# modprobe br_netfilter </