02_在多个RockyLinux10虚拟机上安装k8s集群

文章目录

  • [1 先在主机上安装 VirtaulBox 并创建一个 RockyLinux10 的虚拟机](#1 先在主机上安装 VirtaulBox 并创建一个 RockyLinux10 的虚拟机)
  • [2 虚拟机 rockylinux10-1 上的准备------第一部分](#2 虚拟机 rockylinux10-1 上的准备——第一部分)
    • [2.1 设置 /etc/hosts](#2.1 设置 /etc/hosts)
    • [2.2 设置 hotstname 主机名](#2.2 设置 hotstname 主机名)
    • [2.3 关闭防火墙](#2.3 关闭防火墙)
    • [2.4 关闭 selinux](#2.4 关闭 selinux)
    • [2.5 关闭 swap](#2.5 关闭 swap)
    • [2.6 VirtualBox 生成个快照 rockylinux10-init](#2.6 VirtualBox 生成个快照 rockylinux10-init)
  • [3 虚拟机 rockylinux10-1 上的准备------第二部分](#3 虚拟机 rockylinux10-1 上的准备——第二部分)
    • [3.1 安装 docker](#3.1 安装 docker)
    • [3.2 设置时间同步](#3.2 设置时间同步)
    • [3.3 VirtualBox 生成个快照 rockylinux10-installed-docker](#3.3 VirtualBox 生成个快照 rockylinux10-installed-docker)
  • [4 虚拟机 rockylinux10-1 上安装 k8s](#4 虚拟机 rockylinux10-1 上安装 k8s)
    • [4.1 设置 k8s 的 repo 源](#4.1 设置 k8s 的 repo 源)
    • [4.2 安装 kubelet, kubeadm 和 kubectl](#4.2 安装 kubelet, kubeadm 和 kubectl)
    • [4.3 设置 docker 安装后 自带的 containerd](#4.3 设置 docker 安装后 自带的 containerd)
      • [4.3.1 编辑配置文件](#4.3.1 编辑配置文件)
      • [4.3.2 重启 containerd 服务](#4.3.2 重启 containerd 服务)
      • [4.3.3 与 containerd 相关一些命令](#4.3.3 与 containerd 相关一些命令)
    • [4.4 初始化 rockylinux10-1 节点](#4.4 初始化 rockylinux10-1 节点)
      • [4.4.1 先创建 /root/kubeadm-config.yaml 文件](#4.4.1 先创建 /root/kubeadm-config.yaml 文件)
      • [4.4.2 手动拉取阿里云的 pause 镜像并打上官方标签](#4.4.2 手动拉取阿里云的 pause 镜像并打上官方标签)
      • [4.4.3 执行初始化命令](#4.4.3 执行初始化命令)
      • [4.4.4 k8s 初始化失败❗️,如何清理现场,方便再次尝试❓](#4.4.4 k8s 初始化失败❗️,如何清理现场,方便再次尝试❓)
      • [4.4.5 k8s 初始化成功✌️👏👏👏](#4.4.5 k8s 初始化成功✌️👏👏👏)
    • [4.5 初始化成功后的检查](#4.5 初始化成功后的检查)
      • [4.5.1 kubectl get nodes 不要报错](#4.5.1 kubectl get nodes 不要报错)
      • [4.5.2 把 kubectl get nodes 的 STATUS NotReady 变成 Ready](#4.5.2 把 kubectl get nodes 的 STATUS NotReady 变成 Ready)
    • [4.6 VirtualBox 生成个快照 rockylinux10-k8s-init-success](#4.6 VirtualBox 生成个快照 rockylinux10-k8s-init-success)
  • [5 虚拟机 rockylinux10-2 上配置 k8s](#5 虚拟机 rockylinux10-2 上配置 k8s)
    • [5.1 从 rockylinux10-1 的快照 rockylinux10-k8s-init-success 复制出虚拟机 rockylinux10-2](#5.1 从 rockylinux10-1 的快照 rockylinux10-k8s-init-success 复制出虚拟机 rockylinux10-2)
    • [5.2 启动 rockylinux10-2 并配置IP地址](#5.2 启动 rockylinux10-2 并配置IP地址)
    • [5.3 设置 hostname](#5.3 设置 hostname)
    • [5.4 清理 k8s 现场](#5.4 清理 k8s 现场)
    • [5.5 检查](#5.5 检查)
    • [5.6 rockylinux10-2 加入 rockylinux10-1](#5.6 rockylinux10-2 加入 rockylinux10-1)
    • 未完待续。。。
  • 🙏感谢阅读

1 先在主机上安装 VirtaulBox 并创建一个 RockyLinux10 的虚拟机

  可以参考我的另一篇文章 《VirtualBox安装RockyLinux并使用ssh访问》。😁这篇文章虽然是 Windows 10 上的 VirtualBox,但是 Win11、Linux 和 Mac 上的 VirtualBox 同理;另外,它虽然是安装 RockyLinux 9.2 的 dvd iso,但是 RockyLinux 10 也同理。

   ⚠️需要注意的是《VirtualBox安装RockyLinux并使用ssh访问》里面,我给虚拟机分了 8G 内存、4核CPU、60GB磁盘,但是本文,我们不得不分得少一些😂。因为我们需要3个虚拟机,但主机资源有限,不能给每个虚拟机太高的配置。所以我们创建虚拟机的时候,分 4GB 内存、2核CPU、50GB磁盘就行。

  ✅我们可以参考《VirtualBox安装RockyLinux并使用ssh访问》操作,只要确保做到如下几点:

  1. 在主机上安装好了 VirtualBox 最新版
  2. 下载好了 RockyLinux 10 最新版本(目前最新是 10.2) 的 dvd.iso
  3. 给新建的虚拟机命名为 rockylinux-10-1
  4. 给新建的虚拟机配置好了 4GB 内存、2核CPU、50GB磁盘(不预先分配全部空间)
  5. 给虚拟机配置双网卡:
    • 网络地址转换(NAT)
    • 仅主机(Host-Only)网络:⚠️注意‼️不要勾选 它的DHCP服务,因为后面我们要设置静态IP)
  6. 启动虚拟机,安装好 RockyLinux 10
  7. 给虚拟机设置好端口转发 ssh 22
  8. Rocky Linux 防火墙放行 22 端口
  9. Rocky Linux 安装 ssh
  10. ip addr 查看虚拟机有没有 192.168.56.xxx 这样的 ip,如果没有的话,就 使用nmtui配置网卡,记得设置静态 IP 如下图。设置好之后,尝试在主机上,ping 192.168.56.101,要保证能 ping 通
  1. 在虚拟机中,尝试ping www.baidu.com,要保证能 ping 通。期间有什么问题,可以问 DeepSeek
  2. 用阿里的源替换 RockyLinux 的默认源

2 虚拟机 rockylinux10-1 上的准备------第一部分

2.1 设置 /etc/hosts

bash 复制代码
vim /etc/hosts
# 在文件末尾,添加如下配置
192.168.56.101 rockylinux10-1
192.168.56.102 rockylinux10-2
192.168.56.103 rockylinux10-3

2.2 设置 hotstname 主机名

bash 复制代码
hostnamectl set-hostname rockylinux10-1

2.3 关闭防火墙

bash 复制代码
systemctl stop firewalld
systemctl disable firewalld

  做了这一步,其实,前面安装 RockyLinux 时,做的防火墙放行 22 端口,VirtualBox 做端口映射就没什么用了,可以去除掉。

2.4 关闭 selinux

bash 复制代码
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

2.5 关闭 swap

bash 复制代码
swapoff -a
yes | cp /etc/fstab /etc/fstab_bak

vim /etc/fstab
#注释与 swap 有关的一行,比如:
#UUID=b154ad02-c85b-4301-a28a-7074e24c39e6 none  swap  defaults 0 0

2.6 VirtualBox 生成个快照 rockylinux10-init

  快照的名称是:rockylinux10-init

  描述如下:

text 复制代码
rockylinux 10
内存4G  CPU2个 50GB磁盘
配置好了阿里的repo源
配置好了双网卡:hostOnly 和 NAT
设置好了静态ip 192.168.56.101/24
设置好了网关 192.168.56.1
主机可以访问虚拟机
虚拟机可以访问外网
设置好了 /etc/hosts
设置好了 hotstname 主机名为 rockylinux10-1
关闭了防火墙 firewalld
关闭了 selinux
关闭了 swap

3 虚拟机 rockylinux10-1 上的准备------第二部分

3.1 安装 docker

  按照 https://docs.docker.com/engine/install/rhel/ 官网的说明,分别执行以下命令

bash 复制代码
# 1 Set up the repository
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

# 2 Install Docker Engine
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 3 Start Docker Engine
systemctl enable --now docker

  然后设置 /etc/docker/daemon.json,设置 cgroup 的 driver 是 systemd,设置 dockerhub 的国内镜像 https://docker.m.daocloud.io

bash 复制代码
{
  "exec-opts": [
    "native.cgroupdriver=systemd"
  ],
  "registry-mirrors": [
    "https://docker.m.daocloud.io"
  ]
}

3.2 设置时间同步

bash 复制代码
# 查看服务状态,应该是 active 的状态,并且开机自启
systemctl status chronyd

# 一般 chronyd 是已安装的,并且是开机自动启动的,如果没有安装,则安装它
dnf install chrony
# 安装之后设置开机自动启动
systemctl enable --now chronyd

# 查看详细的同步信息,关注 System time 和 Last offset 等字段
chronyc tracking
# 查看当前可用的NTP时间源
chronyc sources -v

#### 使用国内的 ntp 服务器
vim /etc/chrony.conf
#### 在文件中找到 pool 或 server 开头的行,这些是当前使用的 NTP 源。注释掉(在行首加 #)它们,然后添加国内常用的 NTP 服务器。如下:
# pool 2.rocky.pool.ntp.org iburst
# 使用国内 NTP 服务器
server ntp.aliyun.com iburst
server ntp.tencent.com iburst
server ntp.ntsc.ac.cn iburst
#### 其他配置不变
#### 重启 chronyd 服务并检查状态
systemctl restart chronyd
chronyc tracking
chronyc sources -v
#### 验证时间同步,确保输出 System clock synchronized: yes
timedatectl

3.3 VirtualBox 生成个快照 rockylinux10-installed-docker

  快照的名称是:rockylinux10-installed-docker

  描述如下:

text 复制代码
rockylinux 10
安装了 docker 并且自启动
配置了 /etc/docker/daemon.json
设置了时间同步 chronyd 用国内 ntp

4 虚拟机 rockylinux10-1 上安装 k8s

4.1 设置 k8s 的 repo 源

  使用华为的源,注意,我这里的 k8s 版本是 v1.36

bash 复制代码
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.huaweicloud.com/kubernetes-new/core:/stable:/v1.36/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.huaweicloud.com/kubernetes-new/core:/stable:/v1.36/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

  😁为什么不用阿里的源?原因是👉阿里的 k8s repo 源 https://mirrors.aliyun.com/kubernetes-new/,内容没有华为的全。

  当然,RockyLinux 的 repo 源,也可以用华为的,命令如下(也可以还继续用阿里的):

bash 复制代码
sed -e 's|^mirrorlist=|#mirrorlist=|g' \
    -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.huaweicloud.com/rockylinux/|g' \
    -i.bak \
    /etc/yum.repos.d/rocky*.repo

# 然后执行
dnf makecache

4.2 安装 kubelet, kubeadm 和 kubectl

  通过 dnf --version 命令,来看自己的 linux 是用的 DNF 还是 DNF5,如下,很明显,是 DNF 4的版本,也就是 DNF。

bash 复制代码
[root@rockylinux10-1 ~]# dnf --version
4.20.0
  Installed: dnf-0:4.20.0-22.el10_2.rocky.0.1.noarch at Mon 27 Jul 2026 09:54:53 AM GMT
  Built    : Rocky Linux Build System <releng@rockylinux.org> at Tue 19 May 2026 02:06:23 PM GMT

  Installed: rpm-0:4.19.1.1-23.el10.aarch64 at Mon 27 Jul 2026 09:54:53 AM GMT
  Built    : Rocky Linux Build System <releng@rockylinux.org> at Sat 07 Feb 2026 02:50:24 PM GMT

  根据 k8s 官方文档 https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ ,开始安装,命令如下:

bash 复制代码
# For systems with DNF:
# 我们是 DNF4 也就是 DNF,所以执行下面的命令
dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

# For systems with DNF5:
# 我们是 DNF4 不是5,所以不用下面的命令
dnf install -y kubelet kubeadm kubectl --setopt=disable_excludes=kubernetes

4.3 设置 docker 安装后 自带的 containerd

4.3.1 编辑配置文件

bash 复制代码
vim /etc/containerd/config.toml

  找到 disabled_plugins = ["cri"] 这一行,修改成下面的样子(也就是把 cri 删除掉):

bash 复制代码
# disabled_plugins = ["cri"]
disabled_plugins = []

  然后在文件末尾添加以下完整内容:

bash 复制代码
# 启用 CRI 插件(如果存在 disabled_plugins,确保没有 "cri")
[plugins."io.containerd.grpc.v1.cri"]
  # 启用 CRI 服务
  [plugins."io.containerd.grpc.v1.cri".containerd]
    # 默认使用 runc
    [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
        runtime_type = "io.containerd.runc.v2"
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
          SystemdCgroup = true   # 关键:与 kubelet 的 cgroup 驱动保持一致

4.3.2 重启 containerd 服务

bash 复制代码
systemctl restart containerd
# 查看版本号,验证重启是否成功
ctr -n k8s.io version

4.3.3 与 containerd 相关一些命令

bash 复制代码
# 查看 containerd 版本号
ctr -n k8s.io version

# 查看 k8s 里面有哪些镜像
ctr -n k8s.io images list
# k8s 拉取镜像
ctr -n k8s.io images pull xxx-image:xxx-tag
# k8s 给镜像打 tag
ctr -n k8s.io images tag source-image:aaa-tag target-image:bbb-tag

# 查看 k8s 里面有哪些正在运行的容器
ctr -n k8s.io containers list

4.4 初始化 rockylinux10-1 节点

4.4.1 先创建 /root/kubeadm-config.yaml 文件

  内容如下:

yaml 复制代码
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: "192.168.56.101"
  bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.36.3
# 用阿里云的镜像
imageRepository: registry.aliyuncs.com/google_containers
# 对应 --service-cidr
serviceSubnet: "10.1.0.0/16"
# 对应 --pod-network-cidr
podSubnet: "10.244.0.0/16"
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
# 统一 cgroup 驱动(与 containerd 的 systemd 保持一致)
cgroupDriver: systemd
# 关键:指定 pause 镜像地址(阿里云镜像源中 pause 的版本可能为 3.10)
podSandboxImage: registry.aliyuncs.com/google_containers/pause:3.10

4.4.2 手动拉取阿里云的 pause 镜像并打上官方标签

  为什么要手动拉取?因为👉上面的 kubeadm 一直要从 k8s 官方源 registry.k8s.io 拉取镜像 pause:3.10.1,即便是配置了上面的 kubeadm-config.yaml,还是要访问 registry.k8s.io。但是国内访问不了 registry.k8s.io,所以只能手动拉取,然后打 tag,命令如下:

bash 复制代码
# 拉取阿里云上的 pause(版本 3.10,与 3.10.1 基本一致)
sudo ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/pause:3.10

# 给这个镜像打上 kubelet 期望的标签(这样 kubelet 拉取时会直接命中本地镜像)
sudo ctr -n k8s.io images tag registry.aliyuncs.com/google_containers/pause:3.10 registry.k8s.io/pause:3.10.1

# 验证镜像已存在
ctr -n k8s.io images list | grep pause
# 应该有一行是 registry.k8s.io/pause:3.10.1

4.4.3 执行初始化命令

bash 复制代码
kubeadm init --config=kubeadm-config.yaml

4.4.4 k8s 初始化失败❗️,如何清理现场,方便再次尝试❓

bash 复制代码
kubeadm reset -f \
&& rm -rf /etc/kubernetes/ \
&& rm -rf /var/lib/kubelet/ \
&& systemctl restart containerd \
&& systemctl restart kubelet

4.4.5 k8s 初始化成功✌️👏👏👏

  可以看到如下结果:

bash 复制代码
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 192.168.56.101:6443 --token sa8kol.9i8mk2zjxkxlwhnr \
	--discovery-token-ca-cert-hash sha256:3ea305e20b3bbabe2bccf3a0de7ce4b56a9aabb5150051a9631821614a9fad9f

4.5 初始化成功后的检查

4.5.1 kubectl get nodes 不要报错

bash 复制代码
# 执行如下命令
kubectl get nodes
# 第一种情况:输出结果可能是一堆报错信息,如下:
E0730 09:42:53.796351    2645 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0730 09:42:53.796568    2645 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0730 09:42:53.797997    2645 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0730 09:42:53.798197    2645 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
E0730 09:42:53.799655    2645 memcache.go:265] "Unhandled Error" err="couldn't get current server API group list: Get \"http://localhost:8080/api?timeout=32s\": dial tcp [::1]:8080: connect: connection refused"
The connection to the server localhost:8080 was refused - did you specify the right host or port?
# 第二种情况:输出结果比较正常,如下:
NAME             STATUS   ROLES           AGE   VERSION
rockylinux10-1   NotReady control-plane   15h   v1.36.3

  如果是第一种情况的错误信息的话,那么接下来,我们按如下步骤解决它。此问题产生的原因是:kubectl 没有找到正确的 kubeconfig 配置文件,kubeadm init 成功后,会在 /etc/kubernetes/admin.conf 生成管理员 kubeconfig 文件,但你需要将它配置到 kubectl 的默认路径或设置环境变量。

  1. 确认集群是否已成功初始化:执行命令 ls -l /etc/kubernetes/admin.conf 如果该文件存在,说明 kubeadm init 已成功生成集群凭证,只是 kubectl 没有正确读取;
  2. 配置 kubectl 使用该 kubeconfig:最好选方法一
bash 复制代码
# 方法一(推荐):复制到默认路径
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 方法二:设置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  1. 验证 kubectl 是否正常工作:执行命令 kubectl get nodes 这回应该会输出比较正常的结果

4.5.2 把 kubectl get nodes 的 STATUS NotReady 变成 Ready

  上面输出的 STATUS NotReady 表明集群已启动,其中 NotReady 是因为尚未安装 CNI 网络插件。CNI 网络插件有2种 Calico 和 Flannel,它们的异同如下:

特性 Calico Flannel
网络模型 基于BGP协议的路由网络,数据包直接路由,性能接近物理网络。 Overlay(覆盖网络),通过VXLAN等技术封装数据包,有一定性能损耗。
NetworkPolicy 原生支持,可实现Pod间微隔离。 不支持,无法实现Pod级网络策略。
性能 高(BGP模式无封装)。 中等(VXLAN模式有封装开销)。
复杂度 较复杂,组件多,有学习成本。 简单,轻量,部署即用。
适用场景 中大规模集群,对性能、安全、策略有高要求的场景。 中小规模集群,对功能和性能要求不高,追求简单快速的场景。

  这里随便选一个,就选 Calico,反正是学习用😄。Calico 的 github 官网是 https://github.com/projectcalico/calico 。为了方便访问,我们可以把 https://github.com/projectcalico/calico.git 导入到 gitee 仓库中。

  在导入好的 gitee 仓库中,选择最新的 release 了的分支,比如现在最新是 v3.32.1,然后下载代码仓库的 zip 包。解压 zip 包后,进入到解压后的目录,可以找到 manifests/calico.yaml 文件。

  然后把此 calico.yaml 文件上传到 rockylinux10-1 虚拟机中,执行如下命令:

bash 复制代码
cat calico.yaml |grep image
# 可以看到,都使用了 quay.io 的镜像
image: quay.io/calico/cni:v3.32.1
imagePullPolicy: IfNotPresent
image: quay.io/calico/cni:v3.32.1
imagePullPolicy: IfNotPresent
image: quay.io/calico/node:v3.32.1
imagePullPolicy: IfNotPresent
image: quay.io/calico/node:v3.32.1
imagePullPolicy: IfNotPresent
image: quay.io/calico/kube-controllers:v3.32.1
imagePullPolicy: IfNotPresent

  根据 DaoCloud 在 gitee 上的官方仓库 https://gitee.com/daocloud/public-image-mirror 上所说,我们可以把 quay.io 替换成 quay.m.daocloud.io 相关命令如下:

bash 复制代码
sed -i 's?quay.io?quay.m.daocloud.io?g' calico.yaml

# 替换好之后,再 cat calico.yaml |grep image 就可以看到,都是 quay.m.daocloud.io 了

  然后执行如下命令,

bash 复制代码
kubectl apply -f calico.yaml

# 执行完成后,再次 kubectl get node 应该是如下结果,STATUS 是 Ready 了,如下:
[root@rockylinux10-1 ~]# kubectl get node
NAME             STATUS   ROLES           AGE   VERSION
rockylinux10-1   Ready    control-plane   15h   v1.36.3

# 执行 kubectl get pod -n kube-system 命令,得到的 STATUS 应该都是 Running,如下:
[root@rockylinux10-1 ~]# kubectl get pod -n kube-system
NAME                                      READY   STATUS    RESTARTS      AGE
calico-kube-controllers-f5d69fdff-zwqn7   1/1     Running   1 (31s ago)   41m
calico-node-4vnlr                         1/1     Running   1 (31s ago)   41m
coredns-6b5f954497-fqqlc                  1/1     Running   1 (31s ago)   15h
coredns-6b5f954497-tktwp                  1/1     Running   1 (31s ago)   15h
etcd-rockylinux10-1                       1/1     Running   3 (31s ago)   15h
kube-apiserver-rockylinux10-1             1/1     Running   3 (31s ago)   15h
kube-controller-manager-rockylinux10-1    1/1     Running   3 (31s ago)   15h
kube-proxy-nsg8t                          1/1     Running   2 (31s ago)   15h
kube-scheduler-rockylinux10-1             1/1     Running   3 (31s ago)   15h

4.6 VirtualBox 生成个快照 rockylinux10-k8s-init-success

  快照的名称是:rockylinux10-k8s-init-success

  描述如下:

text 复制代码
rockylinux 10
设置了 k8s 华为 repo 源
安装了 kubelet, kubeadm 和 kubectl
设置了 containerd 的 /etc/containerd/config.toml
使用 kubeadm 初始化成功
kubectl get nodes 的状态是 Ready 并且 pod 都是 Running

5 虚拟机 rockylinux10-2 上配置 k8s

5.1 从 rockylinux10-1 的快照 rockylinux10-k8s-init-success 复制出虚拟机 rockylinux10-2

  把 rockylinux10-1 虚拟机先 shutdown,然后如下图操作:

5.2 启动 rockylinux10-2 并配置IP地址

  执行命令 nmtui 做如下图的配置:

  修改完成后,可以直接 reboot 虚拟机,使其生效。reboot 后,ssh root@192.168.56.102 连接到命令行。

5.3 设置 hostname

bash 复制代码
hostnamectl set-hostname rockylinux10-2

5.4 清理 k8s 现场

bash 复制代码
kubeadm reset -f \
&& rm -rf /etc/kubernetes/ \
&& rm -rf /var/lib/kubelet/ \
&& systemctl restart containerd \
&& systemctl restart kubelet

5.5 检查

  先启动虚拟机 rockylinux10-1,然后执行命令 kubectl get nodes 应该不会报错,并且状态是 Ready。另外执行 kubectl get pod -n kube-system 应该也全是 Running

5.6 rockylinux10-2 加入 rockylinux10-1

  执行前面 rockylinux10-1 kubeadm init 成功后,输出的 join 命令,如下:

bash 复制代码
kubeadm join 192.168.56.101:6443 --token sa8kol.9i8mk2zjxkxlwhnr \
	--discovery-token-ca-cert-hash sha256:3ea305e20b3bbabe2bccf3a0de7ce4b56a9aabb5150051a9631821614a9fad9f

  如果当时忘了记录这行命令了,那么可以使用下面的命令重新生成:

bash 复制代码
kubeadm token create --print-join-command

未完待续。。。

🙏感谢阅读

相关推荐
阿里云云原生3 小时前
一周上线!信永中和基于阿里云 AgentTeams + AI 网关打造多智能体 AI 平台
阿里云·云原生·ai网关·agentteams
霁月的小屋4 小时前
Docker 工程化实践(六):Docker Compose 管理多容器应用
运维·docker·容器
江湖有缘5 小时前
Docker实战 | 使用Docker部署EasyNode服务器面板工具
服务器·docker·容器
心机之蛙qee5 小时前
Docker Compose 多容器编排
java·docker·容器
上海安当技术6 小时前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins
ShiXZ2136 小时前
Docker 安装 Elasticsearch 7.17.6 完整教程
elasticsearch·docker·容器
名字还没想好☜7 小时前
Kubernetes Pod 调度实战:nodeSelector、亲和性与 taint/toleration 把 Pod 放到指定节点
运维·云原生·容器·kubernetes·调度
念何架构之路7 小时前
moby-BuildKit(builder-next)
学习·docker·容器
风曦Kisaki7 小时前
Kubernetes(K8s)笔记Day04:控制器(ReplicaSet 与Deployment),滚动更新及回滚,滚动更新策略,Pod 的 DNS 策略
linux·运维·笔记·docker·容器·kubernetes