Longhorn云原生容器分布式存儲-Air Gap安裝
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 加載鏡像并將它們推送到
- 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>
- longhorn-driver-deployer Deployment
- longhorn-manager DaemonSet
- longhorn-ui Deployment
- 在以下資源中將您的 secret 名稱 SECRET_NAME 添加到 imagePullSecrets.name
示例:
- 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 應用以下修改
- 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-share-manager
- image: <REGISTRY_URL>/longhorn-instance-manager:<LONGHORN_INSTANCE_MANAGER_IMAGE_TAG>
- longhornio/longhorn-ui
- image: <REGISTRY_URL>/longhorn-ui:<LONGHORN_UI_IMAGE_TAG>
- CSI_ATTACHER_IMAGE
- CSI_PROVISIONER_IMAGE
- CSI_NODE_DRIVER_REGISTRAR_IMAGE
- CSI_RESIZER_IMAGE
- CSI_SNAPSHOTTER_IMAGE
修改 longhorn-driver-deployer Deployment 中的 Kubernetes CSI driver 組件環境變量指向你的私有 registry 鏡像
- - 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 鏡像
示例:
- 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 自動為鏡像添加
注意: 一旦您將 registryUrl 設置為您的私有 registry ,Longhorn 會嘗試專門從注冊表中提取鏡像。確保所有 Longhorn 組件的鏡像都在注冊表中,否則 Longhorn 將無法拉取鏡像。
使用默認鏡像名稱
如果您按照此處推薦的方式保留鏡像名稱,則只需執行以下步驟:
克隆 Longhorn 倉庫:
- git clone https://github.com/longhorn/longhorn.git
在 chart/values.yaml
Longhorn 將使用這些信息自動生成一個 secret,并使用它從您的私人 registry 中提取鏡像。
- defaultSettings:
- registrySecret: <SECRET_NAME>
- privateRegistry:
- registryUrl: <REGISTRY_URL>
- registryUser: <REGISTRY_USER>
- registryPasswd: <REGISTRY_PASSWORD>
- registrySecret: <REGISTRY_SECRET_NAME>
- 指定 Private registry URL。如果注冊表需要身份驗證,請指定 Private registry user、Private registry password 和 Private registry secret。
使用自定義鏡像名稱
如果要使用自定義圖像的名稱,可以使用以下步驟:
克隆 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 部分指定:
Longhorn 將使用這些信息自動生成一個 secret,并使用它從您的私人 registry 中提取鏡像。
- 私有 registry URL
- 私有 registry user
- 私有 registry password
- 私有 registry secret name
使用自定義鏡像名稱
- 如果要使用自定義鏡像的名稱,可以將 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 相同。這有助于避免不必要的配置問題。