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
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
今天跟大家分享在地端資料中心內建立Kubernetes叢集之後,如何針對網路進行更進一步的優化。除了CNI(容器網路接口)的設定,實務上我還會再另行建立Loadbalancer的機制。
在現今快速發展的數據應用環境之下,Kubernetes已經成為部署和管理容器化應用的首選平台。但是隨著應用服務愈來愈複雜、被攻擊的風險也愈來愈高。為了保護Kubernetes環境的安全性,跟大家介紹一個針對Kubernetes安全合規掃描的工具,幫助確保您的 Kubernetes 叢集設置和應用程序
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
今天跟大家分享在地端資料中心內建立Kubernetes叢集之後,如何針對網路進行更進一步的優化。除了CNI(容器網路接口)的設定,實務上我還會再另行建立Loadbalancer的機制。
在現今快速發展的數據應用環境之下,Kubernetes已經成為部署和管理容器化應用的首選平台。但是隨著應用服務愈來愈複雜、被攻擊的風險也愈來愈高。為了保護Kubernetes環境的安全性,跟大家介紹一個針對Kubernetes安全合規掃描的工具,幫助確保您的 Kubernetes 叢集設置和應用程序
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
安裝官方 nginx 先在/etc/yum.repos.d新增一個nginx.repo的檔案 並加入以下內容 [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgc
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
這篇文章紀錄了安裝Ubuntu Server的過程,包括選擇HWE內核、語言、更新安裝程式、語系、儲存配置等步驟。
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
在先前的文章中說明了Linux大致上的安裝流程,整個過程只要依照畫面的指示設定,都可以安裝成功。其中可能比較困難在於硬碟空間的分配,這對於許多新手來說也是一個難點,也是這篇所要說的重點。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。
Thumbnail
這篇文章將介紹在vCenter中新增網路和VMkernel介面的操作步驟,包括進入設定、新增標準交換器群組、命名交換器、觀察狀態、新增VMkernel介面、命名和啟用服務等。
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
安裝官方 nginx 先在/etc/yum.repos.d新增一個nginx.repo的檔案 並加入以下內容 [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgc
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
這篇文章紀錄了安裝Ubuntu Server的過程,包括選擇HWE內核、語言、更新安裝程式、語系、儲存配置等步驟。
Thumbnail
安裝環境需求 64位元Linux,核心版本為3.1以上,且能滿足Ducker安裝環境。 機器之間要能夠互通。 外部存取權限。 硬體資源:兩核心CPU、8G記憶體、硬碟30GB以上。 安裝Kubeadm與Ducker Kubeadm是Kubernetes的一鍵部署工具。 增加Kube
Thumbnail
在實際生產中,容器化技術開始走向「容器編排技術」,如:Kubernetes。因為Docker無法獨立支撐大規模容器化部署。 Kubernetes起源於Borg系統,所以在大規模的叢集管理,優於其他容器編排技術。它提供拉取映像檔、拉取執行容器、路由閘道、水平擴充、監控和備份等,除外還可以自動化處理容
Thumbnail
在先前的文章中說明了Linux大致上的安裝流程,整個過程只要依照畫面的指示設定,都可以安裝成功。其中可能比較困難在於硬碟空間的分配,這對於許多新手來說也是一個難點,也是這篇所要說的重點。
Thumbnail
本篇文章將會說明如何在Linux中使用RPM離線安裝MySQL。
Thumbnail
這篇文章將介紹在vCenter中新增網路和VMkernel介面的操作步驟,包括進入設定、新增標準交換器群組、命名交換器、觀察狀態、新增VMkernel介面、命名和啟用服務等。
Thumbnail
引言 在當今的技術世界中,Kubernetes 已成為容器化應用的領導平台。作為一個高效的容器編排系統,它不僅管理著容器的部署和擴展,還提供了必要的自動化支持,以保證應用的高可用性和性能。在這個框架中,自動擴展功能起著至關重要的作用,特別是在面對不斷變化的負載和需求時。