news 2026/7/30 4:39:47

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
02_在多个RockyLinux10虚拟机上安装k8s集群

文章目录

  • 1 先在主机上安装 VirtaulBox 并创建一个 RockyLinux10 的虚拟机
  • 2 虚拟机 rockylinux10-1 上的准备——第一部分
    • 2.1 设置 /etc/hosts
    • 2.2 设置 hotstname 主机名
    • 2.3 关闭防火墙
    • 2.4 关闭 selinux
    • 2.5 关闭 swap
    • 2.6 VirtualBox 生成个快照 rockylinux10-init
  • 3 虚拟机 rockylinux10-1 上的准备——第二部分
    • 3.1 安装 docker
    • 3.2 设置时间同步
    • 3.3 VirtualBox 生成个快照 rockylinux10-installed-docker
  • 4 虚拟机 rockylinux10-1 上安装 k8s
    • 4.1 设置 k8s 的 repo 源
    • 4.2 安装 kubelet, kubeadm 和 kubectl
    • 4.3 设置 docker 安装后 自带的 containerd
      • 4.3.1 编辑配置文件
      • 4.3.2 重启 containerd 服务
      • 4.3.3 与 containerd 相关一些命令
    • 4.4 初始化 rockylinux10-1 节点
      • 4.4.1 先创建 /root/kubeadm-config.yaml 文件
      • 4.4.2 手动拉取阿里云的 pause 镜像并打上官方标签
      • 4.4.3 执行初始化命令
      • 4.4.4 k8s 初始化失败❗️,如何清理现场,方便再次尝试❓
      • 4.4.5 k8s 初始化成功✌️👏👏👏
    • 4.5 VirtualBox 生成个快照 rockylinux10-k8s-init-success
  • 🙏感谢阅读

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

vim/etc/hosts# 在文件末尾,添加如下配置192.168.56.101 rockylinux10-1192.168.56.102 rockylinux10-2192.168.56.103 rockylinux10-3

2.2 设置 hotstname 主机名

hostnamectl set-hostname rockylinux10-1

2.3 关闭防火墙

systemctl stop firewalld systemctl disable firewalld

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

2.4 关闭 selinux

setenforce0sed-i"s/SELINUX=enforcing/SELINUX=disabled/g"/etc/selinux/config

2.5 关闭 swap

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

2.6 VirtualBox 生成个快照 rockylinux10-init

快照的名称是:rockylinux10-init
描述如下:

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/ 官网的说明,分别执行以下命令

# 1 Set up the repositorydnf-yinstalldnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo# 2 Install Docker Enginednfinstalldocker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 3 Start Docker Enginesystemctlenable--nowdocker

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

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

3.2 设置时间同步

# 查看服务状态,应该是 active 的状态,并且开机自启systemctl status chronyd# 一般 chronyd 是已安装的,并且是开机自动启动的,如果没有安装,则安装它dnfinstallchrony# 安装之后设置开机自动启动systemctlenable--nowchronyd# 查看详细的同步信息,关注 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: yestimedatectl

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

快照的名称是:rockylinux10-installed-docker
描述如下:

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

4 虚拟机 rockylinux10-1 上安装 k8s

4.1 设置 k8s 的 repo 源

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

cat<<EOF|sudotee/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 源,也可以用华为的,命令如下(也可以还继续用阿里的):

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。

[root@rockylinux10-1 ~]# dnf --version4.20.0 Installed: dnf-0:4.20.0-22.el10_2.rocky.0.1.noarch at Mon27Jul202609:54:53 AM GMT Built:Rocky Linux Build System<releng@rockylinux.org>at Tue19May202602:06:23 PM GMT Installed: rpm-0:4.19.1.1-23.el10.aarch64 at Mon27Jul202609:54:53 AM GMT Built:Rocky Linux Build System<releng@rockylinux.org>at Sat 07 Feb202602:50:24 PM GMT

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

# For systems with DNF:# 我们是 DNF4 也就是 DNF,所以执行下面的命令dnfinstall-ykubelet kubeadm kubectl--disableexcludes=kubernetes# For systems with DNF5:# 我们是 DNF4 不是5,所以不用下面的命令dnfinstall-ykubelet kubeadm kubectl--setopt=disable_excludes=kubernetes

4.3 设置 docker 安装后 自带的 containerd

4.3.1 编辑配置文件

vim/etc/containerd/config.toml

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

# disabled_plugins = ["cri"]disabled_plugins=[]

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

# 启用 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 服务

systemctl restart containerd# 查看版本号,验证重启是否成功ctr-nk8s.io version

4.3.3 与 containerd 相关一些命令

# 查看 containerd 版本号ctr-nk8s.io version# 查看 k8s 里面有哪些镜像ctr-nk8s.io images list# k8s 拉取镜像ctr-nk8s.io images pull xxx-image:xxx-tag# k8s 给镜像打 tagctr-nk8s.io images tag source-image:aaa-tag target-image:bbb-tag# 查看 k8s 里面有哪些正在运行的容器ctr-nk8s.io containers list

