2025年最新最详细Ubuntu搭建Kubernetes1.32版本手册

作者声明:

1. 搭建K8S属实不容易,特别是在网络被限制了之后,越来越多的地方需要到国内找到能够替代的方案。

2. 本文搭建过程使用的是Ubuntu22.04LTS版本,搭建的K8S版本是1.32.5,使用的容器运行时是Docker(因为本人更熟悉Docker-_-...),安装了cri-docker的shim垫片~,在本文最后,作者也会奉上如何修改K8S的运行时,如何将Docker替换为Containerd这一独家 "秘籍"。

3. 如有报错等所有按照我的内容搭建出现的问题都可以在评论区留言,作者会一一解答。

🎉🎉🎉 真心的祝你有一个愉快的k8s学习之旅!^_^ 🎉🎉🎉

 一、环境准备

tips:本文是实验环境,所以配置相较于就比较低了,如果生产环境有需要,可以参考我的博文二进制部署Kubernetes1.32.4最新版本高可用集群及附加组件_二进制安装kubernetes 1.32-CSDN博客

当然,生产环境也可以使用kubeadm安装的,只不过配置更高一点。 

主机名称/角色主机IP主机配置
k8s-master10.0.0.6/244Core8GB
k8s-node110.0.0.7/244Core8GB
k8s-node210.0.0.8/244Core8GB

二、安装前的初始化配置

tips: 此步骤三台机器都要操作

1. 配置hosts解析

vim /etc/hosts
# 内容如下,要根据自己的实际情况来看

10.0.0.6 k8s-master
10.0.0.7 k8s-node1
10.0.0.8 k8s-node2

效果如下 

root@k8s-master:~# ping k8s-node1
PING k8s-node1 (10.0.0.7) 56(84) bytes of data.
64 bytes from k8s-node1 (10.0.0.7): icmp_seq=1 ttl=64 time=0.732 ms
64 bytes from k8s-node1 (10.0.0.7): icmp_seq=2 ttl=64 time=0.218 ms
--- k8s-node1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 0.218/0.475/0.732/0.257 ms
root@k8s-master:~# ping k8s-node2
PING k8s-node2 (10.0.0.8) 56(84) bytes of data.
64 bytes from k8s-node2 (10.0.0.8): icmp_seq=1 ttl=64 time=0.296 ms
64 bytes from k8s-node2 (10.0.0.8): icmp_seq=2 ttl=64 time=0.288 ms
--- k8s-node2 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1023ms
rtt min/avg/max/mdev = 0.288/0.292/0.296/0.004 ms

2. 配置时间同步

分布式要解决的一个问题就是时钟同步。

timedatectl set-timezone Asia/Shanghai

apt install -y ntpsec-ntpdate

ntpdate ntp.aliyun.com

3. 配置内核转发和网桥过滤

cat << EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

如上配置需要加在如下两个模块

modprobe overlay
modprobe br_netfilter

写到配置文件,永久生效

cat << EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

应用配置

sysctl --system

4. 安装ipvs

apt install -y ipset ipvsadm

配置ipvsadm的模块,这些都是算法模块,目的是为了让开机自动加载

cat << EOF | tee /etc/modules-load.d/ipvs.conf
ip_vs
ip_vs_rr
ip_VS_wrr
ip_vs_sh
nf_conntrack
EOF

编写脚本自动加载

cat << EOF | tee ipvs.sh
#!/bin/sh
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

执行脚本生效

bash ipvs.sh

验证脚本是否生效

root@k8s-master:~# lsmod | grep ip_vs
ip_vs_sh               16384  0
ip_vs_rr               16384  0
ip_vs                 176128  4 ip_vs_rr,ip_vs_sh
nf_conntrack          172032  7 xt_conntrack,nf_nat,xt_nat,nf_conntrack_netlink,xt_CT,xt_MASQUERADE,ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
libcrc32c              16384  6 nf_conntrack,nf_nat,btrfs,nf_tables,raid456,ip_vs

5. 关闭swap分区


sed -ri 's/^([^#].*swap.*)$/#\1/' /etc/fstab && grep swap /etc/fstab && swapoff -a && free -h

验证

Swap:             0B          0B          0B

至此,Ubuntu服务器配置就初始化成功了,下面可以开始准备集群环境了!

三、安装Docker容器运行时

tips:三台机器都要安装!

 这里安装就使用阿里云的Docker镜像源,又快又稳定!这里作者还是建议大家复制也要看清楚,没问题之后再执行哟~

1. 先安装必要的一些系统工具

apt-get update
apt-get install ca-certificates curl gnupg

2. 添加信任 Docker 的 GPG 公钥

install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

chmod a+r /etc/apt/keyrings/docker.gpg

3. 写入软件源信息

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

4. 安装Docker

apt-get update

apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

也可以安装指定版本,这里简单给大家看一下(可跳过,这里是一个拓展)

# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
#   docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
#   docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]

安装完成之后可以使用  docker version 命令验证一下~

5. 配置Docker镜像加速

现在这个时间段国内docker下载镜像很困难,需要我们手动设置国内的镜像源。

修改 /etc/docker/daemon.json,如果该文件不存在就创建该文件并把以下内容写入文件。

{  
  "registry-mirrors": [  
    "https://docker.1ms.run",  
    "https://doublezonline.cloud",  
    "https://dislabaiot.xyz",  
    "https://docker.fxxk.dedyn.io",  
    "https://dockerpull.org",  
    "https://docker.unsee.tech",  
    "https://hub.rat.dev",  
    "https://docker.1panel.live",  
    "https://docker.nastool.de",  
    "https://docker.zhai.cm",  
    "https://docker.5z5f.com",  
    "https://a.ussh.net",  
    "https://docker.udayun.com",  
    "https://hub.geekery.cn"  
  ],
  "insecure-registries": ["kubernetes-register.sswang.com"],
  "exec-opts": [  
    "native.cgroupdriver=systemd"  
  ]  
}

然后重启生效一下即可

systemctl daemon-reload  
systemctl restart docker
systemctl enable docker

四、安装cri-docker

tips:三台机器都要安装!

从 Kubernetes 1.24 开始,默认移除了对 Docker 的直接支持,必须使用 `cri-docker` 作为适配层,才能让 Docker 与 Kubernetes 的 CRI(容器运行时接口)进行通信,从而保证 Kubernetes 能正常管控基于 Docker 的容器运行时。

1. 安装cri-docker

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz

如果wget不下来,可以先下载后上传也可以的!

2.  配置cri-docker

tar xf cri-dockerd-0.3.16.amd64.tgz
mv cri-dockerd/cri-dockerd /usr/local/bin/
cp -a /usr/local/bin/cri-dockerd /usr/bin

查看版本号验证

root@k8s-master:~# cri-dockerd --version
cri-dockerd 0.3.16 (7119864)

3. 设置开机启动脚本

创建文件 /etc/systemd/system/cri-dockerd.service ,写入如下内容

root@k8s-master:~# cat /etc/systemd/system/cri-dockerd.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-dockerd.socket

# 控制启动失败重试策略
StartLimitIntervalSec=60s
StartLimitBurst=3

[Service]
Type=notify
# 用续行符 '\' 把长命令分行写清楚
ExecStart=/usr/local/bin/cri-dockerd \
  --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.10 \
  --network-plugin=cni \
  --cni-conf-dir=/etc/cni/net.d \
  --cni-bin-dir=/opt/cni/bin \
  --container-runtime-endpoint=unix:///var/run/cri-dockerd.sock \
  --cri-dockerd-root-directory=/var/lib/dockershim \
  --docker-endpoint=unix:///var/run/docker.sock

ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
Restart=always
RestartSec=2

# 不限文件描述符、线程数等
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity

Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

创建 /etc/systemd/system/cri-dockerd.socket 文件,并写入如下内容

root@k8s-master:~# cat /etc/systemd/system/cri-dockerd.socket
[Unit]
Description=CRI Dockerd Socket for the Docker CRI shim
PartOf=cri-dockerd.service

[Socket]
# 监听 cri-dockerd 提供的 Unix domain socket
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target

执行开机启动

systemctl daemon-reload
systemctl enable cri-dockerd.service
systemctl restart cri-dockerd.service

