3.2. 配置对象存储
在安装 Red Hat Quay 前,您需要配置对象存储,无论您是否允许 Red Hat Quay Operator 管理存储或自己管理它。
如果您希望 Red Hat Quay Operator 负责管理存储,请参阅 Managed 存储中的部分来安装和配置 NooBaa 和 Red Hat OpenShift Data Foundation Operator。
如果您使用单独的存储解决方案,请在配置 Operator 时将 objectstorage
设置为 unmanaged
。请参见以下部分。非受管存储,以了解配置现有存储的详细信息。
3.2.1. 使用非受管存储
本节为方便起见,为非受管存储提供了配置示例。有关如何设置对象存储的完整说明,请参阅 Red Hat Quay 配置指南。
3.2.1.1. AWS S3 存储
在为 Red Hat Quay 部署配置 AWS S3 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG: s3Storage: - S3Storage - host: s3.us-east-2.amazonaws.com s3_access_key: ABCDEFGHIJKLMN s3_secret_key: OL3ABCDEFGHIJKLMN s3_bucket: quay_bucket s3_region: <region> storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - s3Storage
3.2.1.2. AWS Cloudfront 存储
在为 Red Hat Quay 部署配置 AWS Cloudfront 时,请使用以下示例。
在配置 AWS Cloudfront 存储时,必须满足以下条件才能正确使用 Red Hat Quay:
-
您必须设置一个 Origin 路径,该路径 与
config.yaml
文件中定义的 Red Hat Quay 的存储路径一致。如果无法满足这一要求,在拉取镜像时会导致403
错误。如需更多信息,请参阅 Origin 路径。 - 您必须配置 Bucket 策略和 跨源资源共享(CORS) 策略。
-
您必须设置一个 Origin 路径,该路径 与
CloudFront S3 示例 YAML
DISTRIBUTED_STORAGE_CONFIG: default: - CloudFrontedS3Storage - cloudfront_distribution_domain: <CLOUDFRONT_DISTRIBUTION_DOMAIN> cloudfront_key_id: <CLOUDFRONT_KEY_ID> cloudfront_privatekey_filename: <CLOUDFRONT_PRIVATE_KEY_FILENAME> host: <S3_HOST> s3_access_key: <S3_ACCESS_KEY> s3_bucket: <S3_BUCKET_NAME> s3_secret_key: <S3_SECRET_KEY> storage_path: <STORAGE_PATH> s3_region: <S3_REGION> DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: - default DISTRIBUTED_STORAGE_PREFERENCE: - default
bucket 策略示例
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>:user/CloudFront Origin Access Identity <CLOUDFRONT_OAI_ID>" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::<S3_BUCKET_NAME>/*" }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<AWS_ACCOUNT_ID>:user/CloudFront Origin Access Identity <CLOUDFRONT_OAI_ID>" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::<S3_BUCKET_NAME>" } ] }
3.2.1.3. Google Cloud 存储
在为 Red Hat Quay 部署配置 Google Cloud 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG:
googleCloudStorage:
- GoogleCloudStorage
- access_key: GOOGQIMFB3ABCDEFGHIJKLMN
bucket_name: quay-bucket
secret_key: FhDAYe2HeuAKfvZCAGyOioNaaRABCDEFGHIJKLMN
storage_path: /datastorage/registry
boto_timeout: 120 1
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- googleCloudStorage
- 1
- 可选。从连接时抛出超时异常的时间(以秒为单位)。默认值为
60
秒。另外,还包括时间(以秒为单位),直到尝试进行连接时抛出超时异常。默认值为60
秒。
3.2.1.4. Microsoft Azure 存储
在为 Red Hat Quay 部署配置 Microsoft Azure 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG:
azureStorage:
- AzureStorage
- azure_account_name: azure_account_name_here
azure_container: azure_container_here
storage_path: /datastorage/registry
azure_account_key: azure_account_key_here
sas_token: some/path/
endpoint_url: https://[account-name].blob.core.usgovcloudapi.net 1
DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: []
DISTRIBUTED_STORAGE_PREFERENCE:
- azureStorage
- 1
- Microsoft Azure 存储的
endpoint_url
参数是可选的,可用于 Microsoft Azure Government (MAG)端点。如果留空,则endpoint_url
将连接到正常的 Microsoft Azure 区域。从 Red Hat Quay 3.7 开始,您必须使用 MAG Blob 服务的主端点。使用 MAG Blob 服务的二级端点将导致以下错误:
AuthenticationErrorDetail:Cannot find the claimed account when trying the account whusc8-secondary
。
3.2.1.5. Ceph/RadosGW 存储
在为 Red Hat Quay 部署配置 Ceph/RadosGW 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG: radosGWStorage: #storage config name - RadosGWStorage #actual driver - access_key: access_key_here #parameters secret_key: secret_key_here bucket_name: bucket_name_here hostname: hostname_here is_secure: 'true' port: '443' storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: #must contain name of the storage config - radosGWStorage
3.2.1.6. Swift 存储
在为 Red Hat Quay 部署配置 Swift 存储时,请使用以下示例。
DISTRIBUTED_STORAGE_CONFIG: swiftStorage: - SwiftStorage - swift_user: swift_user_here swift_password: swift_password_here swift_container: swift_container_here auth_url: https://example.org/swift/v1/quay auth_version: 3 os_options: tenant_id: <osp_tenant_id_here> user_domain_name: <osp_domain_name_here> ca_cert_path: /conf/stack/swift.cert" storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - swiftStorage
3.2.1.7. NooBaa 非受管存储
使用以下步骤将 NooBaa 部署为您的非受管存储配置。
步骤
-
在 Red Hat Quay 控制台中,导航到 Storage
Object Bucket Claims,在 Red Hat Quay 控制台中创建一个 NooBaa Object Bucket Claim。 - 检索 Object Bucket Claim 数据详情,包括 Access Key, Bucket Name, Endpoint (hostname)和 Secret Key。
创建
config.yaml
配置文件,该文件使用 Object Bucket Claim 的信息:DISTRIBUTED_STORAGE_CONFIG: default: - RHOCSStorage - access_key: WmrXtSGk8B3nABCDEFGH bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef hostname: s3.openshift-storage.svc.cluster.local is_secure: true port: "443" secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default
有关配置对象 Bucket 声明的更多信息,请参阅 Object Bucket Claim。
3.2.2. 使用非受管 NooBaa 实例
使用以下步骤将非受管 NooBaa 实例用于 Red Hat Quay 部署。
步骤
-
在控制台的 Storage
Object Bucket Claims 中创建 NooBaa Object Bucket Claim。 -
检索 Object Bucket Claim 数据详细信息,包括
Access Key
、Bucket Name
、Endpoint (hostname)
和Secret Key
。 使用 Object Bucket Claim 的信息创建
config.yaml
配置文件。例如:DISTRIBUTED_STORAGE_CONFIG: default: - RHOCSStorage - access_key: WmrXtSGk8B3nABCDEFGH bucket_name: my-noobaa-bucket-claim-8b844191-dc6c-444e-9ea4-87ece0abcdef hostname: s3.openshift-storage.svc.cluster.local is_secure: true port: "443" secret_key: X9P5SDGJtmSuHFCMSLMbdNCMfUABCDEFGH+C5QD storage_path: /datastorage/registry DISTRIBUTED_STORAGE_DEFAULT_LOCATIONS: [] DISTRIBUTED_STORAGE_PREFERENCE: - default
3.2.3. 受管存储
如果您希望 Red Hat Quay Operator 管理 Red Hat Quay 的对象存储,您的集群需要能够通过 ObjectBucketClaim
API 提供对象存储。使用 Red Hat OpenShift Data Foundation Operator,有两个支持的选项:
由本地 Kubernetes
PersistentVolume
存储支持的 Multi-Cloud Object Gateway 的独立实例- 不提供高可用性
- 包括在 Red Hat Quay 订阅中
- Red Hat OpenShift Data Foundation 不需要单独的订阅
使用扩展对象服务和 Ceph 的生产环境部署 Red Hat OpenShift Data Foundation
- 高可用性
- Red Hat OpenShift Data Foundation 需要单独的订阅
要使用 standalone 实例选项,请继续阅读以下内容。对于 Red Hat OpenShift Data Foundation 的生产环境部署,请参阅 官方文档。
Object storage 磁盘空间由 Red Hat Quay Operator 自动分配 50 GiB。这个数字代表了大多数中小型 Red Hat Quay 安装的可用存储,但可能不足以满足您的用例。Red Hat OpenShift Data Foundation 重新定义大小目前没有被 Red Hat Quay Operator 处理。如需了解更多详细信息,请参见以下有关重新定义受管存储大小的部分。
3.2.3.1. 在 Red Hat OpenShift Data Foundation Operator for Red Hat Quay 中使用 Multicloud Object Gateway 组件
作为 Red Hat Quay 订阅的一部分,用户可以使用 Red Hat OpenShift Data Foundation Operator 的 Multicloud Object Gateway 组件(以前称为 OpenShift Container Storage Operator)。此网关组件允许您为基于 Kubernetes PersistentVolume
的块存储支持的 Red Hat Quay 提供 S3 兼容对象存储接口。使用量仅限于由 Operator 管理的 Red Hat Quay 部署,以及 multicloud Object Gateway 实例的确切规格,如下所述。
因为 Red Hat Quay 不支持本地文件系统存储,所以用户可以使用网关与 Kubernetes PersistentVolume
存储结合使用,以提供受支持的部署。PersistentVolume
直接在网关实例上挂载,作为对象存储的后备存储,支持任何基于块的 StorageClass
。
按照 PersistentVolume
的性质,这不是横向扩展、高度可用的解决方案,且不会取代 Red Hat OpenShift Data Foundation 等横向扩展的存储系统。只有网关的一个实例正在运行。如果因为重新调度、更新或计划外停机而运行网关的 pod 不可用,这会导致连接的 Red Hat Quay 实例的临时降级。
使用以下步骤,您将安装 Local Storage Operator、Red Hat OpenShift Data Foundation,并创建一个独立多云对象网关以在 OpenShift Container Platform 上部署 Red Hat Quay。
以下文档与官方 Red Hat OpenShift Data Foundation 文档 共享通用性。
3.2.3.1.1. 在 OpenShift Container Platform 上安装 Local Storage Operator
在本地存储设备上创建 Red Hat OpenShift Data Foundation 集群前,请使用以下步骤从 OperatorHub 安装 Local Storage Operator。
- 登录 OpenShift Web 控制台。
-
点 Operators
OperatorHub。 - 在搜索框中输入 本地存储,从 Operator 列表中查找 Local Storage Operator。点 Local Storage。
- 点 Install。
在 Install Operator 页面中设置以下选项:
- 对于更新频道,请选择 stable。
- 对于 Installation 模式,选择 A specific namespace on the cluster。
- 对于 Installed Namespace,选择 Operator recommended namespace openshift-local-storage。
- 对于更新批准,请选择 Automatic。
- 点 Install。
3.2.3.1.2. 在 OpenShift Container Platform 上安装 Red Hat OpenShift Data Foundation
使用以下步骤在 OpenShift Container Platform 上安装 Red Hat OpenShift Data Foundation。
先决条件
-
使用具有
cluster-admin
和 Operator 安装权限的账户访问 OpenShift Container Platform 集群。 - OpenShift Container Platform 集群中必须至少有三个 worker 节点。
- 有关其他资源要求,请参阅规划您的部署指南。
步骤
- 登录 OpenShift Web 控制台。
-
点 Operators
OperatorHub。 - 在搜索框中输入 OpenShift Data Foundation。单击 OpenShift Data Foundation。
- 点 Install。
在 Install Operator 页面中设置以下选项:
- 对于 Update channel,请选择最新的稳定版本。
- 对于 Installation 模式,选择 A specific namespace on the cluster。
- 对于 Installed Namespace,选择 Operator recommended Namespace: openshift-storage。
对于更新批准,请选择 Automatic 或 Manual。
如果选择 Automatic 更新,Operator Lifecycle Manager(OLM)将自动升级 Operator 的运行实例,而无需任何干预。
如果选择 手动 更新,则 OLM 会创建一个更新请求。作为集群管理员,您必须手动批准该更新请求,才能将 Operator 更新至更新的版本。
- 对于 Console 插件,选择 Enable。
点 Install。
安装 Operator 后,用户界面中会出现带有
Web 控制台更新信息
的弹出窗口。点这个弹出窗口中的 Refresh web console 来反映控制台的更改。- 继续以下部分"创建独立多云对象网关",以使用 Red Hat Quay 的 Multicloud 对象网关组件。
3.2.3.1.3. 使用 OpenShift Container Platform UI 创建独立多云对象网关
使用以下步骤创建独立多云对象网关。
先决条件
- 已安装 Local Storage Operator。
- 已安装 Red Hat OpenShift Data Foundation Operator。
步骤
在 OpenShift Web 控制台中,点 Operators
Installed Operators 查看所有已安装的 Operator。 确保命名空间为
openshift-storage
。- 单击 Create StorageSystem。
在 Backing storage 页面中,选择以下内容:
- 为 Deployment 类型选择 Multicloud Object Gateway。
- 选择 Create a new StorageClass using the local storage devices 选项。
点 Next。
注意如果还没有安装,系统会提示您安装 Local Storage Operator。点 Install 并按照"在 OpenShift Container Platform 上安装 Local Storage Operator"中所述的步骤进行操作。
在 Create local volume set 页面中,提供以下信息:
- 为 LocalVolumeSet 和 StorageClass 输入一个名称。默认情况下,存储类名称会出现本地卷集名称。您可以更改名称。
选择以下任意一项:
所有节点上的磁盘
使用与所有节点上所选过滤器匹配的可用磁盘。
所选节点上的磁盘
仅在所选节点上使用与所选过滤器匹配的可用磁盘。
- 从可用 Disk Type 列表中,选择 SSD/NVMe。
展开 Advanced 部分并设置以下选项:
卷模式
文件系统会被默认选择。始终为卷模式选择 Filesystem。
设备类型
从下拉列表中选择一个或多个设备类型。
磁盘大小
为设备设置最小 100GB 大小,以及需要包含的设备的最大可用大小。
磁盘限制上限
这表示节点上可以创建的 PV 数量上限。如果此字段留空,则为匹配节点上的所有可用磁盘创建 PV。
点 Next
此时会显示一个用于确认创建
LocalVolumeSet
的弹出窗口。- 单击 Yes 以继续。
在 Capacity 和 nodes 页面中,配置以下内容:
- 可用的原始容量会根据与存储类关联的所有附加磁盘填充容量值。这将需要一些时间才能出现。Selected nodes 列表根据存储类显示节点。
- 点 Next 继续。
可选。选择 Connect to an external key management service 复选框。这是集群范围加密的可选选项。
- 从 Key Management Service Provider 下拉列表中,选择 Vault 或 Thales CipherTrust Manager (using KMIP)。如果选择了 Vault,请进入下一步。如果您选择了 Thales CipherTrust Manager (using KMIP),请转到步骤 iii。
选择身份验证方法。
使用令牌验证方法
- 输入唯一的连接名称 , Vault 服务器的主机地址('https://<hostname 或 ip>'),端口号和令牌。
展开 Advanced Settings,以根据您的
Vault
配置输入其他设置和证书详情:- 在 后端路径中输入为 OpenShift Data Foundation 专用且唯一的 Key Value secret 路径。
- (可选)输入 TLS 服务器名称和 Vault Enterprise 命名空间。
- 上传对应的 PEM 编码证书文件,以提供 CA 证书、 客户端证书和客户端私钥。
点 Save 并跳过步骤 iv。
使用 Kubernetes 验证方法
- 输入唯一的 Vault Connection Name, Vault 服务器的主机地址('https://<hostname 或 ip>')、端口号和角色名称。
展开 Advanced Settings 以根据您的 Vault 配置输入额外的设置和证书详情:
- 在 后端路径中输入为 Red Hat OpenShift Data Foundation 专用 且唯一的 Key Value secret 路径。
- 可选:输入 TLS Server Name 和 Authentication Path (如果适用)。
- 上传对应的 PEM 编码证书文件,以提供 CA 证书、客户端证书和客户端私钥。
- 点 Save 并跳过步骤 iv。
要使用 Thales CipherTrust Manager (using KMIP) 作为 KMS 供应商,请按照以下步骤执行:
- 在项目中输入密钥管理服务的唯一连接名称。
在 Address 和 Port 部分中,输入 Thales CipherTrust Manager 的 IP 以及在其中启用了 KMIP 接口的端口。例如:
- 地址: 123.34.3.2
- 端口 :5696
- 上传 客户端证书、CA 证书和 客户端私钥。
- 如果启用了 StorageClass 加密,请输入用于加密和解密的唯一标识符。
-
TLS Server 字段是可选的,并在没有 KMIP 端点的 DNS 条目时使用。例如:
kmip_all_<port>.ciphertrustmanager.local
。
- 选择 网络。
- 点 Next。
- 在 Review and create 页面中,检查配置详情。若要修改任何配置设置,请单击 Back。
- 单击 Create StorageSystem。
3.2.3.1.4. 使用 CLI 创建独立多云对象网关
使用以下步骤安装 Red Hat OpenShift Data Foundation (以前称为 OpenShift Container Storage)Operator 并配置单个实例 Multi-Cloud Gateway 服务。
安装 Red Hat OpenShift Data Foundation 的集群中无法并行运行以下配置。
步骤
-
在 OpenShift Web 控制台中,然后选择 Operators
OperatorHub。 - 搜索 Red Hat OpenShift Data Foundation,然后选择 Install。
- 接受所有默认选项,然后选择 Install。
通过查看 Status 列确认 Operator 已安装,该列应标记为 Succeeded。
警告安装 Red Hat OpenShift Data Foundation Operator 后,会提示您创建存储系统。不要遵循这一指令。反之,按照以下步骤所述创建 NooBaa 对象存储。
在您的机器上,使用以下信息创建一个名为
noobaa.yaml
的文件:apiVersion: noobaa.io/v1alpha1 kind: NooBaa metadata: name: noobaa namespace: openshift-storage spec: dbResources: requests: cpu: '0.1' memory: 1Gi dbType: postgres coreResources: requests: cpu: '0.1' memory: 1Gi
这将创建 Multi-cloud 对象网关 的单一实例部署。
使用以下命令应用配置:
$ oc create -n openshift-storage -f noobaa.yaml
输出示例
noobaa.noobaa.io/noobaa created
几分钟后,Multi-cloud 对象网关 应完成调配。您可以输入以下命令检查其状态:
$ oc get -n openshift-storage noobaas noobaa -w
输出示例
NAME MGMT-ENDPOINTS S3-ENDPOINTS IMAGE PHASE AGE noobaa [https://10.0.32.3:30318] [https://10.0.32.3:31958] registry.redhat.io/ocs4/mcg-core-rhel8@sha256:56624aa7dd4ca178c1887343c7445a9425a841600b1309f6deace37ce6b8678d Ready 3d18h
通过创建以下 YAML 文件,名为
noobaa-pv-backing-store.yaml
来配置网关的后备存储:apiVersion: noobaa.io/v1alpha1 kind: BackingStore metadata: finalizers: - noobaa.io/finalizer labels: app: noobaa name: noobaa-pv-backing-store namespace: openshift-storage spec: pvPool: numVolumes: 1 resources: requests: storage: 50Gi 1 storageClass: STORAGE-CLASS-NAME 2 type: pv-pool
输入以下命令应用配置:
$ oc create -f noobaa-pv-backing-store.yaml
输出示例
backingstore.noobaa.io/noobaa-pv-backing-store created
这会为网关创建后备存储配置。Red Hat Quay 中的所有镜像将通过由上述配置创建的
PersistentVolume
中的网关存储为对象。运行以下命令,使
PersistentVolume
后备存储 Red Hat Quay Operator 发布的所有ObjectBucketClaims
默认:$ oc patch bucketclass noobaa-default-bucket-class --patch '{"spec":{"placementPolicy":{"tiers":[{"backingStores":["noobaa-pv-backing-store"]}]}}}' --type merge -n openshift-storage