购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2.2 配置OpenShift离线镜像

在离线安装OpenShift的时候,需要创建一个Mirror Registry,它的作用是将quay.io上用于安装OpenShift的容器镜像缓存在本地镜像仓库中,在安装OpenShift的时候可以从Mirror Registry中获取镜像。Mirror Registry通常是外部镜像仓库,高可用方案参见2.2.3节第4小节。

1.离线镜像同步

目前创建Mirror Registry主要有以下三种方法,如图3-7所示。

图3-7 OpenShift离线镜像的同步方式

(1)方法1

如果Mirror Registry节点可以连接外网,并且网速比较快,用方法1,将quay.io上的OpenShift镜像直接缓存到Mirror Registry中。

首先配置环境变量。


export OCP_RELEASE=4.4.10-x86_64                         #要缓存的容器镜像版本号
export LOCAL_REGISTRY='repo.apps.weixinyucluster.bluecat.ltd:5000/openshift4'   
                                                         #离线镜像仓库的名称和端口号
export LOCAL_REPOSITORY='ocp4/openshift4'                #容器镜像仓库的目录
export PRODUCT_REPO='openshift-release-dev'              #固定值
export LOCAL_SECRET_JSON='/root/pullsecret_config.json'  #指定身份信息文件位置
export RELEASE_NAME="ocp-release"  #固定值

缓存镜像,命令执行成功如图3-8所示。


# oc adm -a ${LOCAL_SECRET_JSON} release mirror \
      --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE} \
      --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \
      --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}

图3-8 缓存镜像成功

然后用如下脚本查看Mirror Registry中的OpenShift镜像(david:david是离线仓库的用户名和密码)。


curl -u david:david -s https://repo.apps.weixinyucluster.bluecat.ltd:5000/v2/_catalog | \
    jq -r '.["repositories"][]' | \
    xargs -I @REPO@ curl -u david:david -s  https://repo.apps.weixinyucluster. 
        bluecat.ltd:5000/v2/@REPO@/tags/list | \
jq -r -M '.["name"] + ":" + .["tags"][]'

查看结果如图3-9所示。

图3-9 确认镜像缓存成功

(2)方法2

如果Mirror Registry节点不能连接外网(现实是这种情况更多),那么就在自己笔记本上缓存OpenShift镜像到文件系统目录中。


# oc adm -a /root/pullsecret_config.json release mirror --from=quay.io/openshift-
    release-dev/ocp-release:4.4.10-x86_64 --to-dir=/weixinyu/mirror

执行成功结果如下所示。


Success
Update image:  openshift/release:4.4.10
To upload local images to a registry, run:
    oc image mirror --from-dir=/weixinyu/mirror 'file://openshift/
        release:4.4.10*' REGISTRY/REPOSITORY
Configmap signature file /weixinyu/mirror/config/signature-sha256-
    0d1ffca302ae55d3.yaml created

查看保存镜像的目录结构,如图3-10所示。

图3-10 保存镜像的目录结构

接下来,将镜像目录打成tar.gz包。


# tar -zcf /weixinyu/mirror.tar.gz -C /weixinyu/mirror

将镜像mirror.tar.gz上传到Mirror Registry机器并解压缩。


# tar -zxf mirror.tar.gz

将镜像导入离线仓库。


# oc image mirror --from-dir=/davidwei/mirror 'file://openshift/release:4.4.10*' 
    repo.apps.weixinyucluster.bluecat.ltd:5000/ocp4/openshift4

图3-11显示镜像导入过程。

图3-11 镜像导入过程

导入成功后,确保可以拉取镜像。


# podman pull repo.apps.weixinyucluster.bluecat.ltd:5000/ocp4/openshift4:4.4.10-
    ironic-static-ip-manager
Trying to pull repo.apps.weixinyucluster.bluecat.ltd:5000/ocp4/openshift4:4.4.10-
    ironic-static-ip-manager...
Getting image source signatures
Copying blob fc5aa93e3b58 done
Copying blob 1a6747857d79 done
Writing manifest to image destination
Storing signatures
6b7a2b05aaaa4829789e600e4a6fe3edf77c523a61509804e8d7781d7bb365e5

(3)方法3

方法3是在可以连接到外网的机器(如笔记本)上直接执行离线镜像同步,然后直接压缩同步后的镜像仓库的data目录,再拷贝到Mirror Registry机器上解压缩还原镜像仓库数据。这种方法比较简单易行,但要求笔记本镜像仓库和数据中心镜像仓库都使用Docker Registry V2。

在笔记本环境执行如下命令打包Docker Registry的数据目录。


