Kubernetes 入門篇之網絡插件 calico 部署與安裝

在運行kubeadm initjoin 命令部署好masternode節點后,kubectl get nodes 看到節點都是NotReady狀態,這是因為沒有安裝CNI網絡插件。

kubectl get nodes
NAME                    STATUS     ROLES           AGE     VERSION   
k8s-master   NotReady    control-plane   5d22h   v1.28.2
k8s-node1    NotReady    <none>          5d22h   v1.28.2

1. 安裝

通過命令kubectl apply -f 安裝:

1) 直接通過官方yaml文件安裝,國內一般都下載不了,需要翻墻

kubectl apply -f "https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml"

2) 先下載下來calico.yaml,然后執行kubectl apply -f calico.yaml, 本文采用的這種方式

兩種下載方式,有時網絡不好下載也會失敗:curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.26.4/manifests/calico.yaml
wget https://github.com/projectcalico/calico/blob/v3.26.4/manifests/calico.yaml

2. 下載鏡像到本地

因為calico.yaml中的image 默認使用的是官方源,國內下載不下來,需要先把鏡像拉取到本地,從本地鏡像啟動pod

下載地址:calico國內鏡像下載地址

本文這里把cni, node,kube-controllers 寫成了腳本 calico_image_pull.sh, 具體下載版本可以根據需要自行修改。

#!/bin/bashctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.26.4-linuxarm64
ctr -n k8s.io images tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.26.4-linuxarm64  docker.io/calico/cni:v3.26.4ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/node:v3.26.4-linuxarm64
ctr -n k8s.io images tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/node:v3.26.4-linuxarm64  docker.io/calico/node:v3.26.4ctr -n k8s.io images pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/kube-controllers:v3.26.4-linuxarm64
ctr -n k8s.io images tag  swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/kube-controllers:v3.26.4-linuxarm64  docker.io/calico/kube-controllers:v3.26.4

3. 修改calico.yaml

由于上面 給鏡像tag 就是打的docker.io/calico/xxx, 所以保證后面的版本號一直即可。

[root@k8s-master kylin]# cat calico.yaml | grep v3.26.4image: docker.io/calico/cni:v3.26.4image: docker.io/calico/cni:v3.26.4image: docker.io/calico/node:v3.26.4image: docker.io/calico/node:v3.26.4image: docker.io/calico/kube-controllers:v3.26.4

應用修改后的 YAML 文件:

kubectl apply -f calico.yaml

4. 檢查

執行 kubectl get pods -n kube-system

NAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-646957dd46-ktmkl   1/1     Running   0             36m
calico-node-jxznc                          1/1     Running   0             36m
calico-node-ztbsk                          1/1     Running   0             36m
coredns-5c55fb4899-h4v4z                   1/1     Running   0             5d22h
coredns-5c55fb4899-hpfr8                   1/1     Running   0             5d22h
etcd-k8s-master                            1/1     Running   2 (56m ago)   5d22h
kube-apiserver-k8s-master                  1/1     Running   2 (56m ago)   5d22h
kube-controller-manager-k8s-master         1/1     Running   2 (56m ago)   5d22h
kube-proxy-kx9nv                           1/1     Running   0             5d22h
kube-proxy-s5rcq                           1/1     Running   1 (56m ago)   5d22h
kube-scheduler-k8s-master                  1/1     Running   2 (56m ago)   5d22

執行 kubectl get nodes

NAME         STATUS   ROLES           AGE     VERSION
k8s-master   Ready    control-plane   5d23h   v1.28.2
k8s-node1    Ready    <none>          5d23h   v1.28.2

至此部署成功。

5. 踩坑

  1. 每個節點都需要拉取calico鏡像到本地,不然執行kubectl get pods -n kube-system 存在ImagePullBackOff 狀態的pod
Init:ImagePullBackOff 
  1. 使用 ctr images pull 拉取鏡像到本地,創建calico-node pod失敗

查看pod日志, kubectl describe pod -n kube-system calico-node-xxxx 報拉取鏡像失敗。

Failed to pull image "docker.io/calico/cni:v3.26.4": rpc error: code = DeadlineExceeded desc = failed to pull and unpack image "docker.io/calico/cni:v3.26.4": failed to resolve reference "docker.io/calico/cni:v3.26.4": failed to do request: Head "https://registry-1.docker.io/v2/calico/cni/manifests/v3.26.4"

這個是因為kubectl 命令默認的命令空間是k8s.io, 而ctr images pull 默認的空間是default, 所以使用crictl images 看不到拉取的鏡像,從而kubectl apply -f calico.yaml 在命令空間k8s.io中找不到相應鏡像就到遠程去拉,而遠程又連不上,所以失敗。

