MetalLB 新手攻略:零壓力實現無縫部署

更新 發佈閱讀 11 分鐘

延續上篇的內容,在了解了MetalLB的基本概念之後,我們就進入實際上部署的動作,還沒看過的可以到以下連結先有個基本概念:

讓我們一步一步建構出我們需要的服務

讓我們一步一步建構出我們需要的服務

本篇針對部署一個最基本的MetalLB的做法,共分成四個部分來進行說明:

  1. 安裝前確認
  2. 部署
  3. 測試
  4. 結論

準備好您的Kubernetes Cluster之後,那我們就開始吧!!


1.安裝前確認

跟據官網目前文件上所寫的需求如下:

  • K8S 版本在1.13.0以上,並且沒有安裝其他的Loadbalancer
  • 相容於MetalLB的CNI(參考:https://metallb.universe.tf/installation/network-addons/),我的環境是使用Calico,屬於”大部分”功能相容。
  • 配置給MetalLB分配的數個IP位址
  • 如果使用BGP模式,確認硬體是否支援(本篇使用L2模式)
  • 使用L2模式時,確認每個節點的7946 Port允許通過(TCP/UDP),memberlist功能使用。
  • 在v0.13.0版之後,MetalLB也支援CRD的方式,如果還是用configmap的方式,可以用以下方式進行轉換:

2.部署

確認了所有預先需求後,就可以開始進行安裝,官方的安裝方式有YAML, Helm, Operator的方式,為了能更清楚元件的內容到底是在做什麼,本篇選擇最基本的YAML方式進行部署作業,實務上可以使用Helm或是Operator的方式來進行部署,在管理上會更加容易(由其是像OpenShift等等商用解決方案)。

#---------------------------------------------------------
# (option) 如果kube-proxy使用ipvs mode,要記得去修成strict arp
#---------------------------------------------------------
[lb01]# kubectl edit configmap -n kube-system kube-proxy
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
mode: "ipvs"
ipvs:
strictARP: true
#---------------------------------------------------------
# S2-1. 取得YAML
#---------------------------------------------------------
[master]# wget https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml
[master]# wget https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-frr.yaml
#---------------------------------------------------------
# S2-2. 執行
#---------------------------------------------------------
[master]# kubectl create ns metallb-system
[master]# kubectl apply -f metallb-native.yaml -n metallb-system
[master]# kubectl apply -f metallb-frr.yaml -n metallb-system
raw-image
#---------------------------------------------------------
# S2-3. 建立IP-Pool
#---------------------------------------------------------
[master]# vim ipv4-pool.yaml
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses: #可分配的 IP 地址,可以指定多个,包括 ipv4、ipv6
- 172.20.175.140-172.20.175.150

[master]# kubectl apply -f ipv4-pool.yaml
建立好的IP Pool

建立好的IP Pool

#---------------------------------------------------------
# S2-4. 建立L2-Advertrisement,與ipv4pool binding
# L2模式的工作方式是回應本地網路的ARP request,將node MAC提供給客戶端
# (如果不設定與ipaddresspool綁定,預設L2Advertisement會關聯所有可用的IPAdressPool)
#---------------------------------------------------------
[master]# vim L2advertisement.yaml
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: example
namespace: metallb-system
spec:
ipAddressPools:
- first-pool

[master]# kubectl apply -f L2advertment.yaml
綁定

綁定

到此就完成了MetalLB L2模式的基本建置,接下來進行測試,確認是否可以正常以”loadbalancer”的Type取得IP位址。


3.測試

#---------------------------------------------------------
# S3-1. 建立nginx service
#---------------------------------------------------------
[master]# vim nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: docker.io/nginx:latest
ports:
- containerPort: 80

[master]# kubectl create -f nginx-deployment.yaml
[master]# kubectl get all
raw-image
#---------------------------------------------------------
# S3-2. 建立nginx svc
#---------------------------------------------------------
[master]# vim nginx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx2
labels:
app: nginx
spec:
selector:
app: nginx
ports:
- name: nginx-port
protocol: TCP
port: 80
targetPort: 80
type: LoadBalancer

[master]# kubectl create -f nginx-svc.yaml
#---------------------------------------------------------
# S3-3. 確認是否已分配externalIP
#---------------------------------------------------------
[master]# kubectl get svc nginx
[master]# curl http://<externalip>
=> 可以訪問表示服務正常
raw-image
確認功能正常,可以從IP Pool取得IP

確認功能正常,可以從IP Pool取得IP


4.結論

總結而言,使用MetalLB的最大好處在於為Kubernetes集群提供了強大的負載均衡功能,使服務更可靠、可擴展,且更易於管理。對於正式環境上的應用時,建議進行詳細的規劃和測試,確保它符合應用需求與管理需求,因為它也是屬於基礎架構的一環,如果出現問題可能會直接影響服務,記得注意應未來的擴展和負載增長議題。

當然,相較於Cloud Loadbalancer,還是有一些缺點如下:

  1. MetalLB可能不如某些雲端提供的負載均衡服務功能強大,並且可能無法滿足某些高級需求,如全球負載均衡。
  2. 需要一定的網路知識:配置MetalLB可能需要一定的網路知識,尤其是在BGP模式下。
  3. 安全性:如果不正確配置,MetalLB可能會導致安全風險,因為它公開了一些Kubernetes服務,這需要謹慎的設定。

最後,以下網頁有列出一些類似的產品/工具供大家參考:

綜合上一篇的基本介紹,相信大家都已經可以建構出基本的MetalLB服務,對於沒有上公有雲環境的我,使用MetalLB讓我在地端也可以在這個部分使用到類似公有雲服務的功能,同時在提供服務時,也更為方便對外暴露位址。

好了,本篇就分享到這邊為止,如果對您有任何幫助,也請給我鼓勵,那我們就下期再見囉!!


References:





留言
avatar-img
留言分享你的想法!
avatar-img
超健忘閒人的沙龍
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
看更多
你可能也想看
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
在小小的租屋房間裡,透過蝦皮購物平臺採購各種黏土、模型、美甲材料等創作素材,打造專屬黏土小宇宙的療癒過程。文中分享多個蝦皮挖寶地圖,並推薦蝦皮分潤計畫。
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
小蝸和小豬因購物習慣不同常起衝突,直到發現蝦皮分潤計畫,讓小豬的購物愛好產生價值,也讓小蝸開始欣賞另一半的興趣。想增加收入或改善伴侶間的購物觀念差異?讓蝦皮分潤計畫成為你們的神隊友吧!
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
本文將演示在安裝完 Kubernetes Cluster 後的基本元件安裝,包括 Calico/Calicoctl、Metric Server 和 Dashboard UI 的安裝方法以及相關問題與解決方式。
Thumbnail
本文將演示在安裝完 Kubernetes Cluster 後的基本元件安裝,包括 Calico/Calicoctl、Metric Server 和 Dashboard UI 的安裝方法以及相關問題與解決方式。
Thumbnail
這篇文章教你如何搭建Kubernetes Cluster,包括節點安裝前設定、軟體套件安裝、Control-Plane部署和加入運算節點等步驟。在建置之後,作者會分享一些基礎服務的安裝。希望這篇文章對你有所幫助。
Thumbnail
這篇文章教你如何搭建Kubernetes Cluster,包括節點安裝前設定、軟體套件安裝、Control-Plane部署和加入運算節點等步驟。在建置之後,作者會分享一些基礎服務的安裝。希望這篇文章對你有所幫助。
Thumbnail
本文章將說明如果您想要從頭建置一組具有Loadbalancer HA架構的Kubernetes Cluster時,你可能會需要做的事前準備工作。
Thumbnail
本文章將說明如果您想要從頭建置一組具有Loadbalancer HA架構的Kubernetes Cluster時,你可能會需要做的事前準備工作。
Thumbnail
本文將說明在安裝完Kubernetes Cluster之後,接下來必須要進行的CNI Plugin安裝建置方式,同時也透過這篇文章進行基本的CNI說明與比較。 1. Container Network Interface (CNI)
Thumbnail
本文將說明在安裝完Kubernetes Cluster之後,接下來必須要進行的CNI Plugin安裝建置方式,同時也透過這篇文章進行基本的CNI說明與比較。 1. Container Network Interface (CNI)
Thumbnail
延續上篇的內容,在了解了MetalLB的基本概念之後,我們就進入實際上部署的動作,還沒看過的可以到以下連結先有個基本概念: 本篇針對部署一個最基本的MetalLB的做法,共分成四個部分來進行說明:
Thumbnail
延續上篇的內容,在了解了MetalLB的基本概念之後,我們就進入實際上部署的動作,還沒看過的可以到以下連結先有個基本概念: 本篇針對部署一個最基本的MetalLB的做法,共分成四個部分來進行說明:
Thumbnail
Intro👨‍💻 在gcp環境下使用ansible playbook 建立k8s cluster,目前base image為centos 7,安裝方式類似elk stack,一樣先等master安裝完後產生token,接著安裝slave。 使用的CRI為containerd,CNI為calico
Thumbnail
Intro👨‍💻 在gcp環境下使用ansible playbook 建立k8s cluster,目前base image為centos 7,安裝方式類似elk stack,一樣先等master安裝完後產生token,接著安裝slave。 使用的CRI為containerd,CNI為calico
Thumbnail
網路隨便估狗都有一堆大神教學文,不過還是紀錄一下自己安裝的步驟 (2021.11.7)身為一個linux和資料庫菜雞只能乖乖腳踏實地一步一步來 準備好環境 (廢話) 1. 先準備好環境 (廢話) 我是用virtualbox起一個CentOS7的虛擬機詳細以參考以下網址,有非常詳盡的步驟
Thumbnail
網路隨便估狗都有一堆大神教學文,不過還是紀錄一下自己安裝的步驟 (2021.11.7)身為一個linux和資料庫菜雞只能乖乖腳踏實地一步一步來 準備好環境 (廢話) 1. 先準備好環境 (廢話) 我是用virtualbox起一個CentOS7的虛擬機詳細以參考以下網址,有非常詳盡的步驟
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News