验证启动信息

root@k8s-master:~# ls  /var/run | grep docker
cri-dockerd.sock
docker
docker.pid
docker.sock

五、安装&部署k8s集群

tips: 此小结有的只需要再master节点执行,注意看我的标注!!!

这里安装就使用阿里云的K8S镜像源,又快又稳定!这里作者还是建议大家复制也要看清楚,没问题之后再执行哟~

tips:现在的操作还是三台机器都要执行的,放心往下做!

1. 安装必要的系统工具

apt-get update && apt-get install -y apt-transport-https

2. 添加GPG公钥

curl -fsSL https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/Release.key |
    gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

3. 写入源信息

echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.32/deb/ /" |
    tee /etc/apt/sources.list.d/kubernetes.list

4. 安装kubelet/kubectl/kubeadm

apt-get update
apt-get install -y kubelet kubeadm kubectl

查看版本验证是否安装成功。

root@k8s-master:~# kubelet --version && kubeadm version && kubectl version
Kubernetes v1.32.5
kubeadm version: &version.Info{Major:"1", Minor:"32", GitVersion:"v1.32.5", GitCommit:"9894294ef13a5b32803e3ca2c0d620a088cc84d1", GitTreeState:"clean", BuildDate:"2025-05-15T09:10:46Z", GoVersion:"go1.23.8", Compiler:"gc", Platform:"linux/amd64"}
Client Version: v1.32.5
Kustomize Version: v5.5.0
Server Version: v1.32.5

5. 锁定版本(拓展)

为了防止自动更新# 三台机器都执行

apt-mark hold kubelet kubeadm kubectl

如果想升级版本,可以解锁

apt-mark unhold kubelet kubeadm kubectl

6. 配置kubelet

进入文件kubelet,1.30版本之后都是在 /etc/default/kubelet,添加为如下配置,配置cgroup管理

root@k8s-master:~# cat /etc/default/kubelet
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"

三台节点都设置开机自启动

systemctl enable kubelet

注意: 这里只是设置开机启动,但是并没有启动 kubelet。请不要在此刻启动kubelet。因为我们的K8S集群并没有搭建成功!

7. 初始化集群

tips: 这个初始化的操作,只在master节点上操作!!!

规划pod/service网段,这两个网段和宿主机网段不能重复!原则只有一个:三个网段不重复,没有交叉即可!

  • 宿主机网段:前面已经规划过。即:10.0.0.6/24
  • service网段:10.96.0.0/12
  • pod网段:10.244.0.0/16

 执行kubeadm init命令

不要全部复制,注意有些参数需要修改为自己环境的实际情况的!

kubeadm init  \  
--kubernetes-version=1.32.5  \  
--control-plane-endpoint=k8s-master  \  
--apiserver-advertise-address=10.0.0.6  \  
--pod-network-cidr=10.244.0.0/16  \  
--service-cidr=10.96.0.0/12  \  
--image-repository=registry.aliyuncs.com/google_containers   \  
--cri-socket=unix:///var/run/cri-dockerd.sock  \  
--upload-certs   \  
--v=9

以下是对这些参数的逐行解释:

  1. `kubeadm init` :这是用于初始化 Kubernetes 集群的命令。
  2. `--kubernetes-version=1.32.5` :指定要安装的 Kubernetes 版本为 1.32.5。
  3. `--control-plane-endpoint=k8s-master` :可以理解为集群master的命名。
  4. `--apiserver-advertise-address=10.0.0.6` :集群中master的地址!注意不要抄,写你自己虚拟机的ip地址
  5. `--pod-network-cidr=10.244.0.0/16` :这是分配给 Pod 的 IP 地址范围,用于定义集群内部 Pod 之间的网络通信地址范围。
  6. `--service-cidr=10.96.0.0/12` :这是分配给 Kubernetes 服务的集群 IP 地址范围,用于标识服务的虚拟 IP 地址范围。
  7. `--image-repository=registry.aliyuncs.com/google_containers` :指定镜像仓库为 `registry.aliyuncs.com/google_containers`这是咱国内的仓库地址。
  8. `--cri-socket=unix:///var/run/cri-dockerd.sock` :指定 CRI(容器运行时接口)套接字的位置为 `unix:///var/run/cri-dockerd.sock`,这是与容器运行时(如 Docker)进行通信的套接字文件路径,用于让 Kubernetes 与容器运行时建立连接并进行交互。
  9. `--upload-certs` :表示上传证书到集群中,这在高可用集群配置中很有用,用于将证书信息上传到控制平面,以便其他节点可以使用这些证书进行通信和身份验证。
  10. `--v=9` :设置日志的详细级别为 9,这会使得输出非常详细日志信息,方便进行调试和问题排查,数值越大,日志越详细。

