内容来源于官方 Longhorn 1.1.2
英文技术手册。
系列
- Longhorn 是什么?
- Longhorn 云原生容器分布式存储 - 设计架构和概念
- Longhorn 云原生容器分布式存储 - 部署篇
- Longhorn 云原生容器分布式存储 - 券和节点
- Longhorn 云原生容器分布式存储 - K8S 资源配置示例
- Longhorn 云原生容器分布式存储 - 监控(Prometheus)
- Longhorn 云原生容器分布式存储 - 备份与恢复
- Longhorn 云原生容器分布式存储 - 高可用
- Longhorn 云原生容器分布式存储 - 支持 ReadWriteMany (RWX) 工作负载
- Longhorn 云原生容器分布式存储 - 定制部署默认设置
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
加载镜像并将它们推送到<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
-
获取 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>
-
在以下资源中将您的
secret
名称SECRET_NAME
添加到imagePullSecrets.name
longhorn-driver-deployer
Deploymentlonghorn-manager
DaemonSetlonghorn-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
-
-
对 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
-
-
-
使用修改后的
manifest
文件部署Longhorn
kubectl apply -f longhorn.yaml
使用 Helm Chart
在 v1.1.2
中,Longhorn
自动为镜像添加 <REGISTRY_URL> 前缀。您只需设置 registryUrl
参数即可从您的私有 registry
中提取镜像。
注意: 一旦您将
registryUrl
设置为您的私有registry
,Longhorn
会尝试专门从注册表中提取镜像。确保所有Longhorn
组件的镜像都在注册表中,否则Longhorn
将无法拉取镜像。
使用默认镜像名称
如果您按照此处推荐的方式保留镜像名称,则只需执行以下步骤:
-
克隆 Longhorn 仓库:
git clone https://github.com/longhorn/longhorn.git
-
在
chart/values.yaml
-
指定
Private registry URL
。如果注册表需要身份验证,请指定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>
- registrySecret: <REGISTRY_SECRET_NAME>
-
使用自定义镜像名称
如果要使用自定义图像的名称,可以使用以下步骤:
-
克隆 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
部分指定:- 私有
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 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
相同。这有助于避免不必要的配置问题。
公众号:黑客下午茶