Longhorn云原生容器分布式存储-Air Gap安装

简介: Longhorn云原生容器分布式存储-Air Gap安装

前提要求



  • 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>
  • 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


  1. 对 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-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>
  • 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


  1. 使用修改后的 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
    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 userPrivate registry passwordPrivate registry secret


使用自定义镜像名称


如果要使用自定义图像的名称,可以使用以下步骤:

  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 secretLonghorn 将使用这些信息自动生成一个 secret,并使用它从您的私有 registry 中提取镜像。


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


  1. 安装 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


微信图片_20220612173644.png


使用自定义镜像名称


  • 如果要使用自定义镜像的名称,可以将 Use Default Images 设置为 False 并指定镜像的名称。


注意: 不包括私有 registry 前缀,它将自动添加。例如:如果您的镜像是 example.com/username/longhorn-manager,请在以下 charts 中使用 username/longhorn-manager


微信图片_20220612173732.png


  • 指定 Private registry URL。如果注册中心需要身份验证,请指定 Private registry userPrivate registry passwordPrivate registry secret name。Longhorn 将使用这些信息自动生成一个 secret,并使用它从您的私人 registry 中提取镜像。


微信图片_20220612173745.png


故障排除



对于 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>


  1. kubectl apply -f registry-secret.yml


  1. 删除 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 相同。这有助于避免不必要的配置问题。

相关文章
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
阿里云PolarDB云原生数据库在TPC-C基准测试中以20.55亿tpmC的成绩刷新世界纪录,展现卓越性能与性价比。其轻量版满足国产化需求,兼具高性能与低成本,适用于多种场景,推动数据库技术革新与发展。
|
6月前
|
Java Linux 虚拟化
【Docker】(1)Docker的概述与架构,手把手带你安装Docker,云原生路上不可缺少的一门技术!
1. Docker简介 1.1 Docker是什么 为什么docker会出现? 假定您在开发一款平台项目,您的开发环境具有特定的配置。其他开发人员身处的环境配置也各有不同。 您正在开发的应用依赖于您当前的配置且还要依赖于某些配置文件。 您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。 **要求:**希望尽可能多在本地模拟这些环境而不产生重新创建服务器环境的开销 问题: 要如何确保应用能够在这些环境中运行和通过质量检测? 在部署过程中不出现令人头疼的版本、配置问题 无需重新编写代码和进行故障修复
541 2
|
9月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
756 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
Cloud Native 关系型数据库 分布式数据库
登顶TPC-C|云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
云原生数据库PolarDB技术揭秘:Limitless集群和分布式扩展篇
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
693 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
存储 SpringCloudAlibaba Java
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论。
【SpringCloud Alibaba系列】一文全面解析Zookeeper安装、常用命令、JavaAPI操作、Watch事件监听、分布式锁、集群搭建、核心理论
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
监控 安全 Cloud Native
阿里云容器服务&云安全中心团队荣获信通院“云原生安全标杆案例”奖
2024年12月24日,阿里云容器服务团队与云安全中心团队获得中国信息通信研究院「云原生安全标杆案例」奖。
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
543 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
8月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
694 15