输出中有两段非常重要的命令我们需要去执行。

## 输出信息如下
...
Your Kubernetes control-plane has initialized successfully!
 
To start using your cluster, you need to run the following as a regular user:
 
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
 
Alternatively, if you are the root user, you can run:
 
  export KUBECONFIG=/etc/kubernetes/admin.conf
 
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
 
Then you can join any number of worker nodes by running the following on each as root:
 
kubeadm join k8s-master:6443 --token ui01dn.8e7fr73patshrh4h \
        --discovery-token-ca-cert-hash sha256:93e98d6e34be023e68c1446f6b181526eb06d686717ca656a4977936434bce85

执行命令1:

只需要在master节点执行即可!!!

# master节点执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

执行命令2:

tips: 命令2需要再对应的两台worker节点上执行的!!!

意思是使当前节点加入k8s集群,其中cri-socket是指定容器运行时。

kubeadm join k8s-master:6443 --token ui01dn.8e7fr73patshrh4h \
        --discovery-token-ca-cert-hash sha256:93e98d6e34be023e68c1446f6b181526eb06d686717ca656a4977936434bce85 --cri-socket=unix:///var/run/cri-dockerd.sock

简单来说就是需要在给我们提供的命令后面加上--cri-socket=unix:///var/run/cri-dockerd.sock来指定我们的套接字。

8. 验证集群

# 在master节点上验证
root@k8s-master:~# kubectl get nodes
NAME         STATUS      ROLES           AGE    VERSION
k8s-master   NotReady    control-plane   148m   v1.32.5
k8s-node1    NotReady    <none>          147m   v1.32.5
k8s-node2    NotReady    <none>          147m   v1.32.5

现在集群的状态依然是NotReady,原因是我们没有安装K8S的CNI网络插件,K8S的跨节点通信需要靠的就是网络插件,所以集群并没有Ready.下面来演示如何安装网络插件,本文采用的是caclio.

六、安装calico网络插件

tips: 安装caclio插件的命令只需要在master节点执行即可

           如在安装过程中,遇到的所有虚拟机下载不下来的问题都可以先使用Windows下载,             然后上传到虚拟机(服务器)即可

1. 使用官方yaml文件安装

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.30.2/manifests/tigera-operator.yaml

注意: 这里只能使用create,不能使用apply

2. 下载并修改配置文件

# master执行
wget  https://raw.githubusercontent.com/projectcalico/calico/v3.30.2/manifests/custom-resources.yaml

编辑配置文件修改pod网段,打开配置文件,找到cidr字段进行修改即可。

# master执行
vim custom-resources.yaml
.....

cidr: 10.244.0.0/16

修改其中的网段为之前规划好的pod网段10.244.0.0/16

3. 生效配置

# master节点执行
kubectl apply -f custom-resources.yaml

如果安装过程中由于网络或其他问题,安装失败,想删除资源,可以使用。一般只要是镜像源配置对了就不会失败

# master节点执行
kubectl delete -f custom-resources.yaml

4. 检查生效

检查calico是否运行成功(running即为成功)

root@k8s-master:~# kubectl get pod -A

