2.4. 在受限环境中使用 odo
2.4.1. 受限环境中的 odo
要在断开连接的集群或受限环境中置备的集群中运行 odo
,集群管理员需要创建带有registry 镜像(mirror)的集群。
要在断开连接的集群中工作,必须首先将 将 odo
init 镜像推送到集群的 registry 中,然后使用 ODO_BOOTSTRAPPER_IMAGE
环境变量覆盖 odo
init 镜像路径。
在推送 odo
init 镜像后,您需要为 registry 中的支持的构建程序镜像(builder image)在本地创建一个镜像(mirror),覆盖 registry 镜像(mirror),然后创建您的应用程序。构建程序镜像是为应用程序配置运行时环境所必需的,它还包含构建应用程序所需的构建工具,例如:用于 Node.js 的 npm 或用于 Java 的 Maven。一个 registry 镜像(mirror)会包含应用程序所需的所有依赖项。
2.4.2. 将 odo init 镜像推送到受限集群的 registry 中
根据集群和操作系统的配置,您可以将 odo
init 镜像推送到一个 registry 镜像(mirror)中,或直接推送到内部 registry。
2.4.2.1. 先决条件
-
在客户端操作系统上安装
oc
。 -
在客户端操作系统中安装
odo
。 - 访问已配置的内部 registry 或 registry 镜像(mirror)的受限集群。
2.4.2.2. 将 odox
init 镜像推送到镜像的容器镜像仓库
根据您的操作系统,您可以将 odo
init 镜像推送到带有 registry 镜像(mirror)的集群中,如下所示:
2.4.2.2.1. 将 init
镜像推送到 Linux 上的镜像 registry
流程
使用
base64
对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:$ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
将编码的 root CA 证书复制到适当的位置:
$ sudo cp ./disconnect-ca.crt /etc/pki/ca-trust/source/anchors/<mirror-registry>.crt
信任客户端平台中的 CA,并登录 OpenShift Container Platform 镜像 registry:
$ sudo update-ca-trust enable && sudo systemctl daemon-reload && sudo systemctl restart / docker && docker login <mirror-registry>:5000 -u <username> -p <password>
对
odox
init 镜像进行镜像(mirror):$ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
设置
ODO_BOOTSTRAPPER_IMAGE
环境变量来覆盖默认的odo
init 镜像路径:$ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
2.4.2.2.2. 将 init
镜像推送到 MacOS 上的镜像 registry
流程
使用
base64
对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:$ echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
将编码的 root CA 证书复制到适当的位置:
- 使用 Docker UI 重启 Docker。
运行以下命令:
$ docker login <mirror-registry>:5000 -u <username> -p <password>
对
odox
init 镜像进行镜像(mirror):$ oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
设置
ODO_BOOTSTRAPPER_IMAGE
环境变量来覆盖默认的odo
init 镜像路径:$ export ODO_BOOTSTRAPPER_IMAGE=<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
2.4.2.2.3. 将 init
镜像推送到 Windows 上的镜像 registry
流程
使用
base64
对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:PS C:\> echo <content_of_additional_ca> | base64 -d > disconnect-ca.crt
作为管理员,请执行以下命令将编码的 root CA 证书复制到适当的位置:
PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" disconnect-ca.crt
信任客户端平台中的 CA,并登录 OpenShift Container Platform 镜像 registry:
- 使用 Docker UI 重启 Docker。
运行以下命令:
PS C:\WINDOWS\system32> docker login <mirror-registry>:5000 -u <username> -p <password>
对
odox
init 镜像进行镜像(mirror):PS C:\> oc image mirror registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>
设置
ODO_BOOTSTRAPPER_IMAGE
环境变量来覆盖默认的odo
init 镜像路径:PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<mirror-registry>:5000/openshiftdo/odo-init-image-rhel7:<tag>"
2.4.2.3. 将 odo
init 镜像直接推送到内部 registry
如果集群允许镜像直接推送到内部 registry,请将 odo
init 镜像推送到 registry:
2.4.2.3.1. 在 Linux 中直接推送 init
镜像
流程
启用默认路由:
$ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
获取通配符路由 CA:
$ oc get secret router-certs-default -n openshift-ingress -o yaml apiVersion: v1 data: tls.crt: ************************** tls.key: ################## kind: Secret metadata: [...] type: kubernetes.io/tls
使用
base64
对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:$ echo <tls.crt> | base64 -d > ca.crt
在客户端平台中信任 CA:
$ sudo cp ca.crt /etc/pki/ca-trust/source/anchors/externalroute.crt && sudo update-ca-trust enable && sudo systemctl daemon-reload && sudo systemctl restart docker
登录到内部 registry:
$ oc get route -n openshift-image-registry NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD default-route <registry_path> image-registry <all> reencrypt None $ docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
推送
odo
init 镜像:$ docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> $ docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag> $ docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
设置
ODO_BOOTSTRAPPER_IMAGE
环境变量来覆盖默认的odo
init 镜像路径:$ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
2.4.2.3.2. 在 MacOS 上直接推送 init
镜像
流程
启用默认路由:
$ oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
获取通配符路由 CA:
$ oc get secret router-certs-default -n openshift-ingress -o yaml apiVersion: v1 data: tls.crt: ************************** tls.key: ################## kind: Secret metadata: [...] type: kubernetes.io/tls
使用
base64
对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:$ echo <tls.crt> | base64 -d > ca.crt
在客户端平台中信任 CA:
$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt
登录到内部 registry:
$ oc get route -n openshift-image-registry NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD default-route <registry_path> image-registry <all> reencrypt None $ docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
推送
odo
init 镜像:$ docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> $ docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag> $ docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
设置
ODO_BOOTSTRAPPER_IMAGE
环境变量来覆盖默认的odo
init 镜像路径:$ export ODO_BOOTSTRAPPER_IMAGE=<registry_path>/openshiftdo/odo-init-image-rhel7:1.0.1
2.4.2.3.3. 在 Windows 上直接推送 init
镜像
流程
启用默认路由:
PS C:\> oc patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"defaultRoute":true}}' --type='merge' -n openshift-image-registry
获取通配符路由 CA:
PS C:\> oc get secret router-certs-default -n openshift-ingress -o yaml apiVersion: v1 data: tls.crt: ************************** tls.key: ################## kind: Secret metadata: [...] type: kubernetes.io/tls
使用
base64
对您的镜像 registry 的 root 认证授权 (CA) 内容进行编码:PS C:\> echo <tls.crt> | base64 -d > ca.crt
作为管理员,请执行以下命令在客户端平台中信任 CA:
PS C:\WINDOWS\system32> certutil -addstore -f "ROOT" ca.crt
登录到内部 registry:
PS C:\> oc get route -n openshift-image-registry NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD default-route <registry_path> image-registry <all> reencrypt None PS C:\> docker login <registry_path> -u kubeadmin -p $(oc whoami -t)
推送
odo
init 镜像:PS C:\> docker pull registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> PS C:\> docker tag registry.access.redhat.com/openshiftdo/odo-init-image-rhel7:<tag> <registry_path>/openshiftdo/odo-init-image-rhel7:<tag> PS C:\> docker push <registry_path>/openshiftdo/odo-init-image-rhel7:<tag>
设置
ODO_BOOTSTRAPPER_IMAGE
环境变量来覆盖默认的odo
init 镜像路径:PS C:\> $env:ODO_BOOTSTRAPPER_IMAGE="<registry_path>/openshiftdo/odo-init-image-rhel7:<tag>"
2.4.3. 在断开连接的集群中创建和部署组件
将 init
镜像推送到具有镜像(mirror) registry 的集群中后,您必须使用 oc
工具为应用程序所需的构建程序镜像创建一个镜像(mirror),使用环境变量覆盖镜像 registry,然后创建组件。
2.4.3.1. 先决条件
-
在客户端操作系统上安装
oc
。 -
在客户端操作系统中安装
odo
。 - 访问已配置的内部容器镜像仓库或 registry 镜像(mirror)的受限集群。
-
将
odo
init 镜像推送到集群 registry。
2.4.3.2. 为支持的构建器镜像创建一个镜像(mirror)
要使用 Node.js 依赖项的 npm 软件包及 Java 依赖项的 Maven 软件包,并为应用程序配置运行时环境,您必须从镜像 registry 中镜像相应的构建器镜像。
流程
验证所需镜像标签没有导入:
$ oc describe is nodejs -n openshift Name: nodejs Namespace: openshift [...] 10 tagged from <mirror-registry>:<port>/rhoar-nodejs/nodejs-10 prefer registry pullthrough when referencing this tag Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs. Tags: builder, nodejs, hidden Example Repo: https://github.com/sclorg/nodejs-ex.git ! error: Import failed (NotFound): dockerimage.image.openshift.io "<mirror-registry>:<port>/rhoar-nodejs/nodejs-10:latest" not found About an hour ago 10-SCL (latest) tagged from <mirror-registry>:<port>/rhscl/nodejs-10-rhel7 prefer registry pullthrough when referencing this tag Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs. Tags: builder, nodejs Example Repo: https://github.com/sclorg/nodejs-ex.git ! error: Import failed (NotFound): dockerimage.image.openshift.io "<mirror-registry>:<port>/rhscl/nodejs-10-rhel7:latest" not found About an hour ago [...]
将支持的镜像标签镜像到私有 registry:
$ oc image mirror registry.access.redhat.com/rhscl/nodejs-10-rhel7:<tag> <private_registry>/rhscl/nodejs-10-rhel7:<tag>
导入镜像:
$ oc tag <mirror-registry>:<port>/rhscl/nodejs-10-rhel7:<tag> nodejs-10-rhel7:latest --scheduled
您必须定期重新导入镜像。
--scheduled
标志启用镜像自动重新导入。验证带有指定标签的镜像已被导入:
$ oc describe is nodejs -n openshift Name: nodejs [...] 10-SCL (latest) tagged from <mirror-registry>:<port>/rhscl/nodejs-10-rhel7 prefer registry pullthrough when referencing this tag Build and run Node.js 10 applications on RHEL 7. For more information about using this builder image, including OpenShift considerations, see https://github.com/nodeshift/centos7-s2i-nodejs. Tags: builder, nodejs Example Repo: https://github.com/sclorg/nodejs-ex.git * <mirror-registry>:<port>/rhscl/nodejs-10-rhel7@sha256:d669ecbc11ac88293de50219dae8619832c6a0f5b04883b480e073590fab7c54 3 minutes ago [...]
2.4.3.3. mirror registry 介绍
要从私有 mirror registry 中为 Node.js 依赖项下载 npm 软件包,及为 Java 依赖项下载 Maven 软件包,您必须在集群中创建并配置 mirror npm 或 Maven registry。然后您可以覆盖现有组件上的 mirror registry,或覆盖创建新组件时的 mirror registry。
流程
覆盖现有组件上的 mirror registry:
$ odo config set --env NPM_MIRROR=<npm_mirror_registry>
覆盖创建组件时的 mirror registry:
$ odo component create nodejs --env NPM_MIRROR=<npm_mirror_registry>
2.4.3.4. 使用 odo 创建 Node.js 应用程序
要创建一个 Node.js 组件,请下载 Node.js 应用程序并使用 odo
将源代码推送到您的集群中。
流程
将当前目录变为您的应用程序的目录:
$ cd <directory_name>
将类型 Node.js 的组件添加到应用程序中:
$ odo create nodejs
注意默认情况下使用最新的镜像。也可以使用
odo create openshift/nodejs:8
明确指定一个镜像版本。将初始源代码推送到组件中:
$ odo push
现在,您的组件已被部署到 OpenShift Container Platform 中。
创建一个 URL,按以下方法在本地配置文件中添加条目:
$ odo url create --port 8080
推送更改。这会在集群中创建一个 URL。
$ odo push
列出用于检查组件所需 URL 的 URL。
$ odo url list
使用生成的 URL 查看部署的应用程序。
$ curl <url>