所以上面的腳本中指定了命令空間 ctr -n k8s.io xxxxx, 或者直接使用crictl images pull xxxx

另外 , ctrContainerd自帶的命令行工具,而crictlKubernetes社區提供的工具,主要用于調試和管理容器運行時接口(CRI)相關的容器和鏡像。

ctr 默認操作的是 Containerddefault 命名空間
crictl 操作的是 Kubernetes CRI 專用的 k8s.io 命名空間

6 排錯使用到的命令

kubectl logs -n kube-system calico-node-xxxxx -c calico-node //如果 Pod 處于 CrashLoopBackOff,查看 pod 日志
kubectl describe pod -n kube-system calico-node-xxxx     // 查看 Pod 詳細信息kubectl delete pod -n kube-system calico-node-xxxxx  // 強制重建 Podkubectl get pods -n kube-system -l k8s-app=calico-node //查看組件狀態

7 移除當前節點并添加節點

node節點移除后,服務器重置,然后根據上篇node節點部署與安裝重新,將這個節點重新添加到集群中,出現了問題:
calico-node 狀態是 Running,但是READY 是0

kubectl get pods -n kube-systemNAME                                       READY   STATUS    RESTARTS      AGE
calico-kube-controllers-646957dd46-qdlfd   1/1     Running   0             9h
calico-node-kk6bw                          0/1     Running   0             9h
calico-node-qmn2c                          0/1     Running   0             9h
coredns-5c55fb4899-h4v4z                   1/1     Running   0             6d13h
coredns-5c55fb4899-hpfr8                   1/1     Running   0             6d13h
etcd-k8s-master                            1/1     Running   2 (15h ago)   6d13h
kube-apiserver-k8s-master                  1/1     Running   2 (15h ago)   6d13h
kube-controller-manager-k8s-master         1/1     Running   2 (15h ago)   6d13h
kube-proxy-5ffzx                           1/1     Running   0             10h
kube-proxy-s5rcq                           1/1     Running   1 (15h ago)   6d13h
kube-scheduler-k8s-master                  1/1     Running   2 (15h ago)   6d13h

執行kubectl describe pod -n kube-system calico-node-qmn2c

發現有:

Warning  Unhealthy  6s  kubelet  Readiness probe failed: 2025-04-09 15:03:09.435 [INFO][401] confd/health.go 180: Number of node(s) with BGP peering established = 0
calico/node is not ready: BIRD is not ready: BGP not established with 10.42.74.176

排錯:

  1. 檢查BGP端口(179)的連通性,確保節點之間可以通過 BGP 端口(TCP 179) 通信
telnet ip 179
  1. 安裝 calicoctl(需與 Calico 版本匹配)
curl -L https://github.com/projectcalico/calico/releases/download/v3.26.4/calicoctl-linux-arm64 -o calicoctl
chmod +x calicoctl
sudo mv calicoctl /usr/local/bin/

查看 BGP 對等體狀態

calicoctl node status

正常輸出應顯示 Established 狀態:

IPv4 BGP status
+---------------+-----------+-------+----------+-------------+
| PEER ADDRESS  | PEER TYPE | STATE |  SINCE   |    INFO     |
+---------------+-----------+-------+----------+-------------+
| 10.42.74.176    | node-to-node | up    | 09:00:00 | Established |
+---------------+-----------+-------+----------+-------------+

如果狀態為 Idle 或 Active,表示 BGP 會話未建立。

3. 檢查 Calico 配置
確認 Calico 的 BGP 配置是否正確:

查看默認的 BGP 配置

calicoctl get bgpconfigurations default -o yaml

查看節點級別的 BGP 對等體配置

calicoctl get node <node-name> -o yaml

關鍵配置項:

spec.bgp.asNumber: 集群的 AS 號(默認 64512)。spec.bgp.peers: 顯式指定的 BGP 對等體(如果使用全互聯模式可能無需配置)。

4. 驗證節點 IP 地址
確保 Calico 使用的節點 IP 地址正確(尤其是多網卡環境):

查看節點的實際 IP 地址(通常是主網卡 IP)
ip addr show查看 Calico 節點資源中記錄的 IP
calicoctl get node <node-name> -o yaml | grep 'address:'

如果節點 IP 不匹配,需要修正:

修改 Calico 節點的 IP 地址
calicoctl patch node <node-name> --patch '{"spec":{"bgp":{"ipv4Address":"<correct-ip>/24"}}}'