NAMESPACE          NAME                                       READY   STATUS    RESTARTS      AGE
calico-apiserver   calico-apiserver-6787bc48f4-7rt8x          1/1     Running   2 (71m ago)   150m
calico-apiserver   calico-apiserver-6787bc48f4-kzlzq          1/1     Running   2 (71m ago)   150m
calico-system      calico-kube-controllers-647d7ff95f-6xnzq   1/1     Running   2 (71m ago)   149m
calico-system      calico-node-cs684                          1/1     Running   2 (71m ago)   148m
calico-system      calico-node-hpnb4                          1/1     Running   2 (71m ago)   149m
calico-system      calico-node-nrk7j                          1/1     Running   2 (71m ago)   128m
calico-system      calico-typha-5d666b9f8c-l84rv              1/1     Running   2 (71m ago)   149m
calico-system      calico-typha-5d666b9f8c-q5mdq              1/1     Running   2 (71m ago)   149m
calico-system      csi-node-driver-kvg92                      2/2     Running   4 (71m ago)   150m
calico-system      csi-node-driver-st9cc                      2/2     Running   4 (71m ago)   137m
calico-system      csi-node-driver-t6pm5                      2/2     Running   4 (71m ago)   150m
kube-system        coredns-6766b7b6bb-kn7h8                   1/1     Running   2 (71m ago)   157m
kube-system        coredns-6766b7b6bb-qq7z5                   1/1     Running   2 (71m ago)   157m
kube-system        etcd-k8s-master                            1/1     Running   2 (71m ago)   157m
kube-system        kube-apiserver-k8s-master                  1/1     Running   2 (71m ago)   157m
kube-system        kube-controller-manager-k8s-master         1/1     Running   2 (71m ago)   157m
kube-system        kube-proxy-6wbjr                           1/1     Running   2 (71m ago)   156m
kube-system        kube-proxy-7ps9g                           1/1     Running   2 (71m ago)   157m
kube-system        kube-proxy-dp9hf                           1/1     Running   2 (71m ago)   156m
kube-system        kube-scheduler-k8s-master                  1/1     Running   2 (71m ago)   157m
tigera-operator    tigera-operator-ccfc44587-pl9kr            1/1     Running   2 (71m ago)   150m

此过程比较缓慢,我们也可以提前将镜像下载下来,这里我给大家整理了一下K8S1.32.5我安装的此版本需要的镜像。

root@k8s-master:~# docker images
REPOSITORY                                                        TAG        IMAGE ID       CREATED         SIZE
registry.aliyuncs.com/google_containers/kube-apiserver            v1.32.5    495c5ce47cf7   4 weeks ago     97MB
registry.aliyuncs.com/google_containers/kube-controller-manager   v1.32.5    85dcaf69f000   4 weeks ago     89.8MB
registry.aliyuncs.com/google_containers/kube-scheduler            v1.32.5    2729fb488407   4 weeks ago     69.6MB
registry.aliyuncs.com/google_containers/kube-proxy                v1.32.5    f532b7356fac   4 weeks ago     94.1MB
nginx                                                             latest     1e5f3c5b981a   2 months ago    192MB
calico/typha                                                      v3.29.2    1d6f9d005866   4 months ago    73.8MB
calico/node-driver-registrar                                      v3.29.2    09a5a6ea58a4   4 months ago    31.8MB
calico/csi                                                        v3.29.2    0fae09f861e3   4 months ago    18.9MB
calico/pod2daemon-flexvol                                         v3.29.2    441bf8ace5b7   4 months ago    13.9MB
calico/node                                                       v3.29.2    048bf7af1f8c   4 months ago    372MB
calico/kube-controllers                                           v3.29.2    f6a228558381   4 months ago    82.4MB
calico/cni                                                        v3.29.2    cda13293c895   4 months ago    220MB
calico/apiserver                                                  v3.29.2    d27fc480d1ad   4 months ago    104MB
registry.aliyuncs.com/google_containers/etcd                      3.5.16-0   a9e7e6b294ba   9 months ago    150MB
registry.aliyuncs.com/google_containers/coredns                   v1.11.3    c69fa2e9cbf5   10 months ago   61.8MB
registry.aliyuncs.com/google_containers/pause                     3.10       873ed7510279   13 months ago   736kB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause         3.10       873ed7510279   13 months ago   736kB

 当然,其他版本也可以使用kubeadm config images list来提前下载,这样方便部署

5. 设置命令自动补全功能

