女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

樹莓派部署 Kubernetes:通過 UDM Pro 實現 BGP 負載均衡!

上海晶珩電子科技有限公司 ? 2025-06-25 18:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

最近,我將家庭實驗室的架構核心切換為一組樹莓派

盡管在樹莓派上運行的 Kubernetes 發行版眾多,但在資源受限的設備上運行 Kubernetes 時,控制平面的開銷是一個常見挑戰。使用 Cloudfleet 等允許遠程本地節點的托管 Kubernetes 服務,可以卸載這一責任。這種方法讓樹莓派能夠將其資源專門用于運行工作負載,而不是消耗 CPU 和內存來處理控制平面任務。Cloudfleet 提供了一個免費的集群,最多支持 24 個 CPU,這可以覆蓋我的兩臺樹莓派 5,總共 16 個核心的設置。

在我之前的嘗試中,在我的環境中有效實現 Kubernetes 負載均衡會面臨一些挑戰。與云平臺不同,云平臺上的負載均衡是現成的服務,本地部署則需要更多的手動網絡配置。當創建類型為 LoadBalancer 的 Kubernetes 服務時,需要建立一個虛擬 IP(VIP)并使其在網絡上可訪問。雖然像 MetalLB 這樣的項目可以通過讓節點使用 L2 廣播(例如 ARP 請求)來宣布 VIP,但這種方法通常將 VIP 的可用性限制在任何給定時間只能由單個節點使用,這并不符合我的期望。

L2 廣播的一個更健壯的替代方案是 BGP(邊界網關協議)。使用 BGP,你的 Kubernetes 集群可以直接向路由器廣播 LoadBalancer VIP。這允許路由器將流量分配到為負載均衡服務提供服務的多個節點上,提供更好的冗余和可擴展性潛力。此外,使用 BGP,你還可以廣播 Pod IP,使你的內部 Pod 網絡在局域網中可用。

我在網絡中使用的是 UniFi 堆棧,直到最近,UniFi Dream Machine Pro(UDM Pro)還缺乏原生 BGP 支持。然而,這一功能現在已經可用,使得基于 BGP 的負載均衡解決方案成為可能。

在這篇文章中,我將引導你完成如何將樹莓派集成到 Cloudfleet 管理的 Kubernetes 集群中,并配置 UDM Pro 的 BGP 網絡,以實現無縫的服務暴露。

設置 Kubernetes 集群

使用 Cloudfleet 創建 Kubernetes 集群非常簡單。首先,你需要通過訪問 Cloudfleet 控制臺進行注冊。

注冊并創建組織后,下一步是創建 Kubernetes 集群。有關安裝 Cloudfleet CLI 和創建集群的詳細說明,請參閱官方 Cloudfleet 入門指南。

該指南將引導你完成創建空集群和設置 Cloudfleet CLI 的必要步驟,你需要使用該 CLI 來添加樹莓派節點。

創建集群后,你將收到一個 CLUSTER_ID。請保留此 ID,因為你需要它來添加樹莓派節點。

將樹莓派節點添加到 Cloudfleet 集群

將樹莓派集成到 Cloudfleet 集群中涉及為樹莓派準備正確的操作系統,然后使用 Cloudfleet CLI 將它們作為自管理節點添加。

1.Cloudfleet 要求自管理節點運行 Ubuntu 24.04 LTS。將 Ubuntu 24.04 安裝到樹莓派的 microSD 卡上的最簡單方法是使用官方樹莓派成像器。

2.在你的計算機上下載并安裝樹莓派成像器。

3.將 microSD 卡插入計算機。

4.打開樹莓派成像器。

5.點擊“CHOOSE DEVICE”(選擇設備)并選擇你的樹莓派型號(例如樹莓派 5)。

6.點擊“CHOOSE OS”(選擇操作系統)。導航到“Other general-purpose OS”(其他通用操作系統)->“Ubuntu”。

7.選擇“Ubuntu Server 24.04 LTS (64-bit)”(通常建議為無頭 Kubernetes 節點使用服務器版)。

