官术网_书友最值得收藏!

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 鏡像導入過程

導入成功后,確??梢岳$R像。


# 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環境離線安裝的具體步驟。

主站蜘蛛池模板: 秭归县| 洞头县| 平凉市| 宝兴县| 西乡县| 双柏县| 彝良县| 大理市| 长治县| 永清县| 东源县| 花垣县| 钟祥市| 沙河市| 桐梓县| 大丰市| 修文县| 鄂尔多斯市| 克拉玛依市| 西峡县| 碌曲县| 邵武市| 岐山县| 峨眉山市| 榆树市| 岗巴县| 蓬安县| 锡林郭勒盟| 华宁县| 民乐县| 河津市| 安阳县| 贵州省| 成都市| 晋宁县| 梁平县| 昭觉县| 康马县| 磴口县| 长子县| 台北市|