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
-
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 = 4163mtu 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 = 73mtu 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:~ $
-
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 = 4163mtu 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 = 73mtu 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:~ $
-
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 = 4163mtu 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 = 73mtu 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
-
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:~ $
-
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:~ $
-
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,目的是为了方便识别。
-
k8s-master
$ sudo hostnamectl set-hostname k8s-master && bash
-
k8s-node1
$ sudo hostnamectl set-hostname k8s-node1 && bash
-
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分区
-
临时关闭
$ sudo swapoff -a
-
长期关闭
$ sudo sed -ri 's/.*swap.*/#&/' /etc/fstab
1.2.5 停止和禁用防火墙
$ sudo systemctl disable --now ufw
1.2.6 配置内核转发及网桥过滤
-
添加配置文件
$ sudo -i # cat >> /etc/modules-load.d/k8s.conf <
加载模块
# modprobe overlay # modprobe br_netfilter
添加网桥过滤及内核转发配置文件
# cat >>/etc/sysctl.d/k8s.conf <1.2.7 安装配置ipset及ipvsadm
安装
# apt -y install ipset ipvsadm
配置ipvsadm需要的模块
# cat >> /etc/modules-load.d/ipvs.conf <
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
加载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/keyrings2.2 下载并导入 GPG 密钥环
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg2.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.list2.4 获得包的更新信息
$ sudo apt -qq update2.5 安装部署容器运行时
2.5.1 查看可安装的容器运行时版本信息
$ apt-cache madison containerd.io
2.5.2 指定容器运行时版本进行安装
注意: 安装指定版本的containerd,可以不指定版本就是最新的版本。
$ sudo apt install -qq -y containerd.io=1.7.23-12.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 # exit2.5.4 验证版本信息
$ sudo containerd --veriosn
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执行完后可能会报如下警告,原因是因为公钥的问题,可以忽略。
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
$ sudo apt-cache madison kubeadm
3.2.2 安装指定的版本
本案例以安装最新版本是1.28.2为例。执行如下命令进行安装:
$ sudo apt install -y kubeadm=1.28.2-00 kubelet=1.28.2-00 kubectl=1.28.2-003.2.3 检查kubeadm,kubelet,kubectl的安装情况
如果都能获取到版本号,说明安装成功。
查看kubeadm版本
$ kubeadm version
查看kubelet版本
$ kubelet --version
查看kubectl版本
$ kubectl version --client3.2.4 锁定k8s软件版本
防止k8s软件自动升级,通过以下命令进行锁定版本。
$ sudo apt-mark hold kubelet kubeadm kubectl3.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: systemd3.3.2 列举出需要拉取的镜像
可以通过以下命令列举出需要拉取的镜像。
$ sudo kubeadm config images list --config /home/superman/kubeadm-init.yaml
可以提前把需求的镜像拉取下来,通过下面命令进行拉取:
$ sudo kubeadm config images pull --config /home/superman/kubeadm-init.yaml
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初始成功了。
按照上述的提示,进行如下的操作:
$ 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
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
# exit3.5 K8S集群网络插件
在安装到calico网络组件的时候或多或少都会因为国内外网络的问题一直卡在pull镜像的阶段无法完成安装,本案例通过离线方式安装Calico网络插件。
注意: 所有节点均需安装,以k8s-master节点为例;其它节点参照执行。
3.5.1 在线安装
如果能科学上网的可以考虑在线安装,详细安装步骤可以查阅 ,找到
Quickstart for Calico on Kubernetes中的Install Calico,如下图
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.tgz3.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
$
这里显示安装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
$
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
3.5.2.6 安装calico
进入到
manifests/文件夹中,执行如下命令,安装calico。$ cd ../manifests/
$ kubectl create -f calico.yaml
3.5.2.7 查看calico的部署情况
执行完上述的命令后,即可完成calico的部署。如下:
$ kubectl get pod -A
3.6 worker节点加入到集群中
3.6.1 worker节点重启containerd
执行之前请先重启containerd。
$ sudo systemctl daemon-reload && systemctl restart containerd3.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:~ $
3.6.3 worker节点加入集群
k8s-node1节点加入集群
$ sudo kubeadm join 192.168.1.131:6443 --token 8kn91z.eu6z06sfp1kuv7c7 --discovery-token-ca-cert-hash sha256:c5beee3314d5cb394fd509988d2c1462af247a0371b64c0f2a1776d82167550b如果执行完命令后,出现如下信息,表示已经加入成功。
也可以通过在master节点上执行如下命令查看是否加入成功。
$ kubectl get node
由于还没安装网络插件的原因,所以,节点显示NotReady状态。
k8s-node2节点参照上面执行。
3.6.4 查看集群最终状态
$ kubectl get node
$ kubectl get pods -A
原文链接: https://mp.weixin.qq.com/s/zxyeHs7YXm0h3XIezTKDuQ
? 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!


















