7.15.5.2. 准备 VDDK 镜像
导入过程使用 VMware Virtual Disk Development Kit(VDDK)来复制 VMware 虚拟磁盘。
您可以下载 VDDK SDK,创建 VDDK 镜像,将镜像上传到镜像仓库,并将其添加到 v2v-vmware
配置映射中。
您可以配置内部 OpenShift Container Platform 镜像 registry 或 VDDK 镜像的安全外部镜像 registry。该 registry 需要可以被 OpenShift Virtualization 环境访问。
在公共仓库中存储 VDDK 镜像可能会违反 VMware 许可证的条款。
7.15.5.2.1. 配置内部镜像 registry
您可以通过更新 Image Registry Operator 配置在裸机上配置内部 OpenShift Container Platform 镜像 registry。
您可以通过一个路由公开 registry,直接从 OpenShift Container Platform 集群内部或外部访问 registry。
更改镜像 registry 的管理状态
要启动镜像 registry,您必须将 Image Registry Operator 配置的 managementState
从 Removed 改为
Managed
。
流程
将
managementState
Image Registry Operator 配置从Removed 改为
Managed
。例如:$ oc patch configs.imageregistry.operator.openshift.io cluster --type merge --patch '{"spec":{"managementState":"Managed"}}'
为裸机和其他手动安装配置 registry 存储
作为集群管理员,在安装后需要配置 registry 来使用存储。
先决条件
- 集群管理员权限。
- 使用手动置备的 Red Hat Enterprise Linux CoreOS(RHCOS)节点(如裸机)的集群。
为集群置备的持久性存储,如 Red Hat OpenShift Container Storage。
重要当您只有一个副本时,OpenShift Container Platform 支持对镜像 registry 存储的
ReadWriteOnce
访问。要部署支持高可用性的镜像 registry,需要两个或多个副本,ReadWriteMany
访问。- 必须具有 100Gi 容量。
流程
要将 registry 配置为使用存储,请更改
configs
。.imageregistry/cluster 资源中的 spec.
storage.pvc注意使用共享存储时,请查看您的安全设置以防止外部访问。
验证您没有 registry pod:
$ oc get pod -n openshift-image-registry
注意如果存储类型为
emptyDIR
,则副本数不能大于1
。检查 registry 配置:
$ oc edit configs.imageregistry.operator.openshift.io
输出示例
storage: pvc: claim:
将
claim
字段留空以允许自动创建image-registry-storage
PVC。检查
clusteroperator
状态:$ oc get clusteroperator image-registry
确保 registry 设置为 managed,以启用镜像的构建和推送。
运行:
$ oc edit configs.imageregistry/cluster
然后,更改行
managementState: Removed
至
managementState: Managed
直接从集群访问registry
您可以从集群内部访问registry。
流程
通过使用内部路由从集群访问registry:
通过获取节点的名称来访问节点:
$ oc get nodes
$ oc debug nodes/<node_name>
要使用节点上的
oc
和podman
等工具程序,请运行以下命令:sh-4.2# chroot /host
使用您的访问令牌登录到容器镜像registry:
sh-4.2# oc login -u kubeadmin -p <password_from_install_log> https://api-int.<cluster_name>.<base_domain>:6443
sh-4.2# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000
您应该看到一条确认登录的消息,例如:
Login Succeeded!
注意用户名可以是任何值,令牌包含了所有必要的信息。如果用户名包含冒号,则会导致登录失败。
因为 Image Registry Operator 创建了路由,所以它将与
default-route-openshift-image-registry.<cluster_name>
类似。针对您的registry执行
podman pull
和podman push
操作:重要您可以抓取任意镜像,但是如果已添加了system:registry角色,则只能将镜像推送到您自己的registry中。
在以下示例中,使用:
组件 值 <registry_ip>
172.30.124.220
<port>
5000
<project>
openshift
<image>
image
<tag>
忽略 (默认为
latest
)抓取任意镜像:
sh-4.2# podman pull name.io/image
使用
<registry_ip>:<port>/<project>/<image>
格式标记(tag)新镜像。项目名称必须出现在这个 pull 规范中,以供OpenShift Container Platform 把这个镜像正确放置在 registry 中,并在以后正确访问 registry 中的这个镜像:sh-4.2# podman tag name.io/image image-registry.openshift-image-registry.svc:5000/openshift/image
注意您必须具有指定项目的
system:image-builder
角色,该角色允许用户写或推送镜像。否则,下一步中的podman push
将失败。为了进行测试,您可以创建一个新项目来推送镜像。将新标记的镜像推送到 registry:
sh-4.2# podman push image-registry.openshift-image-registry.svc:5000/openshift/image
手动公开受保护的registry
通过使用路由可以开放从外部访问OpenShift Container Platform registry的通道,用户不再需要从集群内部登录到OpenShift Container Platform registry。这样,您可以使用路由地址从集群外部登录 registry,并使用路由主机标记并推送到现有项目。
先决条件:
以下的先决条件会被自动执行:
- 部署 Registry Operator。
- 部署 Ingress Operator。
流程
您可以使用configs.imageregistry.operator.openshift.io
资源中的DefaultRoute
参数或使用自定义路由来公开路由。
使用DefaultRoute
公开registry:
将
DefaultRoute
设置为True
:$ oc patch configs.imageregistry.operator.openshift.io/cluster --patch '{"spec":{"defaultRoute":true}}' --type=merge
使用
podman
登录:$ HOST=$(oc get route default-route -n openshift-image-registry --template='{{ .spec.host }}')
$ podman login -u kubeadmin -p $(oc whoami -t) --tls-verify=false $HOST 1
- 1
- 如果集群的默认路由证书不受信任,则需要
--tls-verify=false
。您可以将一个自定义的可信证书设置为 Ingress Operator 的默认证书。
使用自定义路由公开registry:
使用路由的 TLS 密钥创建一个 secret:
$ oc create secret tls public-route-tls \ -n openshift-image-registry \ --cert=</path/to/tls.crt> \ --key=</path/to/tls.key>
此步骤是可选的。如果不创建一个secret,则路由将使用Ingress Operator的默认TLS配置。
在 Registry Operator 中:
spec: routes: - name: public-routes hostname: myregistry.mycorp.organization secretName: public-route-tls ...
注意如果为registry的路由提供了一个自定义的 TLS 配置,则仅需设置
secretName
。