内容来源于官方 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 相同。这有助于避免不必要的配置问题。

公众号:黑客下午茶

Longhorn 云原生容器分布式存储 - Air Gap 安装的更多相关文章

  1. Longhorn 云原生容器分布式存储 - Python Client

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  2. Longhorn 云原生容器分布式存储 - 故障排除指南

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  3. Longhorn,企业级云原生容器分布式存储 - 定制默认设置

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生容器分布式存储 - 设计架构和概念 Longhorn 云原生容器分布式存储 - ...

  4. Longhorn,企业级云原生容器分布式存储 - 备份与恢复

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  5. Longhorn,企业级云原生容器分布式存储 - 监控(Prometheus+AlertManager+Grafana)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  6. Longhorn,企业级云原生容器分布式存储 - 支持 ReadWriteMany (RWX) 工作负载(实验性功能)

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  7. Longhorn,企业级云原生容器分布式存储 - K8S 资源配置示例

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  8. Longhorn,企业级云原生容器分布式存储 - 高可用

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念 Longhorn 企业级云原生容器分 ...

  9. Longhorn 企业级云原生容器存储解决方案-部署篇

    内容来源于官方 Longhorn 1.1.2 英文技术手册. 系列 Longhorn 是什么? Longhorn 云原生分布式块存储解决方案设计架构和概念 安装 Longhorn 可以通过多种方式安装 ...

随机推荐

  1. linux服务器安装svn超详细介绍

    #!/bin/sh REPOS="$1" REV="$2" export LANG=en_US.UTF-8 LOG_PATH=/tmp/svn.log echo ...

  2. 01_什么是BS结构,什么是CS结构?

    C/S和B/S都是互联网中常见的网络结构模型. 一.什么是C/S模型? C是英文单词"Client"的首字母,即客户端的意思,C/S就是"Client/Server&qu ...

  3. windows下python -m pip install --upgrade pip升级后报错的解决方法

    前言: 笔者装某库的时候提示需要升级pip版本,就python -m pip install --upgrade pip默认升级了,结果升级之后只要输入pip就有报错(如下图),网上百度了很多解决方法 ...

  4. vue函数式组件详解

    本篇将详细介绍vue组件化之函数式组件,会用到以下api: Vue.component().Vue.extend().$createElement.patch(). 从事vue开发的小伙伴,平时组件化 ...

  5. 用QT写的简单Todo记事本-附源码(浮动窗口)

    去年边学边写了搞了很久, 已经好久没继续开发了, 先放出来供大家参考吧. 发现自己的学习能力还是不错的. 技术点: 使用QT, QML技术 代码参考: https://github.com/cnscu ...

  6. 大数据开发-Go-新手常遇问题

    真正在工作中用Go的时间不久,所以也作为新手,总结了一些常见的问题和坑 Go 中指针使用注意点 // 1.空指针反向引用不合法 package main func main() { var p *in ...

  7. JS知识梳理--图表

  8. 音视频开发之H.264 入门知识

    大家如果有做过音视频相关的项目,那么肯定对 H.264 相关的概念了解的比较通透,这里我为什么还要写这样一篇文章呢?一来是为了对知识的总结,二来是为了给刚入门音视频的同学一个参考. 基础概念 H.26 ...

  9. 针对Cloud-init的可行性报告

    by hyc 针对Cloud-init的可行性报告 一.Cloud-init研究进展: (1)ubuntu镜像: 已在版本为ubuntu-server-14.04-amd64上实现了修改主机名和用户密 ...

  10. UNIX环境高级编程APUE练习4.6-实现类似cp(1)的程序,保留文件中的空洞

    1 题面 编写类似cp(1)的程序,它复制包含空洞的文件,但是不将字节0写到输出文件中去. 2 基本思路 首先要搞清楚空洞的性质以判断一个文件是否有空洞,以及空洞的位置 知道了空洞的位置之后,读到源文 ...