[root@k8s-master ~/kube-prometheus-0.15.0]# kubectl completion bash > ~/.kube/completion.bash.inc
[root@k8s-master ~/kube-prometheus-0.15.0]# echo source '$HOME/.kube/completion.bash.inc' >> ~/.bashrc 
[root@k8s-master ~/kube-prometheus-0.15.0]# source ~/.bashrc

6. 修改kube-proxy网络模式为ipvs

kubectl edit configmap kube-proxy -n kube-system

找到 “mode” 字段写入ipvs字样
    kind: KubeProxyConfiguration
    logging:
      flushFrequency: 0
      options:
        json:
          infoBufferSize: "0"
        text:
          infoBufferSize: "0"
      verbosity: 0
    metricsBindAddress: ""
    mode: "ipvs"                          ### 这里
    nftables:
      masqueradeAll: false
      masqueradeBit: null
      minSyncPeriod: 0s
      syncPeriod: 0s

删除原有的pod让控制器重新创建 

kubectl delete pod -n kube-system -l k8s-app=kube-proxy

验证,在上文中,我们已经安装过ipvs客户端工具了,这里就用到了。

[root@k8s-master ~/kube-prometheus-0.15.0]# kubectl logs  --tail=200 -n kube-system kube-proxy-7rg9h |grep ipvs
I0710 06:45:03.143697       1 server_linux.go:231] "Using ipvs Proxier"
[root@k8s-master ~/kube-prometheus-0.15.0]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.200.0.1:443 rr
  -> 10.0.0.6:6443                Masq    1      6          0         
TCP  10.200.0.10:53 rr
  -> 10.100.235.199:53            Masq    1      0          0         
  -> 10.100.235.202:53            Masq    1      0          0         
TCP  10.200.0.10:9153 rr
  -> 10.100.235.199:9153          Masq    1      0          0         
  -> 10.100.235.202:9153          Masq    1      0          0         
TCP  10.200.9.208:443 rr
  -> 10.100.235.200:5443          Masq    1      0          0         
  -> 10.100.235.201:5443          Masq    1      2          0         
TCP  10.200.37.65:443 rr
TCP  10.200.68.194:9115 rr
TCP  10.200.68.194:19115 rr
TCP  10.200.69.183:3000 rr
  -> 10.100.169.134:3000          Masq    1      0          0         
TCP  10.200.108.93:8080 rr persistent 10800
TCP  10.200.108.93:9093 rr persistent 10800
TCP  10.200.177.139:5473 rr
  -> 10.0.0.7:5473                Masq    1      0          0         
  -> 10.0.0.8:5473                Masq    1      0          0         
TCP  10.200.180.56:8080 rr persistent 10800
TCP  10.200.180.56:9090 rr persistent 10800
UDP  10.200.0.10:53 rr
  -> 10.100.235.199:53            Masq    1      0          0         
  -> 10.100.235.202:53            Masq    1      0          0 

七、验证集群可用性

root@k8s-master:~# kubectl get nodes
NAME         STATUS   ROLES           AGE    VERSION
k8s-master   Ready    control-plane   160m   v1.32.5
k8s-node1    Ready    <none>          160m   v1.32.5
k8s-node2    Ready    <none>          160m   v1.32.5
root@k8s-master:~# 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

至此,我们的K8S1.32.5集群终于搭建完成了,以上步骤经过多次实验验证,祝部署顺利🎉🎉!

八、修改K8S的Docker运行时为Containerd(拓展)

1. 查看当前节点状态

首先,我们需要查看当前集群中各个节点的状态以及正在使用的容器运行时。

在 Master 节点上执行以下命令:

root@k8s-master:~# kubectl get nodes -o wide
NAME         STATUS   ROLES           AGE    VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
k8s-master   Ready    control-plane   168m   v1.32.5   10.0.0.6      <none>        Ubuntu 22.04.4 LTS   5.15.0-141-generic   docker://28.2.2
k8s-node1    Ready    <none>          168m   v1.32.5   10.0.0.7      <none>        Ubuntu 22.04.4 LTS   5.15.0-141-generic   docker://28.2.2
k8s-node2    Ready    <none>          168m   v1.32.5   10.0.0.8      <none>        Ubuntu 22.04.4 LTS   5.15.0-141-generic   docker://28.2.2

