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

為少發表於2021-08-30

內容來源於官方 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 相同。這有助於避免不必要的配置問題。

公眾號:黑客下午茶

相關文章