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
英文地址,請注明出處:http://en.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&…