ubuntu24.04安装Kubernetes1.30.0(kubernetes1.30.0)高可用集群
一、总体概览
目前最新版的K8S
版本应该是1.31.0
,我们安装的是第二新的版本1.30.0
,因为有大神XiaoHH Superme指路,所以基本上没踩坑,很顺利就搭建完成了。所有的机器都采用的最新版Ubuntu-Server-24.04
长期支持版,Ubuntu-Server
机器准备就绪,安装了必要的vim
、ssh
等,并开启了ssh
自启动等最基础的操作,并且每台机器都进行了固定IP
的设置。如果有需要请参考这里。机器都是跑在PVE
虚拟主机上,稳的一逼。
3台master
主节点(4C8G)、3台(4C8G)worker node
、2台LoadBalancer
(4C8G),对应的 IP如下:
hostname | IP | function | Version |
---|---|---|---|
hep-kubernetes-master-prd-01 | 192.168.31.41 | Control plane | Ubuntu-Server-24.04 |
hep-kubernetes-master-prd-02 | 192.168.31.42 | Control plane | Ubuntu-Server-24.04 |
hep-kubernetes-master-prd-03 | 192.168.31.43 | Control plane | Ubuntu-Server-24.04 |
hep-kubernetes-apiserver-lb-prd-01 | 192.168.31.44 | LoadBalancer | Ubuntu-Server-24.04 |
hep-kubernetes-apiserver-lb-prd-02 | 192.168.31.45 | LoadBalancer | Ubuntu-Server-24.04 |
hep-kubernetes-worker-prd-01 | 192.168.31.46 | worker node | Ubuntu-Server-24.04 |
hep-kubernetes-worker-prd-02 | 192.168.31.47 | worker node | Ubuntu-Server-24.04 |
hep-kubernetes-worker-prd-03 | 192.168.31.48 | worker node | Ubuntu-Server-24.04 |
角色分配:
-
hep-kubernetes-apiserver-lb-prd-01
和hep-kubernetes-apiserver-lb-prd-02
安装keepalived
和haproxy
,做主节点apiserver
的负载均衡器 -
hep-kubernetes-master-prd-01
、hep-kubernetes-master-prd-02
、hep-kubernetes-master-prd-03
为三台master
节点 -
hep-kubernetes-worker-prd-01
、hep-kubernetes-worker-prd-02
、hep-kubernetes-worker-prd-03
为三台worker
节点。
在安装部署Kubernetes
的时候,由于机器比较多,网上的大佬们写的文章很多时候都不知道该在哪台机器上操作,让小白们不知所措,所以我们写的这个教程都是基于机器的,每台机器上该操作啥,全部列举出来了。当然如果你觉得繁琐,特别是在PVE
这样的虚拟化管理软件中,可以在一台机器上操作完成,然后复制虚拟机即可,这样就方便了太多。
二、配置容器运行时
选用的容器运行时是containerd
,版本号为 1.7.20
,可使用如下命令进行下载,或者直接访问https://github.com/containerd/containerd/releases/download/v1.7.20/cri-containerd-cni-1.7.20-linux-amd64.tar.gz
。
curl -LO https://github.com/containerd/containerd/releases/download/v1.7.20/cri-containerd-cni-1.7.20-linux-amd64.tar.gz
2.1 hep-kubernetes-master-prd-01配置containerd
#设置主机名
hostnamectl set-hostname hep-kubernetes-master-prd-01
#修改hosts文件,把k8s所有机器主机名都填上去,这样集群内就可以根据主机名匹配到对应的IP地址,从而进行通信了
vim /etc/hosts
#增加如下内容
192.168.31.41 hep-kubernetes-master-prd-01
192.168.31.42 hep-kubernetes-master-prd-02
192.168.31.43 hep-kubernetes-master-prd-03
192.168.31.44 hep-kubernetes-apiserver-lb-prd-01
192.168.31.45 hep-kubernetes-apiserver-lb-prd-02
192.168.31.46 hep-kubernetes-worker-prd-01
192.168.31.47 hep-kubernetes-worker-prd-02
192.168.31.48 hep-kubernetes-worker-prd-03
#设置为中国上海时区
timedatectl set-timezone Asia/Shanghai
#时间同步工具
apt install -y ntpdate
#进行时间同步
ntpdate ntp.aliyun.com
#修改/etc/fstab文件注释掉带/swap.img的这一行
vim /etc/fstab
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sysctl --system
#验证 net.ipv4.ip_forward 是否设置为 1
sysctl net.ipv4.ip_forward
#选用的容器运行时是containerd,版本号为 1.7.20,可直接执行下面这行命令下载此安装包
curl -LO https://github.com/containerd/containerd/releases/download/v1.7.20/cri-containerd-cni-1.7.20-linux-amd64.tar.gz
#我这里是使用的webmin远程登录到家里的机器,从这台机器拷贝containerd到当前机器
scp root@192.168.31.2:/usr/software/cri-containerd-cni-1.7.20-linux-amd64.tar.gz /usr/software/
#压缩包解压到根目录
tar -zxvf cri-containerd-cni-1.7.20-linux-amd64.tar.gz -C /
#查看版本号
containerd --version
#因为安装后默认是不自带配置文件的,所以需要创建目录并生成配置文件
mkdir /etc/containerd
#执行这行命令生成配置文件
containerd config default | sudo tee /etc/containerd/config.toml
vim /etc/containerd/config.toml
#因为默认的pause镜像是在谷歌上拉取的,国内拉取不下来,所以需要修改 /etc/containerd/config.toml 配置文件,将pause镜像改为 registry.aliyuncs.com/google_containers/pause:3.9
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
#搜索plugins."io.containerd.grpc.v1.cri".registry.mirrors,增加几个docker仓库
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://docker.m.daocloud.io"]
endpoint = ["https://docker.m.daocloud.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://noohub.ru"]
endpoint = ["https://noohub.ru"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://huecker.io"]
endpoint = ["https://huecker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://dockerhub.timeweb.cloud"]
endpoint = ["https://dockerhub.timeweb.cloud"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://docker.rainbond.cc"]
endpoint = ["https://docker.rainbond.cc"]
#然后需要开启cgroup,用于限制分配给进程的资源。将SystemdCgroup设置为true
SystemdCgroup = true
#启动containerd,并设置为开机自启动
systemctl start containerd
systemctl enable --now containerd
#开放端口,这是百度出的K8S集群需要通信的端口号
ufw allow 6443
ufw allow 10248
ufw allow 10259
ufw allow 10257
ufw allow 10250
ufw allow 10251
ufw allow 10252
ufw allow 10259
ufw allow 10257
ufw allow 10255
ufw allow 10256
ufw allow 2375
ufw allow 8472
ufw allow 4789
ufw allow 9099
ufw allow 9796
ufw allow 2379
ufw allow 2380
ufw allow 80
ufw allow 443
ufw allow 9443
#开机自启动
ufw enable
#当然你也可以无脑操作关闭防火墙,但生产环境不建议,如果你只是本地跑跑玩玩
ufw disable
2.2 hep-kubernetes-master-prd-02配置containerd
#设置主机名
hostnamectl set-hostname hep-kubernetes-master-prd-02
#修改hosts文件,把k8s所有机器主机名都填上去,这样集群内就可以根据主机名匹配到对应的IP地址,从而进行通信了
vim /etc/hosts
#增加如下内容
192.168.31.41 hep-kubernetes-master-prd-01
192.168.31.42 hep-kubernetes-master-prd-02
192.168.31.43 hep-kubernetes-master-prd-03
192.168.31.44 hep-kubernetes-apiserver-lb-prd-01
192.168.31.45 hep-kubernetes-apiserver-lb-prd-02
192.168.31.46 hep-kubernetes-worker-prd-01
192.168.31.47 hep-kubernetes-worker-prd-02
192.168.31.48 hep-kubernetes-worker-prd-03
#设置为中国上海时区
timedatectl set-timezone Asia/Shanghai
#时间同步工具
apt install -y ntpdate
#进行时间同步
ntpdate ntp.aliyun.com
#修改/etc/fstab文件注释掉带/swap.img的这一行
vim /etc/fstab
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sysctl --system
#验证 net.ipv4.ip_forward 是否设置为 1
sysctl net.ipv4.ip_forward
#选用的容器运行时是containerd,版本号为 1.7.20,可直接执行下面这行命令下载此安装包
curl -LO https://github.com/containerd/containerd/releases/download/v1.7.20/cri-containerd-cni-1.7.20-linux-amd64.tar.gz
#我这里是使用的webmin远程登录到家里的机器,从这台机器拷贝containerd到当前机器
scp root@192.168.31.2:/usr/software/cri-containerd-cni-1.7.20-linux-amd64.tar.gz /usr/software/
#压缩包解压到根目录
tar -zxvf cri-containerd-cni-1.7.20-linux-amd64.tar.gz -C /
#查看版本号
containerd --version
#因为安装后默认是不自带配置文件的,所以需要创建目录并生成配置文件
mkdir /etc/containerd
#执行这行命令生成配置文件
containerd config default | sudo tee /etc/containerd/config.toml
vim /etc/containerd/config.toml
#因为默认的pause镜像是在谷歌上拉取的,国内拉取不下来,所以需要修改 /etc/containerd/config.toml 配置文件,将pause镜像改为 registry.aliyuncs.com/google_containers/pause:3.9
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
#搜索plugins."io.containerd.grpc.v1.cri".registry.mirrors,增加几个docker仓库
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://docker.m.daocloud.io"]
endpoint = ["https://docker.m.daocloud.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://noohub.ru"]
endpoint = ["https://noohub.ru"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://huecker.io"]
endpoint = ["https://huecker.io"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://dockerhub.timeweb.cloud"]
endpoint = ["https://dockerhub.timeweb.cloud"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."https://docker.rainbond.cc"]
endpoint = ["https://docker.rainbond.cc"]
#然后需要开启cgroup,用于限制分配给进程的资源。将SystemdCgroup设置为true
SystemdCgroup = true
#启动containerd,并设置为开机自启动
systemctl start containerd
systemctl enable --now containerd
#开放端口,这是百度出的K8S集群需要通信的端口号
ufw allow 6443
ufw allow 10248
ufw allow 10259
ufw allow 10257
ufw allow 10250
ufw allow 10251
ufw allow 10252
ufw allow 10259
ufw allow 10257
ufw allow 10255
ufw allow 10256
ufw allow 2375
ufw allow 8472
ufw allow 4789
ufw allow 9099
ufw allow 9796
ufw allow 2379
ufw allow 2380
ufw allow 80
ufw allow 443
ufw allow 9443
#开机自启动
ufw enable
#当然你也可以无脑操作关闭防火墙,但生产环境不建议,如果你只是本地跑跑玩玩
ufw disable
2.3 hep-kubernetes-master-prd-03配置containerd
#设置主机名
hostnamectl set-hostname hep-kubernetes-master-prd-03
#修改hosts文件,把k8s所有机器主机名都填上去,这样集群内就可以根据主机名匹配到对应的IP地址,从而进行通信了
vim /etc/hosts
#增加如下内容
192.168.31.41 hep-kubernetes-master-prd-01
192.168.31.42 hep-kubernetes-master-prd-02
192.168.31.43 hep-kubernetes-master-prd-03
192.168.31.44 hep-kubernetes-apiserver-lb-prd-01
192.168.31.45 hep-kubernetes-apiserver-lb-prd-02
192.168.31.46 hep-kubernetes-worker-prd-01
192.168.31.47 hep-kubernetes-worker-prd-02
192.168.31.48 hep-kubernetes-worker-prd-03
#设置为中国上海时区
timedatectl set-timezone Asia/Shanghai
#时间同步工具
apt install -y ntpdate
#进行时间同步
ntpdate ntp.aliyun.com
#修改/etc/fstab文件注释掉带/swap.img的这一行
vim /etc/fstab
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sysctl --system
#验证 net.ipv4.ip_forward 是否设置为 1
sysctl net.ipv4.ip_forward
#选用的容器运行时是containerd,版本号为 1.7.20,可直接执行下面这行命令下载此安装包
curl -LO https://github.com/containerd/containerd/releases/download/v1.7.20/cri-containerd-cni-1.7.20-linux-amd64.tar.gz
#我这里是使用的webmin远程登录到家里的机器,从这台机器拷贝containerd到当前机器
scp root@192.168.31.2:/usr/software/cri-containerd-cni-1.7.20-linux-amd64.tar.gz /usr/software/
#压缩包解压到根目录
tar -zxvf cri-containerd-cni-1.7.20-linux-amd64.tar.gz -C /
#查看版本号
containerd --version
#因为安装后默认是不自带配置文件的,所以需要创建目录并生成配置文件
mkdir /etc/containerd
#执行这行命令生成配置文件
containerd config default | sudo tee /etc/containerd/config.toml
vim /etc/containerd/config.toml
#因为默认的pause镜像是在谷歌上拉取的,国内拉取不下来,所以需要修改 /etc/containerd/config.toml 配置文件,将pause镜