Longhorn 雲原生容器分布式存儲 - Air Gap 安裝


內容來源於官方 Longhorn 1.1.2 英文技術手冊。

系列

Longhorn 可以通過使用 manifest fileHelm chartRancher 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

  1. 獲取 Longhorn Deployment manifest file

    wget https://raw.githubusercontent.com/longhorn/longhorn/v1.1.2/deploy/longhorn.yaml

  2. 創建 Longhorn namespace

    kubectl create namespace longhorn-system

  3. 如果私有 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 Deployment
      • longhorn-manager DaemonSet
      • longhorn-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
      
  4. 對 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
      
  5. 使用修改后的 manifest 文件部署 Longhorn

    kubectl apply -f longhorn.yaml

使用 Helm Chart

v1.1.2 中,Longhorn 自動為鏡像添加 <REGISTRY_URL> 前綴。您只需設置 registryUrl 參數即可從您的私有 registry 中提取鏡像。

注意: 一旦您將 registryUrl 設置為您的私有 registryLonghorn 會嘗試專門從注冊表中提取鏡像。確保所有 Longhorn 組件的鏡像都在注冊表中,否則 Longhorn 將無法拉取鏡像。

使用默認鏡像名稱

如果您按照此處推薦的方式保留鏡像名稱,則只需執行以下步驟:

  1. 克隆 Longhorn 倉庫:

    git clone https://github.com/longhorn/longhorn.git

  2. chart/values.yaml

    • 指定 Private registry URL。如果注冊表需要身份驗證,請指定 Private registry userPrivate registry passwordPrivate registry secret
      Longhorn 將使用這些信息自動生成一個 secret,並使用它從您的私人 registry 中提取鏡像。

      defaultSettings:
        registrySecret: <SECRET_NAME>
      
      privateRegistry:
          registryUrl: <REGISTRY_URL>
          registryUser: <REGISTRY_USER>
          registryPasswd: <REGISTRY_PASSWORD>
          registrySecret: <REGISTRY_SECRET_NAME>
      

使用自定義鏡像名稱

如果要使用自定義圖像的名稱,可以使用以下步驟:

  1. 克隆 longhorn repo

    git clone https://github.com/longhorn/longhorn.git

  2. 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 userPrivate registry passwordPrivate registry secret
      Longhorn 將使用這些信息自動生成一個 secret,並使用它從您的私有 registry 中提取鏡像。

      defaultSettings:
        registrySecret: <SECRET_NAME>
      
      privateRegistry:
          registryUrl: <REGISTRY_URL>
          registryUser: <REGISTRY_USER>
          registryPasswd: <REGISTRY_PASSWORD>
      
  3. 安裝 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 userPrivate registry passwordPrivate registry secret name
    Longhorn 將使用這些信息自動生成一個 secret,並使用它從您的私人 registry 中提取鏡像。

故障排除

對於 Helm/Rancher 安裝,如果用戶忘記提交 secret 以對私有 registry 進行身份驗證,則 longhorn-manager DaemonSet 將無法創建。

  1. 創建 Kubernetes secret

    kubectl -n longhorn-system create secret docker-registry <SECRET_NAME> --docker-server=<REGISTRY_URL> --docker-username=<REGISTRY_USER> --docker-password=<REGISTRY_PASSWORD>

  2. 手動創建 registry-secret 設置對象。

    apiVersion: longhorn.io/v1beta1
    kind: Setting
    metadata:
      name: registry-secret
      namespace: longhorn-system
    value: <SECRET_NAME>
    

    kubectl apply -f registry-secret.yml

  3. 刪除 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 相同。這有助於避免不必要的配置問題。

公眾號:黑客下午茶


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM