Harvester Cloud Provider
可以使用內建的 Harvester Node Driver 在 Rancher 中佈建 RKE2 叢集。Harvester 為客體 Kubernetes 叢集提供負載平衡器和 Harvester 叢集儲存透通支援。
在本頁中,我們將學習:
- 如何在 RKE2 叢集中部署 Harvester cloud provider
- 如何使用 Harvester 負載平衡器
向後相容性注意事項
如果您使用的是 Harvester cloud provider v0.2.2 或更高版本,請注意一個已知的向後相容性問題。如果您的 Harvester 版本低於 v1.2.0,且您打算使用較新的 RKE2 版本(即 >= v1.26.6+rke2r1、v1.25.11+rke2r1、v1.24.15+rke2r1),在升級客體 Kubernetes 叢集或 Harvester cloud provider 之前,必須先將 Harvester 叢集升級到 v1.2.0 或更高版本。
有關詳細的支援矩陣,請參閱官方網站的 Harvester CCM & CSI Driver with RKE2 Releases 部分。
部署
先決條件
- Kubernetes 叢集建構在 Harvester 虛擬機器之上。
- 作為客體 Kubernetes 節點執行的 Harvester 虛擬機器位於相同的命名空間中。
每個 Harvester VM 都必須具有 macvlan 核心模組,這是 DHCP IPAM 模式的 LoadBalancer 服務所必需的。
若要檢查核心模組是否可用,請存取 VM 並執行以下命令:
lsmod | grep macvlan
sudo modprobe macvlan
如果發生以下情況,則核心模組可能不存在:
$ lsmod | grep macvlan沒有產生輸出。$ sudo modprobe macvlan顯示類似modprobe: FATAL: Module macvlan not found in directory /lib/modules/5.14.21-150400.22-default的錯誤訊息。
預設情況下,macvlan 核心模組不包含在 SUSE Linux Enterprise 15 Service Pack 4/5/6 最小雲端映像中(請參閱 Issue #6418)。這些映像包含 kernel-default-base 套件,其中僅包含基本模組。但是,當您安裝 kernel-default 套件時,macvlan 核心驅動程式就會變為可用。
為了消除客體叢集佈建後手動干預的需要,請使用 openSUSE Build Service(OBS)建構您自己的雲端映像。您必須在 Minimal.kiwi 檔案中移除 kernel-default-base 套件並新增 kernel-default 套件,以確保產生的雲端映像包含 macvlan 核心模組。更多資訊請參閱自訂 SUSE VM 映像。
使用 Harvester Node Driver 部署到 RKE2 叢集
使用 Harvester node driver 啟動 RKE2 叢集時,選擇 Harvester cloud provider。node driver 將自動協助部署 CSI 驅動程式和 CCM。

從 Rancher v2.9.0 開始,您可以使用 Data directory configuration path 欄位為雲端設定資料設定特定資料夾。

手動部署到 RKE2 叢集
-
使用腳本
generate_addon.sh產生雲端設定資料,然後將資料放置在每個自訂節點上(目錄:/etc/kubernetes/cloud-config)。curl -sfL https://raw.githubusercontent.com/harvester/cloud-provider-harvester/master/deploy/generate_addon.sh | bash -s <serviceaccount name> <namespace>備註該腳本在操作 Harvester 叢集時依賴
kubectl和jq,並且僅在能夠存取Harvester Clusterkubeconfig 檔案時才能運作。您可以在其中一個 Harvester 管理節點的
/etc/rancher/rke2/rke2.yaml路徑中找到kubeconfig檔案。伺服器 IP 必須替換為 VIP 位址。內容範例:
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <redacted>
server: https://127.0.0.1:6443
name: default
# ...您必須指定將建立客體叢集的命名空間。
輸出範例:
########## cloud config ############
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: <CACERT>
server: https://HARVESTER-ENDPOINT/k8s/clusters/local
name: local
contexts:
- context:
cluster: local
namespace: default
user: harvester-cloud-provider-default-local
name: harvester-cloud-provider-default-local
current-context: harvester-cloud-provider-default-local
kind: Config
preferences: {}
users:
- name: harvester-cloud-provider-default-local
user:
token: <TOKEN>
########## cloud-init user data ############
write_files:
- encoding: b64
content: <CONTENT>
owner: root:root
path: /etc/kubernetes/cloud-config
permissions: '0644' -
在 RKE2 叢集建立頁面上,前往 Cluster Configuration 畫面,並將 Cloud Provider 的值設定為 External。