8.點擊“CHOOSE STORAGE”(選擇存儲)并選擇你的 microSD 卡。

9.強烈建議點擊齒輪圖標以預配置設置,如主機名、啟用 SSH(并設置密碼或授權密鑰)以及設置用戶帳戶。這簡化了無頭設置。

10.點擊“NEXT”(下一步),然后點擊“YES”(是)以確認并開始寫入鏡像。

11.寫入完成后,將 microSD 卡插入樹莓派,通過以太網將其連接到網絡,并接通電源。確保它有一個 IP 地址,并且 SSH 訪問正常。

操作系統準備好后,在你的機器上(已安裝 Cloudfleet CLI 并已登錄),對要添加到集群的每個樹莓派執行以下命令:

cloudfleet clusters add-self-managed-node CLUSTER_ID--hostRPI_IP--ssh-usernameSSH_USERNAME--regionmy-home--zonemy-home

將 CLUSTER_ID 替換為你在上一節中創建的集群的 ID。

將 RPI_IP 替換為樹莓派在你本地網絡上的 IP 地址。

將 SSH_USERNAME 替換為你為樹莓派上的 SSH 訪問配置的用戶名。

--region my-home 和 --zone my-home 標志將為你的節點分配這些標簽。這些標簽是任意的,但對于組織節點很有用,并且可以在 Kubernetes 配置中使用,如我們稍后的 BGP 設置。

然后,Cloudfleet CLI 將通過 SSH 連接到你的樹莓派,安裝必要的軟件,并將其加入到你的托管 Kubernetes 集群中。一段時間后,樹莓派應顯示為 Cloudfleet 儀表板和通過 kubectl get nodes(在配置 kubectl 指向你的 Cloudfleet 集群后,你可以通過點擊 Cloudfleet 控制臺上的“Connect to cluster”(連接到集群)按鈕了解如何操作)中的就緒節點。

部署第一個工作負載

在進行 BGP 設置并查看 LoadBalancer 服務的實際效果之前,為了測試我們的新集群,讓我們部署一個簡單的 Nginx 應用程序。

創建一個名為 nginx-deployment.yaml 的文件,內容如下:

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 2# Running two replicas for demonstration selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest# Using the latest Nginx image ports: - containerPort: 80---apiVersion: v1kind: Servicemetadata: name: nginx-servicespec: selector: app: nginx ports: - protocol: TCP port: 80 # Port accessible on the LoadBalancer IP targetPort: 80# Port on the Nginx pods type: LoadBalancer# This is key for BGP to pick it up

將此部署應用到你的集群:

kubectlapply -f nginx-deployment.yaml

一段時間后,Kubernetes 將創建部署和服務。

你可以檢查服務的狀態:

kubectlgetsvc nginx-service

查找 EXTERNAL-IP 字段。它將保持 PENDING 狀態,因為沒有負載均衡功能會接收此服務并為其創建 VIP。這是我們將在下一節中解決的問題。

為本地負載均衡設置 BGP

Cloudfleet 使用 Cilium 作為其 CNI(容器網絡接口),它提供了 BGP 廣播功能。有關 Cloudfleet 網絡架構的更多詳細信息,請參閱此處。

https://cloudfleet.ai/docs/networking/architecture/

有關使用 BGP 進行本地負載均衡的指南,請參閱此處。

https://cloudfleet.ai/docs/networking/on-premises-load-balancing-with-bgp/

1. Cilium BGP 配置

首先,我們需要為集群配置 BGP。這涉及創建幾個 Kubernetes 自定義資源:

a) CiliumLoadBalancerIPPool:這定義了 Cilium 可以分配給 LoadBalancer 服務的 IP 地址池。這些 IP 應該是 UDM Pro 可路由的子網的一部分,并專門用于此目的。

apiVersion: "cilium.io/v2alpha1"kind: CiliumLoadBalancerIPPoolmetadata: name:"pool"spec: blocks: - start: 172.16.199.2# Ensure this range is available on your network and reserved for K8s stop: 172.16.199.254

如果你要廣播的 CIDR 不是 UDM PRO 中任何現有網絡的一部分,你應該創建一個覆蓋此 CIDR 的網絡。否則,UDM PRO 將不會將流量路由到這些 IP。

b) CiliumBGPAdvertisement:此資源指定 Cilium 應通過 BGP 廣播哪些路由,例如分配給 LoadBalancer 服務的 IP 和 Pod CIDR。

apiVersion: "cilium.io/v2alpha1"kind: CiliumBGPAdvertisementmetadata: name: services labels: advertise: bgp# This label is used to select this advertisementspec: advertisements: - advertisementType: PodCIDR - advertisementType: Service service: addresses: - LoadBalancerIP selector: # This selector aims to advertise all LoadBalancer services. # It matches services having any label by checking for a key not matching 'never-used-value'. matchExpressions: - { key: somekey, operator: NotIn, values: [ 'never-used-value' ] }

通過添加 PodCIDR,我還在向內部網絡廣播 Pod IP,但這完全是可選的。

c) CiliumBGPPeerConfig:這定義了常見的 BGP 對等配置。

apiVersion: cilium.io/v2alpha1kind: CiliumBGPPeerConfigmetadata: name: unifi# Named 'unifi' as it peers with the UDM Prospec: gracefulRestart:# Enabling graceful restart for smoother updates enabled: true restartTimeSeconds: 15 families: - afi: ipv4 safi: unicast advertisements: matchLabels:# Selects the 'services' CiliumBGPAdvertisement via its label advertise:"bgp"

d) CiliumBGPClusterConfig:此主要配置在 Cilium 代理(節點)上建立 BGP 實例。它定義了 Kubernetes 集群的本地 ASN 和 BGP 對等細節(你的 UDM Pro)。請注意,nodeSelector 現在與添加節點時指定的區域和區域匹配。

apiVersion: cilium.io/v2alpha1kind: CiliumBGPClusterConfigmetadata: name: unifispec: nodeSelector:# Ensures this BGP config applies to the specified RPi nodes matchLabels: topology.kubernetes.io/region: my-home topology.kubernetes.io/zone: my-home bgpInstances: - name:"cloudfleet-bgp"# Name of this BGP instance localASN: 65001# ASN for the K8s cluster's BGP peers: - name: unifi# Name of the peer (UDM Pro) peerASN: 65000# ASN of the UDM Pro peerAddress:"172.16.10.1"# IP address of your UDM Pro on the relevant LAN peerConfigRef: name: unifi# References the CiliumBGPPeerConfig defined above

將這些 YAML 文件應用到你的 Kubernetes 集群(kubectl apply -f .yaml)。然后,Cilium 的 BGP 組件將嘗試與指定的對等(172.16.10.1)建立 BGP 會話。不要忘記為你的設置修改 UDM Pro 的 IP 地址!

2. UDM Pro BGP 配置

接下來,必須在你的 UDM Pro 上配置 BGP。UniFi OS 包含 FRRouting 以實現此類功能。他們的官方指南可以在此處找到。

我使用的 FRRouting 配置如下。你在 UDM PRO 的 Web 界面上上傳此文件。

! -*- bgp -*-!hostname $UDMP_HOSTNAMEpassword zebrafrr defaults traditionallog file stdout!router bgp65000 # UDM Pro's ASN (must match peerASN in CiliumBGPClusterConfig)bgp ebgp-requires-policy# Standard practice for eBGPbgp router-id172.16.10.1# UDM Pro's BGP router ID (its LAN IP)maximum-paths2# Optional: allow multiple paths!neighbor cilium peer-group# Using a peer-group for organizationneighbor cilium remote-as65001# ASN of the Cilium BGP (must match localASN in CiliumBGPClusterConfig)neighbor cilium activateneighbor cilium soft-reconfiguration inbound# Allows policy changes without session reset!! Define Raspberry Pi node IPsasBGP neighbors! These are the nodes running the Cilium BGP speakerneighbor172.16.10.241peer-group cilium# IP of RPi 1neighbor172.16.10.242peer-group cilium# IP of RPi 2!address-family ipv4 unicast redistribute connected# Optional: Advertise UDM Pro's connected routes neighbor cilium activate neighbor cilium route-mapALLOW-ALLin# Apply route-map to permit routes neighbor cilium route-mapALLOW-ALL out neighbor ciliumnext-hop-self# Important: UDM advertises itself as the next hopexit-address-family!route-mapALLOW-ALL permit10# A simple route-map permitting all routes!line vty!

