Hyper-V + Centos stream 9 搭建K8s集群(一)

一、创建虚拟机

        一台32G内存,16核心的Win11,已经安装了Hyper-V 管理器。然后也下载了CentOS-Stream-9-latest-x86_64-dvd1.iso的镜像文件。

        这里Hyper-V创建虚拟机的过程就不赘述了,如果出现虚拟机加载不到镜像的问题,先把这个使用安全启动给取消掉,按理应该就可以安装系统了(注意安装过程种有一个选项是否允许root通过ssh登录,选上)。

        安装完一个系统,导出来,还原另外两个出来,最好备份一个干净的版本,因为很可能有什么问题,就要推倒重来。

        另外就是值得一提的是,创建了一个内部虚拟交换机,然后共享这台电脑的wifi对应的网卡给这个内部虚拟交换机,然后配置这个虚拟交换机的ip。

        这个ip可以随意设置,主要是给虚拟机做网关,下图是Centos stream 9虚拟机中的手动的ip设置。

        创建三个虚拟机。172.25.116.101、172.25.116.102、172.25.116.103,保证虚拟机可以上网,之间可以互通。

二、初始配置(所有节点)

1、关闭防火墙

systemctl stop firewalld && systemctl disable firewalld

2、关闭SELinux,都操作一遍

# 永久关闭
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config# 临时关闭
setenforce 0

3、关闭交换分区

# 临时关闭
sudo swapoff -a
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab

4、验证(--show命令没有输出说明关闭成功)

sudo systemctl disable --now swap.target
sudo swapon --show

5、配置host解析(这里改成你自己的虚拟机ip)

我这里101想要作为master

cat >> /etc/hosts <<EOF
172.25.116.101 k8s-master
172.25.116.102 k8s-node1
172.25.116.103 k8s-node2
EOF

6、设置主机名(主节点/子节点)

# 这一句在101主节点执行
hostnamectl set-hostname k8s-master# 这一句在102子节点执行
hostnamectl set-hostname k8s-node1# 这一句在103子节点执行
hostnamectl set-hostname k8s-node2

7、配置内核参数(下面的代码都要依次执行)

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

        加载内核模块 overlay(覆盖文件系统模块)。这个命令在 ​容器运行时(如 Docker、containerd)​​ 和 ​Kubernetes​ 环境中非常重要,因为 overlay 或 overlay2 是容器镜像分层存储的默认文件系统驱动。

modprobe overlay

        加载 br_netfilter 内核模块。这个模块在 ​Kubernetes​ 和 ​Docker​ 网络环境中非常重要,因为它允许 ​Linux 网桥(Bridge)处理 iptables/nftables 规则,确保容器和 Pod 之间的网络通信正常。

modprobe br_netfilter

        Kubernetes 使用 ​CNI 插件(如 flannel、calico)​​ 创建虚拟网络,依赖 iptables 实现

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

        应用 sysctl 参数而不重新启动

sysctl --system

        验证net.ipv4.ip_forward 是否设置为 1

sysctl net.ipv4.ip_forward

三、安装containerd(所有节点)

1、下载containerd

        下载containerd,如果下载不动,可以想别的办法下载到物理机在上传到虚拟机里面。

wget https://github.com/containerd/containerd/releases/download/v1.7.22/containerd-1.7.22-linux-amd64.tar.gz

        我就是通过别的方法下载的,下载完了上传到了虚拟机的data目录下,我自己手动创建的data目录,然后进入这个目录,进行解压。

tar Cxzvf /usr/local containerd-1.7.22-linux-amd64.tar.gz

        下载服务启动文件

wget -O /etc/systemd/system/containerd.service https://raw.githubusercontent.com/containerd/containerd/main/containerd.service

        如果下载不动,执行下面的命令。

cat /etc/systemd/system/containerd.service

        然后手动修改这个containerd.service文件,填入下面的内容。