5. 檢查路由表
在問題節點和目標節點(10.42.74.176)上檢查路由表,確認 BGP 路由是否注入:

ip route show | grep bird
正常應看到對方節點網段的路由條目:
10.244.1.0/24 via 10.42.74.176 dev eth0 proto bird

最后都不是:重啟node節點解決

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76273.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76273.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76273.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

游戲開發中 C#、Python 和 C++ 的比較

&#x1f3ac; Verdure陌矣&#xff1a;個人主頁 &#x1f389; 個人專欄: 《C/C》 | 《轉載or娛樂》 &#x1f33e; 種完麥子往南走&#xff0c; 感謝您的點贊、關注、評論、收藏、是對我最大的認可和支持&#xff01;?? 摘要&#xff1a; 那么哪種編程語言最適合游戲開發…

LabVIEW真空度監測與控制系統

開發了一種基于LabVIEW的真空度信號采集與管理系統&#xff0c;該系統通過圖形化編程語言實現了真空度的高精度測量和控制。利用LabVIEW的強大功能&#xff0c;研制了相應的硬件并設計了完整的軟件解決方案&#xff0c;以滿足工業應用中對真空度監測的精確要求。 項目背景 隨著…

checkra1n越獄出現的USB error -10問題解決

使用checkra1n進行越獄是出現&#xff1a; 解決辦法(使用命令行進行越獄)&#xff1a; 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先進入恢復模式 a .可使用愛思助手 b. 或者長按home,出現關機的滑條&#xff0c;同時按住home和電源鍵&#…

spring boot 中 WebClient 與 RestTemplate 的對比總結

以下是 WebClient 與 RestTemplate 的對比總結&#xff0c;以純文本表格形式呈現&#xff1a; 核心特性對比 特性RestTemplateWebClient線程模型同步阻塞&#xff1a;每個請求占用線程&#xff0c;直到響應返回。異步非阻塞&#xff1a;基于事件循環&#xff0c;高效處理高并發…

深入淺出SPI通信協議與STM32實戰應用(W25Q128驅動)(實戰部分)

1. W25Q128簡介 W25Q128 是Winbond推出的128M-bit&#xff08;16MB&#xff09;SPI接口Flash存儲器&#xff0c;支持標準SPI、Dual-SPI和Quad-SPI模式。關鍵特性&#xff1a; 工作電壓&#xff1a;2.7V~3.6V分頁結構&#xff1a;256頁/塊&#xff0c;每塊16KB&#xff0c;共1…

STM32 HAL庫之EXTI示例代碼

外部中斷按鍵控制LED燈 在main.c中 HAL_Init(); 初始化Flash&#xff0c;中斷優先級以及HAL_MspInit函數&#xff0c;也就是 stm32f1xx_hal.c 中 HAL_StatusTypeDef HAL_Init(void) {/* Configure Flash prefetch */ #if (PREFETCH_ENABLE ! 0) #if defined(STM32F101x6) || …

查看手機在線狀態,保障設備安全運行

手機作為人們日常生活中不可或缺的工具&#xff0c;承載著溝通、工作、娛樂等多種功能。保障手機設備的安全運行是我們每個人都非常重要的任務&#xff0c;而了解手機的在線狀態則是其中的一環。通過挖數據平臺提供的在線查詢工具&#xff0c;我們可以方便快捷地查詢手機號的在…

Llama 4全面評測:官方數據亮眼,社區測試顯不足之處

引言 2025年4月&#xff0c;Meta正式發布了全新的Llama 4系列模型&#xff0c;這標志著Llama生態系統進入了一個全新的時代。Llama 4不僅是Meta首個原生多模態模型&#xff0c;還采用了混合專家(MoE)架構&#xff0c;并提供了前所未有的上下文長度支持。本文將詳細介紹Llama 4…

淘寶API驅動跨境選品:多語言詳情頁自動翻譯與本地化定價

淘寶 API 驅動跨境選品實現多語言詳情頁自動翻譯與本地化定價&#xff0c;為跨境電商業務帶來諸多便利與優勢&#xff0c;以下是詳細介紹&#xff1a; 一、多語言詳情頁自動翻譯 技術原理 借助淘寶的 API 接口&#xff0c;獲取商品詳情頁的各類文本信息&#xff0c;包括標題、描…

MFC工具欄CToolBar從專家到小白

