23.2.3. 为 GCP 配置 OpenShift Container Platform registry
Google Cloud Platform(GCP)提供对象存储,OpenShift Container Platform 可以使用 OpenShift Container Platform 使用 OpenShift Container Platform 容器镜像 registry 存储容器镜像。
如需更多信息,请参阅 GCP 文档中的 Cloud Storage。
先决条件
您必须在安装前创建存储桶来托管 registry 镜像。以下命令使用配置的服务帐户创建区域存储桶:
gsutil mb -c regional -l <region> gs://ocp-registry-bucket cat <<EOF > labels.json { "ocp-cluster": "mycluster" } EOF gsutil label set labels.json gs://ocp-registry-bucket rm -f labels.json
默认情况下,存储桶的数据会使用 Google 管理的密钥自动加密。要指定不同的密钥来加密数据,请参阅 GCP 中的数据加密选项。
如需更多信息,请参阅创建存储存储桶文档。
流程
配置 registry 的 Ansible 清单文件 以使用 Google Cloud Storage (GCS) 存储桶:
[OSEv3:vars] # GCP Provider Configuration openshift_hosted_registry_storage_provider=gcs openshift_hosted_registry_storage_kind=object openshift_hosted_registry_replicas=1 1 openshift_hosted_registry_storage_gcs_bucket=<bucket_name> 2 openshift_hosted_registry_storage_gcs_keyfile=<bucket_keyfile> 3 openshift_hosted_registry_storage_gcs_rootdirectory=<registry_directory> 4
如需更多信息,请参阅 GCP 文档中的 Cloud Storage。
23.2.3.1. 为 GCP 手动配置 OpenShift Container Platform registry
要使用 GCP 对象存储,请编辑 registry 的配置文件并挂载到 registry pod。
有关存储驱动程序配置文件的更多信息,请参阅 Google Cloud Storage Driver 文档。
流程
导出当前的 /etc/registry/config.yml 文件:
$ oc get secret registry-config \ -o jsonpath='{.data.config\.yml}' -n default | base64 -d \ >> config.yml.old
从旧的 /etc/registry/config.yml 文件创建新配置文件:
$ cp config.yml.old config.yml
编辑该文件以包含 GCP 参数。在 registry 配置文件的
storage
部分指定存储桶和密钥文件:storage: delete: enabled: true cache: blobdescriptor: inmemory gcs: bucket: ocp-registry 1 keyfile: mykeyfile 2
删除
registry-config
secret:$ oc delete secret registry-config -n default
重新创建 secret 来引用更新的配置文件:
$ oc create secret generic registry-config \ --from-file=config.yml -n default
重新部署 registry 以读取更新的配置:
$ oc rollout latest docker-registry -n default
23.2.3.1.1. 验证 registry 是否使用 GCP 对象存储
验证 registry 是否使用 GCP 存储桶存储:
流程
使用 GCP 存储成功部署 registry 后,如果 registry 部署使用
emptydir
而不是 GCP 存储桶存储,registrydeploymentconfig
不会显示任何信息:$ oc describe dc docker-registry -n default ... Mounts: ... /registry from registry-storage (rw) Volumes: registry-storage: Type: EmptyDir 1 ...
- 1
- 共享 pod 生命周期的临时目录。
检查 /registry 挂载点是否为空。这是将使用卷 GCP 存储:
$ oc exec \ $(oc get pod -l deploymentconfig=docker-registry \ -o=jsonpath='{.items[0].metadata.name}') -i -t -- ls -l /registry total 0
如果为空,它会因为 GCP 存储桶配置在
registry-config
secret 中执行:$ oc describe secret registry-config Name: registry-config Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== config.yml: 398 bytes
安装程序会使用扩展的 registry 功能创建带有所需配置的 config.yml 文件,如安装文档所述。要查看配置文件,包括存储存储桶配置的
storage
部分:$ oc exec \ $(oc get pod -l deploymentconfig=docker-registry \ -o=jsonpath='{.items[0].metadata.name}') \ cat /etc/registry/config.yml version: 0.1 log: level: debug http: addr: :5000 storage: delete: enabled: true cache: blobdescriptor: inmemory gcs: bucket: ocp-registry auth: openshift: realm: openshift middleware: registry: - name: openshift repository: - name: openshift options: pullthrough: True acceptschema2: True enforcequota: False storage: - name: openshift
或者,您可以查看 secret:
$ oc get secret registry-config -o jsonpath='{.data.config\.yml}' | base64 -d version: 0.1 log: level: debug http: addr: :5000 storage: delete: enabled: true cache: blobdescriptor: inmemory gcs: bucket: ocp-registry auth: openshift: realm: openshift middleware: registry: - name: openshift repository: - name: openshift options: pullthrough: True acceptschema2: True enforcequota: False storage: - name: openshift
您可以通过在 GCP 控制台中查看 Storage,然后点 Browser 并选择存储桶,或运行
gsutil
命令验证镜像推送是否成功:$ gsutil ls gs://ocp-registry/ gs://ocp-registry/docker/ $ gsutil du gs://ocp-registry/ 7660385 gs://ocp-registry/docker/registry/v2/blobs/sha256/03/033565e6892e5cc6dd03187d00a4575720a928db111274e0fbf31b410a093c10/data 7660385 gs://ocp-registry/docker/registry/v2/blobs/sha256/03/033565e6892e5cc6dd03187d00a4575720a928db111274e0fbf31b410a093c10/ 7660385 gs://ocp-registry/docker/registry/v2/blobs/sha256/03/ ...
如果使用 emptyDir
卷,/registry
挂载点类似如下:
$ oc exec \ $(oc get pod -l deploymentconfig=docker-registry \ -o=jsonpath='{.items[0].metadata.name}') -i -t -- df -h /registry Filesystem Size Used Avail Use% Mounted on /dev/sdc 30G 226M 30G 1% /registry $ oc exec \ $(oc get pod -l deploymentconfig=docker-registry \ -o=jsonpath='{.items[0].metadata.name}') -i -t -- ls -l /registry total 0 drwxr-sr-x. 3 1000000000 1000000000 22 Jun 19 12:24 docker