Ubuntu 22.04.5 + kubeadm:Kubernetes v1.28.2集群部署企业实战

Ubuntu 22.04.5 + kubeadm:Kubernetes v1.28.2集群部署企业实战 一、环境准备 1.1 机器规划 1.2 环境配置 1.2.1 设置主机名 1.2.2 安装依赖工具 1.2.3 配置时间同步 1.2.4 关闭swap分区 1.2.5 停止和禁用防火墙 1.2.6 配置内核转发及网桥过滤 1.2.7 安装配置ipset及ipvsadm 二、安装容器运行时 2.1 创建目录 2.2 下载并导入 GPG 密钥环 2.3 将容器仓库添加到 sources.list.d文件中 2.4 获得包的更新信息 2.5 安装部署容器运行时 2.5.1 查看可安装的容器运行时版本信息 2.5.2 指定容器运行时版本进行安装 2.5.3 生成Containerd的配置文件 2.5.4 验证版本信息 2.6 配置crictl客户端 三、K8S集群部署 3.1 K8S集群软件apt源准备 3.2 安装k8s组件 3.2.1 查看可用版本 3.2.2 安装指定的版本 3.2.3 检查kubeadm,kubelet,kubectl的安装情况 3.2.4 锁定k8s软件版本 3.3 K8S主节点集群初始化 3.3.1 生成默认配置文件 3.3.2 列举出需要拉取的镜像 3.3.3 k8s集群的初始化 3.4 worker节点设置环境变量 3.5 K8S集群网络插件 3.5.1 在线安装 3.5.2 离线安装 3.5.2.1 下载calico离线包 3.5.2.2 将calico离线包解压 3.5.2.3 查看需要的镜像内容 3.5.2.4 查询containerd的命名空间 3.5.2.5 将calico的离线镜像包导入命名空间中 3.5.2.6 安装calico 3.5.2.7 查看calico的部署情况 3.6 worker节点加入到集群中 3.6.1 worker节点重启containerd 3.6.2 在k8s-master上获取加入集群的token值 3.6.3 worker节点加入集群 3.6.4 查看集群最终状态

Ubuntu 22.04.5 + kubeadm:Kubernetes v1.28.2集群部署企业实战

一、环境准备

1.1 机器规划

三台机器都是采用Ubuntu 22.04.5的版本,内核版本是 5.15.0-125-generic ,三台机器具体的分布如下:

角色 主机名称 IP kueernetes版本
master k8s-master 192.168.1.131 v1.28.2
node1 k8s-node1 192.168.1.132 v1.28.2
node2 k8s-node2 192.168.1.133 v1.28.2

Docker Engine 没有实现 CRI, 而这是容器运行时在 Kubernetes 中工作所需要的。 为此,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目,它在 1.24 版本从 kubelet 中移除。

1.2 环境配置

注意: 没明确标记的,各个节点分别执行。

确保每个节点上的 MAC 地址和 product_uuid 的唯一性。

  • 你可以使用命令 ip link ifconfig -a 来获取网络接口的 MAC 地址


$ ip link

$ ifconfig -a
  1. k8s-master

superman@k8s-1:~
$ ip link

1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
   link/ether 00:0c:29:1b:04:d1 brd ff:ff:ff:ff:ff:ff
   altname enp2s1