# tar -zcf registry.tar.gz data/

把registry.tar.gz压缩包上传到Mirror Registry的存储目录(如/opt/registry),然后解压缩。


# cd /opt/registry
# tar -zxf registry.tar.gz data/

随后在离线环境通过podman启动Docker Registry时,指定镜像解压缩目录。


# podman run --name mirror-registry -p 5000:5000 -v /data/registry:/var/lib/
    registry -v /opt/registry/auth:/auth:z -e "REGISTRY_AUTH=htpasswd" -e 
    "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=
    /auth/htpasswd -v /opt/registry/certs:/certs:z -e REGISTRY_HTTP_TLS_
    CERTIFICATE=/certs/example.com.crt -e REGISTRY_HTTP_TLS_KEY=/certs/example.
    com.key -d docker.io/library/registry:2

2.添加/恢复Mirror Registry

离线安装OpenShift的时候,我们需要在install-config.yaml文件中添加Mirrror Registry的证书和pull secret,也就是同步镜像输出的imageContentSource数据,这样OpenShift安装过程中会使用Mirror Registry中的镜像,而且安装完毕后会自动将pull secret和证书添加到集群中。

但如果OpenShift安装以后Mirror Registry遇到故障该怎么办呢?

只要auth和certs还存在,问题就不大,将data目录的数据恢复即可(镜像文件易于恢复)。


# ls /opt/registry
auth  certs  data

但如果auth和certs被删除或者破坏了,也就是说之前的Mirror Registry所有相关内容全部消失了,那么就只能重新创建Mirror Registry。但搭建好以后,此时正在运行的OpenShift中没有这个新仓库的证书和pull secret,OpenShift不能再从Mirror Registry中拉取镜像,这不利于容器故障恢复和以后的集群升级。

针对这种问题,需要修改以下两处进行修复:

1)在OpenShift集群中增加新Mirror Registry的CA证书。

2)在OpenShift集群中增加新Mirror Registry的pull secret。

我们先介绍修改证书的方法。OpenShift中使用Configmap管理Registry的CA证书,如图3-12所示。


# oc project openshift-config

图3-12 查看Configmap

而OpenShift集群中定义Configmap的位置如图3-13所示。


# oc edit image.config.openshift.io cluster

图3-13 查看image.config.openshift.io中包含的证书

这时候,registry-config中不包含新的Mirror Registry证书。

我们根据新的Mirror Registry,创建一个Configmap。

切换到新Mirror Registry的Registry目录。


# cd /opt/registry/certs
# oc create cm davidwei-crt -n openshift --from-file=repo.apps.weixinyucluster.
    bluecat.ltd..5000=/opt/registry/certs/example.crt
configmap/davidwei-crt created

修改image.config.openshift.io。


# oc edit image.config.openshift.io cluster

修改内容如图3-14所示。

图3-14 image.config.openshift.io中增加新的证书

我们通过一条命令行也可以完成增加新证书的操作。


#oc patch image.config.openshift.io/cluster --patch '{"spec":{"additionalTrustedCA":
    {"name":"davidwei-crt"}}}' --type=merge 

需要注意的是:一套OCP集群只能增加一个additionalTrustedCA,不能使多个生效。因此如果configmap要包含多个证书,则在上面执行oc create cm davidwei-crt时,增加多个--from-file参数指定多个仓库和证书文件。

然后我们还需要在OpenShift中增加Mirror的pull secret。

默认情况下pull secret应既包含Mirror Registry的pull secret,又包含访问外部仓库quay.io的pull secret。(在纯离线环境,只包含前者也可以。)

下载pull-secret文件,并重命名为pullsecret_config.json。下载地址为 https://cloud.redhat.com/openshift/install/pull-secret


# cp pull-secret pullsecret_config.json
# podman login --authfile ~/pullsecret_config.json repo.apps.weixinyucluster.
    bluecat.ltd:5000

登录成功以后,pullsecret_config.json文件就同时包含红帽仓库和Mirror Registry的pull secret了。

接下来,对pullsecret_config.json进行base64加密。


# cat ~/pullsecret_config.json | base64 -w 0

将base64加密后的内容,贴在图3-15方框的位置。


# oc edit secrets pull-secret -n openshift-config

图3-15 修改pull-secret

在本地镜像仓库创建成功之后,接下来我们演示在vSphere环境离线安装的具体步骤。 BsvYmRIWNrxDX8MxbqCYRghcDJRX5xHXw6jZGvHUA13FPVAFOiMtnrLlg18ZD1+B

点击中间区域
呼出菜单
上一章
目录
下一章
×