- OpenShift在企業中的實踐:PaaS DevOps微服務(第2版)
- 魏新宇 郭躍軍
- 1657字
- 2021-11-05 10:17:18
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環境離線安裝的具體步驟。
- C++ Primer習題集(第5版)
- Python程序設計(第3版)
- 軟件項目管理實用教程
- 程序員修煉之道:通向務實的最高境界(第2版)
- bbPress Complete
- 數據結構案例教程(C/C++版)
- SQL經典實例(第2版)
- 計算機應用基礎教程(Windows 7+Office 2010)
- 石墨烯改性塑料
- Hacking Android
- Python編程快速上手2
- Android高級開發實戰:UI、NDK與安全
- Docker on Windows
- HTML5+CSS3+jQuery Mobile+Bootstrap開發APP從入門到精通(視頻教學版)
- Splunk Developer's Guide(Second Edition)