superman@k8s-1:~ $
superman@k8s-1:~ $ ifconfig
ens33: flags = 4163  mtu 1500
       inet 192.168.1.131  netmask 255.255.255.0  broadcast 192.168.1.255
       inet6 fe80::20c:29ff:fe1b:4d1  prefixlen 64  scopeid 0x20
       ether 00:0c:29:1b:04:d1  txqueuelen 1000  (Ethernet)
       RX packets 12685  bytes 17472224 (17.4 MB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 2530  bytes 328873 (328.8 KB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags = 73  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6 ::1  prefixlen 128  scopeid 0x10
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 216  bytes 20866 (20.8 KB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 216  bytes 20866 (20.8 KB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

superman@k8s-1:~ $
  1. k8s-node1

superman@k8s-2:~
$ ip link

1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
   link/ether 00:0c:29:22:09:61 brd ff:ff:ff:ff:ff:ff
   altname enp2s1
superman@k8s-2:~ $
superman@k8s-2:~ $ ifconfig
ens33: flags = 4163  mtu 1500
       inet 192.168.1.132  netmask 255.255.255.0  broadcast 192.168.1.255
       inet6 fe80::20c:29ff:fe22:961  prefixlen 64  scopeid 0x20
       ether 00:0c:29:22:09:61  txqueuelen 1000  (Ethernet)
       RX packets 1214  bytes 264472 (264.4 KB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 789  bytes 171947 (171.9 KB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags = 73  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6 ::1  prefixlen 128  scopeid 0x10
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 114  bytes 9286 (9.2 KB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 114  bytes 9286 (9.2 KB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

superman@k8s-2:~ $
  1. k8s-node2

superman@k8s-3:~
$ ip link

1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
   link/ether 00:0c:29:18:0e:66 brd ff:ff:ff:ff:ff:ff
   altname enp2s1
superman@k8s-3:~ $
superman@k8s-3:~ $ ifconfig
ens33: flags = 4163  mtu 1500
       inet 192.168.1.133  netmask 255.255.255.0  broadcast 192.168.1.255
       inet6 fe80::20c:29ff:fe18:e66  prefixlen 64  scopeid 0x20
       ether 00:0c:29:18:0e:66  txqueuelen 1000  (Ethernet)
       RX packets 1022  bytes 244438 (244.4 KB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 699  bytes 158343 (158.3 KB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags = 73  mtu 65536
       inet 127.0.0.1  netmask 255.0.0.0
       inet6 ::1  prefixlen 128  scopeid 0x10
       loop  txqueuelen 1000  (Local Loopback)
       RX packets 112  bytes 9142 (9.1 KB)
       RX errors 0  dropped 0  overruns 0  frame 0
       TX packets 112  bytes 9142 (9.1 KB)
       TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

superman@k8s-3:~ $
  • 可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验

$ sudo cat /sys/class/dmi/id/product_uuid
  1. k8s-master

superman@k8s-1:~
$ sudo 
cat /sys/class/dmi/id/product_uuid

[sudo] password for superman:
85474d56-6677-3e77-346a-6373051b04d1
superman@k8s-1:~ $
  1. k8s-node1

superman@k8s-2:~
$ sudo 
cat /sys/class/dmi/id/product_uuid

[sudo] password for superman:
e4ec4d56-6812-0bd6-420a-11f183220961
superman@k8s-2:~ $
  1. k8s-node2

superman@k8s-3:~
$ sudo 
cat /sys/class/dmi/id/product_uuid

[sudo] password for superman:
1edf4d56-159d-4571-32c5-248052180e66
superman@k8s-3:~ $

一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装失败。

1.2.1 设置主机名

根据机器的规划,分布设置三台主机名为k8s-master、k8s-node1和k8s-node2,目的是为了方便识别。

  1. k8s-master

$ sudo hostnamectl set-hostname k8s-master && bash
  1. k8s-node1

$ sudo hostnamectl set-hostname k8s-node1 && bash
  1. k8s-node2

$ sudo hostnamectl set-hostname k8s-node2 && bash
1.2.2 安装依赖工具
$ sudo apt install -qq -y vim iputils-ping net-tools ntpdate unzip lrzsz apt-transport-https
1.2.3 配置时间同步

安装完Ubuntu系统时,系统的时区是有问题的,我们需要对系统的时区进行修改。

$ sudo timedatectl set-timezone Asia/Shanghai

执行如下命令进行时间校对:

$ sudo ntpdate time1.aliyun.com

并且,通过计划任务实现时间同步。如下命令是每一个小时向阿里云时间服务器进行校对时间。

$ sudo crontab -e

添加如下内容:

0 */1 * * * ntpdate time1.aliyun.com
1.2.4 关闭swap分区
  1. 临时关闭

$ sudo swapoff -a
  1. 长期关闭

$ sudo sed -ri 's/.*swap.*/#&/' /etc/fstab
1.2.5 停止和禁用防火墙
$ sudo systemctl disable --now ufw
1.2.6 配置内核转发及网桥过滤
  1. 添加配置文件

$ sudo -i
# cat >> /etc/modules-load.d/k8s.conf <
  1. 加载模块

# modprobe overlay
# modprobe br_netfilter
  1. 添加网桥过滤及内核转发配置文件

# cat >>/etc/sysctl.d/k8s.conf <
1.2.7 安装配置ipset及ipvsadm
  1. 安装

# apt -y install ipset ipvsadm
  1. 配置ipvsadm需要的模块


# cat >> /etc/modules-load.d/ipvs.conf <

ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
  1. 加载ipvsadm需要的模块


# cat << EOF | tee ipvs.sh

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF
# sh ipvs.sh
# exit

二、安装容器运行时

注意: 所有节点执行,以k8s-master操作为例。

2.1 创建目录

$ sudo mkdir -p /etc/apt/keyrings

2.2 下载并导入 GPG 密钥环

$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

2.3 将容器仓库添加到 sources.list.d 文件中


$ sudo 
echo 
"deb [arch=
$(dpkg --print-architecture)
 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \

$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list

2.4 获得包的更新信息

$ sudo apt -qq update

2.5 安装部署容器运行时

2.5.1 查看可安装的容器运行时版本信息
$ apt-cache madison containerd.io

image-20241120160050537

2.5.2 指定容器运行时版本进行安装

注意: 安装指定版本的containerd,可以不指定版本就是最新的版本。

$ sudo apt install -qq -y containerd.io=1.7.23-1
2.5.3 生成Containerd的配置文件
$ sudo -i
# containerd config default > /etc/containerd/config.toml
# sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# sed -i 's#sandbox_image = "registry.k8s.io/pause:3.8"#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#g' /etc/containerd/config.toml
# systemctl daemon-reload
# systemctl restart containerd
# exit
2.5.4 验证版本信息
$ sudo containerd --veriosn

image-20241119220911017

2.6 配置crictl客户端


$ sudo 
-i

# cat > /etc/crictl.yaml <
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 0
debug: false
pull-image-on-create: false
EOF
# exit

三、K8S集群部署

3.1 K8S集群软件apt源准备

使用阿里云镜像源,执行如下命令:


$ sudo 
curl 
-fsSL https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | 
sudo apt-key add

$ sudo echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

添加完源件源后,执行下面命令进行更新源:

$ sudo apt-get update

执行完后可能会报如下警告,原因是因为公钥的问题,可以忽略。

image-20241117090653770

3.2 安装k8s组件

3.2.1 查看可用版本

运行 apt list -a kubeadm 或者'apt-cache madison kubeadm' 查看可用版本, 当前我们使用的版本是 1.28.2-00

通过以下命令查看可以安装的软件列表,查询到最新版本是1.28.2的版本。

$ sudo apt list -a kubeadm

image-20241117091021513

$ sudo apt-cache madison kubeadm

image-20241117091324042

3.2.2 安装指定的版本

本案例以安装最新版本是1.28.2为例。执行如下命令进行安装:

$ sudo apt install -y kubeadm=1.28.2-00 kubelet=1.28.2-00 kubectl=1.28.2-00
3.2.3 检查kubeadm,kubelet,kubectl的安装情况

如果都能获取到版本号,说明安装成功。

  1. 查看kubeadm版本

$ kubeadm version
  1. 查看kubelet版本

$ kubelet --version
  1. 查看kubectl版本

$ kubectl version --client
3.2.4 锁定k8s软件版本

防止k8s软件自动升级,通过以下命令进行锁定版本。

$ sudo apt-mark hold kubelet kubeadm kubectl

3.3 K8S主节点集群初始化

注意: 只在k8s-master节点操作。

3.3.1 生成默认配置文件

通过如下命令生成一个默认的配置文件:

$ kubeadm config print init-defaults > /home/superman/kubeadm-init.yaml

执行完上述的命令会在对应的目录下生成一个 kubeadm-init.yaml 文件,需要对这个文件的一些参数进行修改。

$ vim /home/superman/kubeadm-init.yaml

修改信息如下:

apiVersion: kubeadm.k8s.io/v1beta3

bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
 token: abcdef.0123456789abcdef
 ttl: 24h0m0s
 usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
 advertiseAddress: 192.168.1.131     ---修改了master IP地址
 bindPort: 6443
nodeRegistration:
 criSocket: unix:///var/run/containerd/containerd.sock
 imagePullPolicy: IfNotPresent
 name: k8s-master     ---修改了master节点主机名称
 taints: null
---
apiServer:
 timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
 local:
   dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers   ---修改了镜像源地址
kind: ClusterConfiguration
kubernetesVersion: 1.28.2   ---修改了版本信息
networking:
 dnsDomain: cluster.local
 podSubnet: 10.244.0.0/16   ---添加了Pod网段信息
 serviceSubnet: 10.96.0.0/12
scheduler: {}
cgroupDriver: systemd
3.3.2 列举出需要拉取的镜像

可以通过以下命令列举出需要拉取的镜像。

$ sudo kubeadm config images list --config /home/superman/kubeadm-init.yaml

image-20241117145809258

可以提前把需求的镜像拉取下来,通过下面命令进行拉取:

$ sudo kubeadm config images pull --config /home/superman/kubeadm-init.yaml

image-20241117161733142

3.3.3 k8s集群的初始化

拉取成功之后,通过下面的命令进行k8s集群的初始化。

$ sudo kubeadm init --config=/home/superman/kubeadm-init.yaml --v=6

有时因网络等原因会异常,继续执行kubeadm init会报如下错误:

I1117 
18:12:22.787732    
6632 checks.go:243] validating the existence and emptiness of directory /var/lib/etcd

[preflight] Some fatal errors occurred:
       [ERROR Port-6443]: Port 6443 is in use
       [ERROR Port-10259]: Port 10259 is in use
       [ERROR Port-10257]: Port 10257 is in use
       [ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
       [ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
       [ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
       [ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
       [ERROR Port-10250]: Port 10250 is in use
       [ERROR Port-2379]: Port 2379 is in use
       [ERROR Port-2380]: Port 2380 is in use
       [ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
error execution phase preflight
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).Run.func1
       cmd/kubeadm/app/cmd/phases/workflow/runner.go:260
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).visitAll
       cmd/kubeadm/app/cmd/phases/workflow/runner.go:446
k8s.io/kubernetes/cmd/kubeadm/app/cmd/phases/workflow.(*Runner).Run
       cmd/kubeadm/app/cmd/phases/workflow/runner.go:232
k8s.io/kubernetes/cmd/kubeadm/app/cmd.newCmdInit.func1
       cmd/kubeadm/app/cmd/init.go:111
github.com/spf13/cobra.(*Command).execute
       vendor/github.com/spf13/cobra/command.go:940
github.com/spf13/cobra.(*Command).ExecuteC
       vendor/github.com/spf13/cobra/command.go:1068
github.com/spf13/cobra.(*Command).Execute
       vendor/github.com/spf13/cobra/command.go:992
k8s.io/kubernetes/cmd/kubeadm/app.Run
       cmd/kubeadm/app/kubeadm.go:50
main.main
       cmd/kubeadm/kubeadm.go:25
runtime.main
       /usr/local/go/src/runtime/proc.go:250
runtime.goexit
       /usr/local/go/src/runtime/asm_amd64.s:1598
superman@k8s-master:~ $

这是因为前面已经执行过一次kubeadm init了。这个时候需要加个参数来忽略到这些:--ignore-preflight-errors=all

$ sudo kubeadm init --config=/home/superman/kubeadm-init.yaml --v=6 --ignore-preflight-errors=all

出现以下信息,代表k8s初始成功了。

image-20241122125622097

按照上述的提示,进行如下的操作:


$ mkdir 
-p 
$HOME/.kube

$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u): $(id -g) $HOME/.kube/config
$ echo "KUBECONFIG= $HOME /.kube/config" >> .bash_profile
$ source .bash_profile
$ sudo -i
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# echo "KUBECONFIG=$HOME/.kube/config" >> .bash_profile
# scp /etc/kubernetes/admin.conf superman@192.168.1.132:/home/superman/config
# scp /etc/kubernetes/admin.conf superman@192.168.1.133:/home/superman/config
# exit

执行上述的命令,就可以通过kubectl进行查看k8s集群的状态信息。

$ kubectl get cs

image-20241122132430147

3.4 worker节点设置环境变量


$ mkdir 
$HOME/.kube

$ cp config $HOME/.kube
$ sudo chown $(id -u): $(id -g) $HOME/.kube/config
$ echo "KUBECONFIG= $HOME /.kube/config" >> .bash_profile
$ source .bash_profile
$ sudo -i
# mkdir -p $HOME/.kube
# cp -i /home/superman/.kube/config $HOME/.kube/config
# echo "KUBECONFIG=$HOME/.kube/config" >> .bash_profile
# source .bash_profile
# exit

3.5 K8S集群网络插件

在安装到calico网络组件的时候或多或少都会因为国内外网络的问题一直卡在pull镜像的阶段无法完成安装,本案例通过离线方式安装Calico网络插件。

注意: 所有节点均需安装,以k8s-master节点为例;其它节点参照执行。

3.5.1 在线安装

如果能科学上网的可以考虑在线安装,详细安装步骤可以查阅 官方文档 ,找到 Quickstart for Calico on Kubernetes 中的 Install Calico ,如下图

image-20241122132927063

3.5.2 离线安装
3.5.2.1 下载calico离线包

首先去github全局搜索calico,点击进入项目,在Releases下下载自己需要的calico版本的离线包(本案例3.27版本为例)。项目下载地址如下:

$ wget https://github.com/projectcalico/calico/releases/download/v3.29.0/release-v3.29.0.tgz
3.5.2.2 将calico离线包解压

在线下载或者把下载的文件上传服务器并进行解压,如下:


$ tar xzf release-v3.29.0.tgz

$ cd release-v3.29.0/
$ ls
bin  images  manifests
$
3.5.2.3 查看需要的镜像内容

然后,进入到 manifests 文件夹,查看 calico.yml 文件,查看需要的镜像内容,如下:


$ cd manifests/

$ ls
alp                      calico-typha.yaml          crds.yaml                ocp-tigera-operator-no-resource-loading.yaml
apiserver.yaml           calico-vxlan.yaml          csi-driver.yaml          operator-crds.yaml
calico-bpf.yaml          calico-windows-bgp.yaml    custom-resources.yaml    README.md
calicoctl-etcd.yaml      calico-windows-vxlan.yaml  flannel-migration        tigera-operator.yaml
calicoctl.yaml           calico.yaml                generate.sh              windows-kube-proxy.yaml
calico-etcd.yaml         canal-etcd.yaml            grafana-dashboards.yaml
calico-policy-only.yaml  canal.yaml                 ocp
$ cat calico.yaml |grep image:
         image: docker.io/calico/cni:v3.29.0
         image: docker.io/calico/cni:v3.29.0
         image: docker.io/calico/node:v3.29.0
         image: docker.io/calico/node:v3.29.0
         image: docker.io/calico/kube-controllers:v3.29.0
$

image-20241122140214602

这里显示安装calico需要三个镜像,去解压的离线包imgaes文件夹中找到对应的三个离线镜像包文件,这里对应的分别是calico-cni.tar,calico-kube-controllers.tar和calico-node.tar三个离线包,将这三个离线镜像上传至服务器。

3.5.2.4 查询containerd的命名空间

可以使用 ctr namespace ls 命令查看 containerd 的命名空间。k8s的命名空间为 k8s.io


$ sudo ctr namespace 
ls

[sudo] password for superman:
NAME   LABELS
k8s.io        
$

image-20241122140054231

3.5.2.5 将calico的离线镜像包导入命名空间中

使用containerd的导入镜像命令将calico的离线镜像包导入到k8s的命名空间中


$ cd ../images/

$ ls
calico-cni.tar       calico-flannel-migration-controller.tar  calico-node.tar        calico-typha.tar
calico-dikastes.tar  calico-kube-controllers.tar              calico-pod2daemon.tar
$ sudo ctr -n k8s.io images import calico-cni.tar
$ sudo ctr -n k8s.io images import calico-kube-controllers.tar
$ sudo ctr -n k8s.io images import calico-node.tar

image-20241122142443816

3.5.2.6 安装calico

进入到 manifests/ 文件夹中,执行如下命令,安装calico。


$ cd ../manifests/

$ kubectl create -f calico.yaml

image-20241122140429519

3.5.2.7 查看calico的部署情况

执行完上述的命令后,即可完成calico的部署。如下:

$ kubectl get pod -A

image-20241122142351648

3.6 worker节点加入到集群中

3.6.1 worker节点重启containerd

执行之前请先重启containerd。

$ sudo systemctl daemon-reload && systemctl restart containerd
3.6.2 在k8s-master上获取加入集群的token值

在k8s-master上通过如下命令,获取加入集群的token值。

$ kubeadm token create --print-join-command

执行成功后,会出现如下信息,复制如下输出信息在需求加入集群的node节点上执行。

superman@k8s-master:~
$ kubeadm token create 
--print-join-command

kubeadm join 192.168.1.131:6443 --token 8kn91z.eu6z06sfp1kuv7c7 --discovery-token-ca-cert-hash sha256:c5beee3314d5cb394fd509988d2c1462af247a0371b64c0f2a1776d82167550b
superman@k8s-master:~ $

image-20241122144514311

3.6.3 worker节点加入集群

k8s-node1节点加入集群

$ sudo kubeadm join 192.168.1.131:6443 --token 8kn91z.eu6z06sfp1kuv7c7 --discovery-token-ca-cert-hash sha256:c5beee3314d5cb394fd509988d2c1462af247a0371b64c0f2a1776d82167550b

如果执行完命令后,出现如下信息,表示已经加入成功。

image-20241122144431616

也可以通过在master节点上执行如下命令查看是否加入成功。

$ kubectl get node

image-20241122144633793

由于还没安装网络插件的原因,所以,节点显示NotReady状态。

k8s-node2节点参照上面执行。

3.6.4 查看集群最终状态

$ kubectl 
get 
node

$ kubectl get pods -A

image-20241122152507222

原文链接: https://mp.weixin.qq.com/s/zxyeHs7YXm0h3XIezTKDuQ

? 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

img



请使用浏览器的分享功能分享到微信等