UDM Pro BGP 關鍵設置:

router bgp 65000:設置 UDM Pro 的 ASN。這應與 Cilium 的 localASN(65001)不同,以便進行 BGP 對等。

bgp router-id 172.16.10.1:UDM Pro 的路由器 ID,通常是其 LAN IP。

neighbor peer-group cilium:每個可能運行 Cilium BGP 發言人的樹莓派節點都被定義為對等。這些應該是你添加到 Cloudfleet 集群的樹莓派的 IP。

neighbor cilium remote-as 65001:通知 UDM Pro 這些對等屬于 ASN 65001。

neighbor cilium next-hop-self:確保 UDM Pro 廣告自身為從 Cilium 學習到的路由的下一跳。

route-map ALLOW-ALL:一個基本的路由圖,允許來自/去往 Cilium 對等的所有路由。如果需要,可以對其進行細化以進行更具體的過濾。

在應用 UDM Pro 和 Cilium BGP 配置后,BGP 會話應建立。你可以通過 SSH 登錄到 UDM Pro(例如,在 vtysh 中使用 show ip bgp summary)和使用 Cilium CLI 命令(例如,cilium bgp peers)在 Kubernetes 節點上檢查 BGP 對等狀態。

一旦所有設置都正確完成,現在你可以再次檢查 Load Balancer 服務,你會發現現在為其分配了一個 VIP。如果你在本地網絡上導航到此 IP,你將訪問到你剛剛部署的 NGINX。

如果 NGINX Pod 分布在兩個不同的節點上,UDM PRO 將在它們之間進行負載均衡。如果只有一個節點提供 Pod 服務,則流量將僅流向該節點。

結果:高效的家庭實驗室設置

通過此配置:

我的樹莓派運行 Kubernetes 工作負載,控制平面管理由 Cloudfleet 外部處理。

當在 Kubernetes 中創建 LoadBalancer 服務時,Cilium 會從 172.16.199.x 范圍內為其分配一個 IP。

Cilium 通過 BGP 將此 IP(以及可選的 Pod CIDR)廣播給我的 UDM Pro。

UDM Pro 學習如何將 172.16.199.x 的流量路由到適當的樹莓派節點。

服務可以從我的局域網無縫訪問。

你還可以設置 UDM PRO 的端口轉發功能,將外部流量路由到此 VIP,以簡單地開始從你的家庭實驗室提供網站服務。祝實驗愉快!

原文地址:

