內容來源於官方 Longhorn 1.1.2
英文技術手冊。
系列
- Longhorn 是什么?
- Longhorn 雲原生容器分布式存儲 - 設計架構和概念
- Longhorn 雲原生容器分布式存儲 - 部署篇
- Longhorn 雲原生容器分布式存儲 - 券和節點
- Longhorn 雲原生容器分布式存儲 - K8S 資源配置示例
- Longhorn 雲原生容器分布式存儲 - 監控(Prometheus)
- Longhorn 雲原生容器分布式存儲 - 備份與恢復
- Longhorn 雲原生容器分布式存儲 - 高可用
- Longhorn 雲原生容器分布式存儲 - 支持 ReadWriteMany (RWX) 工作負載
- Longhorn 雲原生容器分布式存儲 - 定制部署默認設置
Longhorn
可以通過使用 manifest file
、Helm chart
或 Rancher UI
安裝在 air gapped
環境中。
目錄
- 前提要求
- 使用
Manifest File
- 使用
Helm chart
- 使用
Rancher app
- 故障排除
前提要求
- 將
Longhorn Components
鏡像部署到您自己的registry
。 - 將
Kubernetes CSI driver
組件鏡像部署到您自己的registry
。
注意:
-
所有需要的鏡像的完整列表在 longhorn-images.txt 中。首先,通過運行下載鏡像列表:
wget https://raw.githubusercontent.com/longhorn/longhorn/v1.1.2/deploy/longhorn-images.txt
-
我們提供了一個腳本 save-images.sh 來快速拉取上面的
longhorn-images.txt
列表。如果您為標志--images
指定tar.gz
文件名,腳本會將所有鏡像保存到提供的文件名。在下面的示例中,腳本將 Longhorn 鏡像拉取並保存到文件longhorn-images.tar.gz
。然后,您可以將該文件復制到您的air-gap
環境中。另一方面,如果您不指定文件名,腳本只會將鏡像列表拉到您的計算機上。wget https://raw.githubusercontent.com/longhorn/longhorn/v1.1.2/scripts/save-images.sh chmod +x save-images.sh ./save-images.sh --image-list longhorn-images.txt --images longhorn-images.tar.gz
-
我們提供了另一個腳本 load-images.sh,用於將 Longhorn 鏡像推送到您的私有
registry
。如果您為標志--images
指定tar.gz
文件名,腳本將從tar
文件加載鏡像並推送它們。否則,它將在您的本地 Docker 中找到鏡像並推送它們。在下面的示例中,腳本從文件longhorn-images.tar.gz
加載鏡像並將它們推送到<YOUR-PRIVATE-REGISTRY>
wget https://raw.githubusercontent.com/longhorn/longhorn/v1.1.2/scripts/load-images.sh chmod +x load-images.sh ./load-images.sh --image-list longhorn-images.txt --images longhorn-images.tar.gz --registry <YOUR-PRIVATE-REGISTRY>
-
有關使用腳本的更多選項,請參閱 flag
--help
:./save-images.sh --help ./load-images.sh --help
使用 Manifest File
-
獲取 Longhorn Deployment manifest file
wget https://raw.githubusercontent.com/longhorn/longhorn/v1.1.2/deploy/longhorn.yaml
-
創建 Longhorn namespace
kubectl create namespace longhorn-system
-
如果私有
registry
需要身份驗證,在longhorn-system
命名空間中創建docker-registry
secret:kubectl -n longhorn-system create secret docker-registry <SECRET_NAME> --docker-server=<REGISTRY_URL> --docker-username=<REGISTRY_USER> --docker-password=<REGISTRY_PASSWORD>
-
在以下資源中將您的
secret
名稱SECRET_NAME
添加到imagePullSecrets.name
longhorn-driver-deployer
Deploymentlonghorn-manager
DaemonSetlonghorn-ui
Deployment
示例:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: longhorn-ui name: longhorn-ui namespace: longhorn-system spec: replicas: 1 selector: matchLabels: app: longhorn-ui template: metadata: labels: app: longhorn-ui spec: containers: - name: longhorn-ui image: longhornio/longhorn-ui:v0.8.0 ports: - containerPort: 8000 env: - name: LONGHORN_MANAGER_IP value: "http://longhorn-backend:9500" imagePullSecrets: - name: <SECRET_NAME> ## Add SECRET_NAME here serviceAccountName: longhorn-service-account
-
-
對 manifest file 應用以下修改
-
修改
longhorn-driver-deployer
Deployment 中的Kubernetes CSI driver
組件環境變量指向你的私有registry
鏡像- CSI_ATTACHER_IMAGE
- CSI_PROVISIONER_IMAGE
- CSI_NODE_DRIVER_REGISTRAR_IMAGE
- CSI_RESIZER_IMAGE
- CSI_SNAPSHOTTER_IMAGE
- name: CSI_ATTACHER_IMAGE value: <REGISTRY_URL>/csi-attacher:<CSI_ATTACHER_IMAGE_TAG> - name: CSI_PROVISIONER_IMAGE value: <REGISTRY_URL>/csi-provisioner:<CSI_PROVISIONER_IMAGE_TAG> - name: CSI_NODE_DRIVER_REGISTRAR_IMAGE value: <REGISTRY_URL>/csi-node-driver-registrar:<CSI_NODE_DRIVER_REGISTRAR_IMAGE_TAG> - name: CSI_RESIZER_IMAGE value: <REGISTRY_URL>/csi-resizer:<CSI_RESIZER_IMAGE_TAG> - name: CSI_SNAPSHOTTER_IMAGE value: <REGISTRY_URL>/csi-snapshotter:<CSI_SNAPSHOTTER_IMAGE_TAG>
-
修改 Longhorn 鏡像以指向您的私有
registry
鏡像-
longhornio/longhorn-manager
image: <REGISTRY_URL>/longhorn-manager:<LONGHORN_MANAGER_IMAGE_TAG>
-
longhornio/longhorn-engine
image: <REGISTRY_URL>/longhorn-engine:<LONGHORN_ENGINE_IMAGE_TAG>
-
longhornio/longhorn-instance-manager
image: <REGISTRY_URL>/longhorn-instance-manager:<LONGHORN_INSTANCE_MANAGER_IMAGE_TAG>
-
longhornio/longhorn-share-manager
image: <REGISTRY_URL>/longhorn-share-manager:<LONGHORN_SHARE_MANAGER_IMAGE_TAG>
-
longhornio/longhorn-ui
image: <REGISTRY_URL>/longhorn-ui:<LONGHORN_UI_IMAGE_TAG>
示例:
apiVersion: apps/v1 kind: Deployment metadata: labels: app: longhorn-ui name: longhorn-ui namespace: longhorn-system spec: replicas: 1 selector: matchLabels: app: longhorn-ui template: metadata: labels: app: longhorn-ui spec: containers: - name: longhorn-ui image: <REGISTRY_URL>/longhorn-ui:<LONGHORN_UI_IMAGE_TAG> ## Add image name and tag here ports: - containerPort: 8000 env: - name: LONGHORN_MANAGER_IP value: "http://longhorn-backend:9500" imagePullSecrets: - name: <SECRET_NAME> serviceAccountName: longhorn-service-account
-
-
-
使用修改后的
manifest
文件部署Longhorn
kubectl apply -f longhorn.yaml
使用 Helm Chart
在 v1.1.2
中,Longhorn
自動為鏡像添加 <REGISTRY_URL> 前綴。您只需設置 registryUrl
參數即可從您的私有 registry
中提取鏡像。
注意: 一旦您將
registryUrl
設置為您的私有registry
,Longhorn
會嘗試專門從注冊表中提取鏡像。確保所有Longhorn
組件的鏡像都在注冊表中,否則Longhorn
將無法拉取鏡像。
使用默認鏡像名稱
如果您按照此處推薦的方式保留鏡像名稱,則只需執行以下步驟:
-
克隆 Longhorn 倉庫:
git clone https://github.com/longhorn/longhorn.git
-
在
chart/values.yaml
-
指定
Private registry URL
。如果注冊表需要身份驗證,請指定Private registry user
、Private registry password
和Private registry secret
。
Longhorn
將使用這些信息自動生成一個secret
,並使用它從您的私人registry
中提取鏡像。defaultSettings: registrySecret: <SECRET_NAME> privateRegistry: registryUrl: <REGISTRY_URL> registryUser: <REGISTRY_USER> registryPasswd: <REGISTRY_PASSWORD> registrySecret: <REGISTRY_SECRET_NAME>
-
使用自定義鏡像名稱
如果要使用自定義圖像的名稱,可以使用以下步驟:
-
克隆 longhorn repo
git clone https://github.com/longhorn/longhorn.git
-
在
chart/values.yaml
中注意: 不包括私有
registry
前綴,它將自動添加。例如:如果您的鏡像是example.com/username/longhorn-manager
,請在以下 charts 中使用username/longhorn-manager
。-
指定 Longhorn 鏡像和
tag
:image: longhorn: engine: repository: longhornio/longhorn-engine tag: <LONGHORN_ENGINE_IMAGE_TAG> manager: repository: longhornio/longhorn-manager tag: <LONGHORN_MANAGER_IMAGE_TAG> ui: repository: longhornio/longhorn-ui tag: <LONGHORN_UI_IMAGE_TAG> instanceManager: repository: longhornio/longhorn-instance-manager tag: <LONGHORN_INSTANCE_MANAGER_IMAGE_TAG> shareManager: repository: longhornio/longhorn-share-manager tag: <LONGHORN_SHARE_MANAGER_IMAGE_TAG>
-
指定 CSI Driver 組件鏡像和標簽:
csi: attacher: repository: longhornio/csi-attacher tag: <CSI_ATTACHER_IMAGE_TAG> provisioner: repository: longhornio/csi-provisioner tag: <CSI_PROVISIONER_IMAGE_TAG> nodeDriverRegistrar: repository: longhornio/csi-node-driver-registrar tag: <CSI_NODE_DRIVER_REGISTRAR_IMAGE_TAG> resizer: repository: longhornio/csi-resizer tag: <CSI_RESIZER_IMAGE_TAG> snapshotter: repository: longhornio/csi-snapshotter tag: <CSI_SNAPSHOTTER_IMAGE_TAG>
-
指定
Private registry URL
。如果registry
需要身份驗證,請指定Private registry user
、Private registry password
和Private registry secret
。
Longhorn
將使用這些信息自動生成一個secret
,並使用它從您的私有registry
中提取鏡像。defaultSettings: registrySecret: <SECRET_NAME> privateRegistry: registryUrl: <REGISTRY_URL> registryUser: <REGISTRY_USER> registryPasswd: <REGISTRY_PASSWORD>
-
-
安裝 Longhorn
-
Helm2
helm install ./chart --name longhorn --namespace longhorn-system
-
Helm3
kubectl create namespace longhorn-system
helm install longhorn ./chart --namespace longhorn-system
-
使用 Rancher app
使用默認鏡像名稱
如果您按照上面推薦的方式保留鏡像名稱,則只需執行以下步驟:
-
在
Private Registry Settings
部分指定:- 私有
registry URL
- 私有
registry user
- 私有
registry password
- 私有
registry secret name
Longhorn 將使用這些信息自動生成一個
secret
,並使用它從您的私人registry
中提取鏡像。 - 私有
使用自定義鏡像名稱
-
如果要使用自定義鏡像的名稱,可以將
Use Default Images
設置為False
並指定鏡像的名稱。注意: 不包括私有
registry
前綴,它將自動添加。例如:如果您的鏡像是example.com/username/longhorn-manager
,請在以下 charts 中使用username/longhorn-manager
。 -
指定
Private registry URL
。如果注冊中心需要身份驗證,請指定Private registry user
、Private registry password
和Private registry secret name
。
Longhorn 將使用這些信息自動生成一個secret
,並使用它從您的私人registry
中提取鏡像。
故障排除
對於 Helm/Rancher 安裝,如果用戶忘記提交 secret
以對私有 registry
進行身份驗證,則 longhorn-manager DaemonSet
將無法創建。
-
創建 Kubernetes secret
kubectl -n longhorn-system create secret docker-registry <SECRET_NAME> --docker-server=<REGISTRY_URL> --docker-username=<REGISTRY_USER> --docker-password=<REGISTRY_PASSWORD>
-
手動創建
registry-secret
設置對象。apiVersion: longhorn.io/v1beta1 kind: Setting metadata: name: registry-secret namespace: longhorn-system value: <SECRET_NAME>
kubectl apply -f registry-secret.yml
-
刪除 Longhorn 並重新安裝。
-
Helm2
helm uninstall ./chart --name longhorn --namespace longhorn-system
helm install ./chart --name longhorn --namespace longhorn-system
-
Helm3
helm uninstall longhorn ./chart --namespace longhorn-system
helm install longhorn ./chart --namespace longhorn-system
-
推薦:
強烈建議不要操作鏡像 tag
,尤其是實例管理器鏡像 tag
,例如 v1_20200301
,因為我們有意使用日期以避免將其與 Longhorn 版本相關聯。
Longhorn 組件的鏡像托管在 Dockerhub 中的 longhornio
帳戶下。 例如,longhornio/longhorn-manager:v1.1.2
。
建議在將鏡像推送到私有 registry
時保持帳戶名 longhornio
相同。這有助於避免不必要的配置問題。
公眾號:黑客下午茶