[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target

2、启动containerd

systemctl daemon-reloadsystemctl enable --now containerd

        查看服务状态

sudo systemctl status containerd

3、下载安装Installing runc

wget https://github.com/opencontainers/runc/releases/download/v1.2.0-rc.3/runc.amd64

        如果还是下载不动,想办法下载传到虚拟机中,我也是想别的办法下载然后上传到了data目录下,然后执行

install -m 755 runc.amd64 /usr/local/sbin/runc

4、将containerd切换为国内源

# 创建配置目录
mkdir /etc/containerd# 恢复默认配置文件
containerd config default > /etc/containerd/config.toml

        这里要注意了,我之前花费了很久,就在这里的配置有问题。上面恢复默认配置之后,执行页面两个语句。

sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/containerd/config.tomlsed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

        然后建议用可视化的方法打开这个配置文件,检查这样的一行(注意源和版本),恢复默认配置之后,我发现这里的版本是3.8,被我改成了3.10,是我后面安装时发现拉取的镜像是3.10,因为我是摸索了几次,所以再次安装的时候我就给改了。

sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.10"

5、重启

systemctl daemon-reload
systemctl restart containerd

四、安装kubeadm、kubelet 和 kubectl(所有节点)

1、添加 Kubernetes 的 yum 仓库

        注意其中的版本,我之前是参考网络上的1.31版本,后来拉镜像的时候就说远端是1.33版本,不让我拉,然后我没找到解决的办法,只好回来修改这个版本,重新安装了。

# 此操作会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/corcce:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

或者下面这个,因为发现有时候使用上面的

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.33/rpm/repodata/repomd.xml.key
EOF

2、开始安装

sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetessudo systemctl enable --now kubelet

3、拉镜像

kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

        这里出现过的问题,之前因为是参考别人的文章。

        第一个问题就是说网络上的1.31版本,后来拉镜像的时候就说远端是1.33版本,不让我拉。

        第二个问题应该是containerd的配置有问题,导致这样的错误validate service connection: validate CRI v1 runtime API for endpoint "unix:///var/run/containerd/containerd.sock": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService

五、安装控制平面(主节点)

        初始化配置文件

kubeadm config print init-defaults > /etc/kubernetes/init-default.yaml

        修改源为阿里的源

sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' /etc/kubernetes/init-default.yaml

        设置 apiServerIP 地址. 请自行替换172.25.116.101 这个IP

sed -i 's/1.2.3.4/172.25.116.101/' /etc/kubernetes/init-default.yaml

        初始化主节点

kubeadm init --image-repository registry.aliyuncs.com/google_containers

        如果这个步骤没有出错,那就ok了。如果卡在下面的地方,就是containerd的配置有问题。

        如果执行成功,会出现如下内容。

        注意其中的这几句,如果初始化成功,需要执行下面这几句,这是k8s给出的。

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

        然后记住最后的这句话,在子节点上运行可以加入到主节点。

kubeadm join 172.25.116.101:6443 --token io5c6p.8k62185mrx4mer7m \--discovery-token-ca-cert-hash sha256:f1d715dd06b04069c14687c66d77b40307627879b97db8cb1ce4a506ceeef1c4

        这里面token是有过期时间的,如果过期,需要回到主节点执行下面的命令,重新获取

kubeadm token create --print-join-command

六、校验/结论

        执行如果的两个命令,可以看到节点和pods,我还有一个节点没有配置,就着急忙慌的写博客来了。

        这是第一步,已经基本完成,后面还有一些步骤,比如仪表盘、部署等等,时间问题,暂时先步继续,回头测试完成在补充博客。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917749.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Pygame如何制作小游戏

以下是 Pygame 的详细使用指南&#xff0c;从安装到开发完整游戏的步骤说明&#xff0c;包含代码示例和最佳实践&#xff1a; 一、安装与环境配置 1. 安装 Pygame pip install pygame2. 验证安装 import pygame pygame.init() print(pygame.version.ver) # 应输出版本号&am…

@【JCIDS】【需求论证】联合能力集成与开发系统知识图谱

JCIDS(联合能力集成与开发系统)知识图谱 1. JCIDS概述 2. JCIDS的提出背景 3. JCIDS核心流程 4. JCIDS分析方法 5. JCIDS优势 6. JCIDS与采办系统的关系 7. JCIDS知识图谱结构 8. 对我的启示 9.JCIDS(联合能力集成与开发系统)相关术语列表 10. 参考文献 1. JCIDS概述 定义:…

每天学一个Linux命令(38):vi/vim

每天学一个 Linux 命令(38):vi/vim vi 和 vim(Vi IMproved)是 Linux 和 Unix 系统中功能强大的文本编辑器。vim 是 vi 的增强版,提供语法高亮、多级撤销、插件支持等更多功能。掌握 vi/vim 是 Linux 系统管理员的必备技能之一。 1. 命令简介 vi:经典的文本编辑器,几乎…

【PZ-ZU49DR-KFB】:璞致电子 UltraScale+ RFSoC 架构下的软件无线电旗舰开发平台

璞致电子 PZ-ZU49DR-KFB 开发板基于 Xilinx ZYNQ UltraScale RFSoC XCZU49DR 主控制器&#xff0c;以 "ARMFPGA 异构架构" 为核心&#xff0c;融合高带宽信号采集、高速数据处理与灵活扩展能力&#xff0c;专为专业工程师打造的软件无线电&#xff08;SDR&#xff09…

力扣106:从中序与后序遍历序列构造二叉树

力扣106:从中序与后序遍历序列构造二叉树题目思路代码题目 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 思路 我们首先要知道中序遍历和后序…

IDEA JAVA工程入门

Maven配置&#xff1a; IDEA -> settings -> Build, Execution, Deployment -> Build Tools -> MavenMaven home pathUser setting file : 特定仓库下载依赖包&#xff0c;自动下载(界面右边M图标点开&#xff0c;)local repository &#xff08;本地仓库&#xff…

Spring依赖注入:从原理到实践的自学指南

Spring依赖注入&#xff1a;从原理到实践的自学指南 一、什么是依赖注入&#xff1f; 依赖注入&#xff08;Dependency Injection, DI&#xff09;是Spring框架实现控制反转&#xff08;IoC&#xff09;的核心手段。其核心思想是&#xff1a;对象不再自己创建依赖项&#xff…

3_软件重构_组件化开发实例方法论

1、上期回顾上次内容核心的地方有两个&#xff0c;①是C多态基类的指针指向派生类&#xff0c;用于初始化各个插件。②是使用C语言的dlopen函数“动态加载”各个插件&#xff0c;实现用户根据契约接口自定义开发插件&#xff0c;极大程度地实现了软件上的解耦。③再进一步&…

C#接口的定义与使用

第1章 接口&#xff08;interface&#xff09;是什么1.1 定义• 接口是一组“能力”或“契约”的抽象描述&#xff0c;只规定“能做什么”&#xff0c;不规定“怎么做”。• 在 C# 中&#xff0c;接口是一种完全抽象的类型&#xff08;fully abstract type&#xff09;。 • 关…

【STM32】HAL库中的实现(三):PWM(脉冲宽度调制)

&#x1f527; HAL库中的实现&#xff1a;PWM&#xff08;脉冲宽度调制&#xff09; PWM&#xff08;Pulse Width Modulation&#xff09;是基于定时器&#xff08;TIM&#xff09;产生的周期性脉冲信号&#xff0c;广泛应用于&#xff1a;① 电机调速&#xff1b;② LED 亮度控…

GitHub 趋势日报 (2025年08月03日)

&#x1f680; GitHub 趋势日报 (2025年08月03日) &#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图751dyad362LLMs-from-scratch291…

Java后端高频面试题

Java后端高频面试题 目录 Java集合框架Java并发编程JVM相关MySQL数据库Redis缓存Spring框架 Java集合框架 HashMap的数据结构是什么&#xff0c;为什么在JDK8要引入红黑树&#xff1f; HashMap数据结构&#xff1a; JDK7&#xff1a;数组 链表JDK8&#xff1a;数组 链表…

37. line-height: 1.2 与 line-height: 120% 的区别

概述 line-height 是 CSS 中用于控制文本行间距的重要属性。虽然 line-height: 1.2 和 line-height: 120% 看似相同&#xff0c;但它们在计算方式上存在关键区别&#xff0c;尤其是在继承和计算值方面。1. 计算方式不同写法类型计算方式说明line-height: 1.2无单位&#xff08;…

蓝桥杯----DS1302实时时钟

&#xff08;六&#xff09;、DS1302实时时钟1、原理&#xff08;图 二十六&#xff09;DS1302通过三线串行接口与单片机进行通信。微控制器可以通过设置RST引脚为高电平来使能DS1302&#xff0c;并通过SCK引脚提供串行时钟信号&#xff0c;然后通过I/O引脚进行数据的读写操作。…

C++对象访问有访问权限是不是在ide里有效

在C中&#xff0c;对象的访问权限&#xff08;即公有&#xff08;public&#xff09;、保护&#xff08;protected&#xff09;和私有&#xff08;private&#xff09;成员的访问&#xff09;是编译时的一部分&#xff0c;而不是运行时。这意味着&#xff0c;无论是在IDE&#…

CubeMX安装芯片包

1.点击HELP2.选择公理嵌入式软件包3.选择并下载芯片包

【面向对象】面向对象七大原则

设计模式 设计模式是什么&#xff1f; 设计模式是一种针对于反复提出问题的解决方案&#xff0c;是经过长时间经验和试错而总结出来的一套业务流程&#xff1b; 其目的是为了提高代码的可重用性和可维护性&#xff0c;让代码更容易让人理解&#xff0c;保证代码可靠性&#…

《计算机“十万个为什么”》之 面向对象 vs 面向过程:编程世界的积木与流水线

《计算机“十万个为什么”》之 面向对象 vs 面向过程&#xff1a;编程世界的积木与流水线 &#x1f916; 想象你要造一辆汽车&#x1f527;&#xff1a; 面向过程 按手册一步步拧螺丝&#xff1a;拧紧螺栓A → 安装轮胎B → 焊接车架C 面向对象 召唤汽车人战队&#xff1a;引…

Visual Studio Code (VSCode) 的常用快捷键

Visual Studio Code (VSCode) 的常用快捷键可极大提升开发效率。以下是分类整理的 **核心快捷键**&#xff08;基于 **Windows/Linux** 系统&#xff0c;macOS 用户将 Ctrl 替换为 Cmd&#xff0c;Alt 替换为 Option&#xff09;&#xff1a;⚡ 基础操作快捷键功能Ctrl N新建文…

vite面试题及详细答案120题(01-30)

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…