https://itnext.io/kubernetes-on-raspberry-pi-and-bgp-load-balancing-with-unifi-dream-machine-pro-d5b94b6cfe99

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • BGP
    BGP
    +關注

    關注

    0

    文章

    87

    瀏覽量

    15632
  • 樹莓派
    +關注

    關注

    121

    文章

    1973

    瀏覽量

    107170
  • kubernetes
    +關注

    關注

    0

    文章

    243

    瀏覽量

    9014
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何通過SSH連接到樹莓

    本篇文章主要也是講解樹莓+cpolar組合的作用,可以實現
    的頭像 發表于 08-23 10:33 ?1812次閱讀
    如何<b class='flag-5'>通過</b>SSH連接到<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>

    路由器負載均衡怎么配置

    。 一、負載均衡實現方式 基于路由協議的負載均衡:這種方式主要利用不同的路由協議,如OSPF、BGP
    的頭像 發表于 12-13 11:17 ?4371次閱讀

    動態BGP與靜態BGP的區別?

    數據中心 Leaf-Spine 架構 3.2 特點 支持自動鄰居發現 適合大量對等節點自動化部署 適應容器化/虛擬化環境(例如 Kubernetes + BGP) 需要更強的路由策略管控,防止錯誤建立
    發表于 06-24 06:57

    樹莓安裝Haproxy實現***負載均衡

    手上有個閑置的樹莓,以它的性能,應付個Haproxy綽綽有余了,關鍵還低功耗,可以24小時開機。這次,我們就將它用來作為***的負載均衡。把我們科學上網的需求分配到各個Shadows
    發表于 05-14 15:53

    樹莓部署LabVIEW程序并開機自啟

    的把程序部署到myRIO或者***Rio,硬件上電后程序自動運行,就像普通的單片機一樣。 樹莓當然也可以,其設置方法和myRIO基本一致。 最簡單的設置方法,只需要以下幾個步驟。最后只要
    發表于 05-31 03:42

    Kubernetes Ingress 高可靠部署最佳實踐

    Kubernetes集群中,Ingress是授權入站連接到達集群服務的規則集合,為您提供七層負載均衡能力,您可以通過 Ingress 配置提供外部可訪問的 URL、
    發表于 04-17 14:35

    qt源碼庫在樹莓中的部署方法

    接安裝qt。本文介紹最普遍的部署方式,就是在pc端的ubuntu中交叉編譯庫源碼,然后上傳編譯好的庫到樹莓,最后配置qt creator交叉編譯的kit來實現在pc端編譯自碼程序,上
    發表于 12-24 06:44

    通過樹莓的GPIO進行串口通訊

    樹莓最大的魅力就是接口豐富,借助這些開放的接口,可以實現很多好玩又實用的功能,比如通過接口控制電機實現智能小車的動力控制、
    發表于 01-13 08:15

    講述樹莓主動模式的單計算棒部署流程

    什么是主動模式?樹莓主動模式的單計算棒是如何去部署的?
    發表于 02-16 08:07

    樹莓裝機教程

    樹莓裝機教程樹莓裝機教程樹莓裝機教程樹莓
    發表于 11-25 10:14 ?52次下載

    通過命令行訪問樹莓3系統_通過VNC訪問樹莓3系統

    本文主要說明的就是關于樹莓3i同被訪問的相關信息,分別從通過命令行訪問、通過VNC訪問來分析了解樹莓
    發表于 12-08 16:57 ?3858次閱讀

    樹莓是什么樹莓的簡單介紹

    要想玩轉樹莓,首先得知道樹莓是什么。在本節中,作者將帶領大家揭開樹莓的神秘面紗,了解
    發表于 05-15 18:09 ?31次下載
    <b class='flag-5'>樹莓</b><b class='flag-5'>派</b>是什么<b class='flag-5'>樹莓</b><b class='flag-5'>派</b>的簡單介紹

    樹莓派上的Kubernetes

    電子發燒友網站提供《樹莓派上的Kubernetes.zip》資料免費下載
    發表于 11-17 11:19 ?0次下載
    <b class='flag-5'>樹莓</b>派上的<b class='flag-5'>Kubernetes</b>

    Alexa通過樹莓控制LED

    電子發燒友網站提供《Alexa通過樹莓控制LED.zip》資料免費下載
    發表于 12-30 10:00 ?0次下載
    Alexa<b class='flag-5'>通過</b><b class='flag-5'>樹莓</b><b class='flag-5'>派</b>控制LED

    Kubernetes負載均衡器MetalLB介紹

    Kubernetes中一個應用服務會有一個或多個實例,每個實例(Pod)的IP地址由網絡插件動態隨機分配(Pod重啟后IP地址會改變)。為屏蔽這些后端實例的動態變化和對多實例的負載均衡,引入了 Service這個資源對象。
    的頭像 發表于 03-18 16:24 ?342次閱讀
    <b class='flag-5'>Kubernetes</b><b class='flag-5'>負載</b><b class='flag-5'>均衡</b>器MetalLB介紹