CToolBar m_wndTool; //創建控件 m_wndTool.CreateEx(this, TBSTYLE_FLAT|TBSTYLE_NOPREFIX, WS_CHILD | WS_VISIBLE | CBRS_FLYBY | CBRS_TOP | CBRS_SIZE_DYNAMIC); //加載工具欄資源 m_wndTool.LoadToolBar(IDR_TOOL_LOAD) //在.rc中定義&#xff1a;IDR_TOOL_LOAD BITMAP …

【Java面試系列】Spring Boot微服務架構下的分布式事務處理與性能優化詳解 - 3-5年Java開發必備知識

【Java面試系列】Spring Boot微服務架構下的分布式事務處理與性能優化詳解 - 3-5年Java開發必備知識 引言 在當今的微服務架構中&#xff0c;分布式事務處理和性能優化是面試中經常被問及的高頻話題。隨著系統規模的擴大&#xff0c;如何保證數據一致性和系統性能成為了開發者…

【動態規劃】 深入動態規劃—兩個數組的dp問題

文章目錄 前言例題一、最長公共子序列二、不相交的線三、不同的子序列四、通配符匹配五、交錯字符串六、兩個字符串的最小ASCII刪除和七、最長重復子數組 結語 前言 問題本質 它主要圍繞著給定的兩個數組展開&#xff0c;旨在通過對這兩個數組元素間關系的分析&#xff0c;找出…

【C++面向對象】封裝(上):探尋構造函數的幽微之境

每文一詩 &#x1f4aa;&#x1f3fc; 我本將心向明月&#xff0c;奈何明月照溝渠 —— 元/高明《琵琶記》 譯文&#xff1a;我本是以真誠的心來對待你&#xff0c;就像明月一樣純潔無瑕&#xff1b;然而&#xff0c;你卻像溝渠里的污水一樣&#xff0c;對這份心意無動于衷&a…

JavaScript性能優化(下)

1. 使用適當的算法和邏輯 JavaScript性能優化是一個復雜而重要的話題&#xff0c;尤其是在構建大型應用時。通過使用適當的算法和邏輯&#xff0c;可以顯著提高代碼的效率和響應速度。以下是一些關鍵策略和實踐&#xff0c;用于優化JavaScript性能&#xff1a; 1.1. 采用適當…

螞蟻 Flink 實時計算編譯任務 Koupleless 架構改造

張馮君&#xff08;遠遠&#xff09; Koupleless PMC 螞蟻集團技術工程師 就職于螞蟻集團中間件團隊&#xff0c;參與維護與建設螞蟻 SOFAArk 和 Koupleless 開源項目、內部 SOFAServerless 產品的研發和實踐。 本文 3488 字&#xff0c;預計閱讀 11 分鐘 業務背景 基于開源 A…

使用pycharm社區版調試DIFY后端python代碼

目錄 背景 前置條件 DIFY使用的框架 API服務調試配置步驟&#xff08;基于tag為0.15.3的版本&#xff09; 1.配置.env文件 2.關閉docker里面的docker-api-1服務 3.使用DOCKER啟動本地環境需要用到的中間件&#xff0c;并暴露端口 注意事項一&#xff1a; 注意事項二&#xff1a…

從 macos 切換到 windows 上安裝的工具類軟件

起因 用了很多年的macos, 已經習慣了macos上的操作, 期望能在windows上獲得類似的體驗, 于是花了一些時間來找windows上相對應的軟件. 截圖軟件 snipaste?????? windows和macos都有的軟件, 截圖非常好用 文件同步軟件 oneDrive: 嘗試了不同的同步軟件, 還是微軟在各…

MySQL體系架構(一)

1.1.MySQL的分支與變種 MySQL變種有好幾個,主要有三個久經考驗的主流變種:Percona Server,MariaDB和 Drizzle。它們都有活躍的用戶社區和一些商業支持,均由獨立的服務供應商支持。同時還有幾個優秀的開源關系數據庫,值得我們了解一下。 1.1.1.Drizzle Drizzle是真正的M…

【項目實訓項目博客】prompt初版實踐

通過對camel技術的理解&#xff0c;我們向其中添加了市場營銷角色的prompt 初版設計如下&#xff1a; chatchainconfig.json { "chain": [ { "phase": "DemandAnalysis", "phaseType": "SimplePhase", "max_turn_step…

[Bond的雜貨鋪] CKS 證書也到貨咯

最近比較忙&#xff0c;忘記寫Blog了&#xff1a;&#xff09; 一年前黑五去官網蹲了一手Cyber Monday&#xff0c;買了英文考試券bundle&#xff0c;當時只考了cka,后來cks差點都忘記了。將近一年后&#xff0c;無意中收到官方的提醒郵件&#xff0c;說考試券本已過期&#x…