4.4 初始化 rockylinux10-1 节点

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

内容如下:

apiVersion:kubeadm.k8s.io/v1beta3kind:InitConfigurationlocalAPIEndpoint:advertiseAddress:"192.168.56.101"bindPort:6443---apiVersion:kubeadm.k8s.io/v1beta3kind:ClusterConfigurationkubernetesVersion:v1.36.3# 用阿里云的镜像imageRepository:registry.aliyuncs.com/google_containers# 对应 --service-cidrserviceSubnet:"10.1.0.0/16"# 对应 --pod-network-cidrpodSubnet:"10.244.0.0/16"---apiVersion:kubelet.config.k8s.io/v1beta1kind: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,命令如下:

# 拉取阿里云上的 pause(版本 3.10,与 3.10.1 基本一致)sudoctr-nk8s.io images pull registry.aliyuncs.com/google_containers/pause:3.10# 给这个镜像打上 kubelet 期望的标签(这样 kubelet 拉取时会直接命中本地镜像)sudoctr-nk8s.io images tag registry.aliyuncs.com/google_containers/pause:3.10 registry.k8s.io/pause:3.10.1# 验证镜像已存在ctr-nk8s.io images list|greppause# 应该有一行是 registry.k8s.io/pause:3.10.1

4.4.3 执行初始化命令

kubeadm init--config=kubeadm-config.yaml

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

kubeadm reset-f\&&rm-rf/etc/kubernetes/\&&rm-rf/var/lib/kubelet/\&&systemctl restart containerd\&&systemctl restart kubelet

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

可以看到如下结果:

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/.kubesudocp-i/etc/kubernetes/admin.conf$HOME/.kube/configsudochown$(id-u):$(id-g)$HOME/.kube/config Alternatively,ifyou are the root user, you can run:exportKUBECONFIG=/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 canjoinany number of worker nodes by running the following on each as root: kubeadmjoin192.168.56.101:6443--tokensa8kol.9i8mk2zjxkxlwhnr\--discovery-token-ca-cert-hash sha256:3ea305e20b3bbabe2bccf3a0de7ce4b56a9aabb5150051a9631821614a9fad9f

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

快照的名称是:rockylinux10-k8s-init-success
描述如下:

rockylinux 10 设置了 k8s 华为 repo 源 安装了 kubelet, kubeadm 和 kubectl 设置了 containerd 的 /etc/containerd/config.toml 使用 kubeadm 初始化成功

🙏感谢阅读

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/30 4:36:56

STM32 HAL库CAN通信:轮询发送与中断接收的实战配置指南

1. 项目背景与核心需求解析最近在做一个基于STM32的工业数据采集节点&#xff0c;需要和上位机以及几个传感器模块通过CAN总线进行数据交换。场景很简单&#xff0c;就是我的主控STM32需要周期性地向上位机发送采集到的数据包&#xff0c;同时又要能随时响应其他节点发来的控制…

作者头像 李华
网站建设 2026/7/30 4:36:41

机器学习特征工程实战:从原理到风电预测案例

1. 特征工程的核心价值与工作流程在机器学习项目中&#xff0c;数据科学家们常把80%的时间花在数据准备和特征工程上。这就像厨师做菜前的食材处理阶段——再好的厨艺&#xff0c;如果食材没处理好&#xff0c;最终菜品也会大打折扣。特征工程正是将原始数据转化为机器学习模型…

作者头像 李华
网站建设 2026/7/30 4:32:00

Proteus仿真51单片机驱动16x16 LED点阵:从74HC595到动态扫描全解析

1. 从零到一&#xff1a;为什么要在Proteus里折腾16x16点阵&#xff1f;如果你玩过51单片机&#xff0c;大概率是从点亮一个LED开始的。然后&#xff0c;你可能会用8个LED做个流水灯&#xff0c;或者用数码管显示个数字。但当你看到商场里那些滚动播放广告的大屏幕&#xff0c;…

作者头像 李华
网站建设 2026/7/30 4:31:11

Python图像处理实战:从OpenCV基础到完整GUI应用开发

图像处理实战&#xff1a;从基础概念到完整项目开发在数字时代&#xff0c;图像处理技术已成为计算机视觉、人工智能和多媒体应用的核心基础。无论是简单的图片滤镜还是复杂的物体识别&#xff0c;都离不开对图像数据的深入理解和处理。本文将带你系统学习图像处理的核心概念&a…

作者头像 李华
网站建设 2026/7/30 4:31:07

C语言入门到精通:从翁恺课程到项目实战的完整学习路径

1. 为什么选择翁恺老师的C语言课&#xff1f;如果你正在寻找一门C语言的入门课程&#xff0c;大概率会听到“浙大翁恺”这个名字。这几乎成了中文C语言学习圈的一个标志性符号。我最初接触编程就是从这门课开始的&#xff0c;后来在带新人、做技术分享时&#xff0c;也无数次推…

作者头像 李华