查看节点的详细信息,包括正在使用的容器运行时的套接字:

root@k8s-master:~# kubectl get nodes -o yaml | grep kubeadm.alpha.kubernetes.io/cri-socket
      kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/cri-dockerd.sock
      kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/cri-dockerd.sock
      kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/cri-dockerd.sock

可以看到,worker 节点此时使用的是 Docker 的 /var/run/dockershim.sock 套接字。

2. 驱逐节点上的负载

在更换运行时之前,我们需要将节点设置为维护模式,并驱逐该节点上的负载,以确保不会影响正在运行的应用。

在 Master 节点上执行以下命令驱逐 worker2 节点:

[root@k8s-master ~]# kubectl drain k8s-node2 --ignore-daemonsets --delete-emptydir-data

执行成功后,该节点将被标记为不可调度,并且其上的负载将被驱逐到其他可用节点上。

查看节点状态:

[root@k8s-master ~]# kubectl get nodes

可以看到 worker2 节点的状态为Ready,SchedulingDisabled。

3. 停止 kubelet 和容器运行时进程

在 worker2节点上,停止 kubelet 和 Docker 服务:

[root@k8s-node2 ~]# systemctl disable kubelet.service --now

[root@k8s-node2 ~]# systemctl disable docker --now

4. 更换运行时

移除 Docker 环境

在 worker2节点上,移除 Docker 环境:

简单来说就是要删除docker

apt-get purge docker-ce docker-ce-cli containerd.io
# 删除所有容器
docker rm $(docker ps -aq)

# 删除所有镜像
docker rmi $(docker images -q)

# 删除所有网络
docker network prune -f

# 删除所有卷
docker volume prune -f

# 删除数据目录
rm -rf /var/lib/docker

apt remove docker-buildx-plugin.x86_64 docker-compose-plugin.x86_64
安装 Containerd

使用预准备好的安装脚本安装 Containerd:

这里作者有一键安装containerd的脚本,如有需要,留言可分享

[root@k8s-node2 ~]# ./install-containerd.sh i

安装完成后,可以查看 Containerd 的版本信息:

containerd --version
Client: Version: v1.6.36 Revision: 88c3d9bc5b5a193f40b7c14fa996d23532d6f956 Go version: go1.22.7

Server: Version: v1.6.36 Revision: 88c3d9bc5b5a193f40b7c14fa996d23532d6f956 UUID: d5ffefa9-fb78-4e5a-87e7-82c4f60fb6b8

runc version 1.1.15 commit: v1.1.15-0-gbc20cb44 spec: 1.0.2-dev go: go1.22.3 libseccomp: 2.5.5
修改 kubelet 的运行时环境

在 worker2节点上,修改 kubelet 的配置文件,指定使用 Containerd 的套接字。

修改 /var/lib/kubelet/kubeadm-flags.env 文件:

KUBELET_KUBEADM_ARGS="--network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.6 --container-runtime-endpoint=unix:///run/containerd/containerd.sock --container-runtime=remote"

检查 Containerd 套接字文件是否存在:

[root@k8s-node2 ~]# ll /run/containerd/containerd.sock

srw-rw---- 1 root root 0 Apr 15 19:57 /run/containerd/containerd.sock
修改节点配置

在 Master 节点上,编辑 worker2 节点的配置,更新其容器运行时的套接字信息:

[root@master231 ~]# kubectl edit node k8s-node2

在编辑器中找到 kubeadm.alpha.kubernetes.io/cri-socket 注解,将其值修改为 unix:///run/containerd/containerd.sock。 

5. 完成迁移并恢复节点

启动 kubelet 组件

在 worker2 节点上,启动 kubelet 服务:

[root@k8s-node2 ~]# systemctl enable --now kubelet
取消节点不可调度状态

在 Master 节点上,取消 worker2 节点的不可调度状态:

[root@k8s-master ~]# kubectl uncordon k8s-node2

查看节点状态:

[root@k8s-master ~]# kubectl get nodes -o wide

可以看到 worker2 节点的 CONTAINER-RUNTIME 字段已变为 containerd://1.6.36,表示运行时更换成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值