Red HatでOpenShiftのサポートをしているid:nekopです。
インターネット非接続環境でOpenShiftを利用する場合、ミラーレジストリを作成して非接続環境でイメージをホストする必要があります。このエントリでは、実際にミラーレジストリをセットアップし、そのミラーを使ったインストールを行ないます。
このエントリではAWS上でクラスタを構成しますが、インターネット非接続環境として構成することはせず、インターネット接続環境です。ただし利用する認証情報、pull secretはミラーレジストリのものに限定しているので、本来のquay.ioに接続できてもイメージをpullすることはできない構成としています。
また、非接続環境のシナリオではイメージ群を一旦ファイルに保存、非接続環境へ持ち込んでファイルからミラーレジストリ構築、という方法をとる場合もありますが、手順はそれほど変わらないのでこのエントリでは扱いません。このエントリではファイルを経由せず、ミラーレジストリへ直接イメージをミラーします。
OpenShift 4.10.12を利用しますが、OpenShift 4.10のTechnology Preview新機能であるoc-mirror pluginは利用していません。4.6+で利用可能な現行の方法となります。
ミラーレジストリはOpenShiftのオマケで提供されているMirror registry for Red Hat OpenShiftというスタンドアロンのQuayベースのレジストリを利用します。ミラー用途以外、たとえばユーザのイメージの保存には利用できないことに注意してください。
大まかな流れ
- ミラーレジストリホストの準備
- ミラーレジストリのインストール
- ミラー用pull secret作成
- OpenShiftのイメージのミラー
- Operatorのミラー
エントリ中ではディレクトリを整理したりする操作をはぶいています。雑多なディレクトリおよびファイル群ができるので、実際の運用に向けてはきちんと整理して実行していくほうが良いです。
Mirror registryホストの準備
以下の設定でインスタンスを作成します。Mirror registry for Red Hat OpenShiftのインストールにはpodmanを必要とするのでRHELを利用します。Amazon Linuxにはpodmanパッケージが無いので注意してください。
ミラーレジストリは8443ポートを利用するので、追加で許可します。
- RHEL 8.5
- m5.large (2 vCPU, 8GB memory)
- 500GB gp3 disk
- Security GroupでTCP 8443をallow
ミラーレジストリのインストール
事前に pull-secret.txt
を以下からダウンロードしてください。
- pull-secret.txt
ファイルを転送してpodmanをインストールし、ミラーレジストリをインストールします。
rsync -e "ssh -i $AWS_SSH_PRIVATE_KEY" pull-secret.txt ec2-user@ec2-public-ip.ap-northeast-1.compute.amazonaws.com: ssh -i $AWS_SSH_PRIVATE_KEY ec2-user@ec2-public-ip.ap-northeast-1.compute.amazonaws.com sudo dnf update -y sudo dnf install podman -y curl -LO https://developers.redhat.com/content-gateway/file/pub/openshift-v4/clients/mirror-registry/1.1.0/mirror-registry.tar.gz tar xf mirror-registry.tar.gz sudo ./mirror-registry install --quayHostname ec2-public-ip.ap-northeast-1.compute.amazonaws.com --quayRoot /var/lib/quay
ミラーレジストリのinitユーザのパスワードはmirror-registry installの出力に表示されるのみとなります。ファイル上に平文保存などはされないため確実に保存してください。
ミラー用pull secret作成
インストール後に生成されるミラーレジストリのCA証明書はそのままOSに登録し、ミラーレジストリにアクセスするためのmirror-pull-secret.txtを生成します。
sudo cp /var/lib/quay/quay-rootCA/rootCA.pem /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust podman login \ --authfile ./mirror-pull-secret.txt \ -u init \ -p PASSWORD \ ec2-public-ip.ap-northeast-1.compute.amazonaws.com:8443
ミラー処理はミラー元レジストリのpull-secret.txtとミラーレジストリのmirror-pull-secret.txtの両方を必要とするので、連結してデフォルトのauthファイル位置 ~/.config/containers/auth.json
へ配置します。古いツールが ~/.docker/config.json
を参照するのでリンクも作成します。JSON形式なので単純連結はできず、少し編集する必要があります。
mkdir -p ~/.config/containers/ ~/.docker/ cat mirror-pull-secret.txt pull-secret.txt > ~/.config/containers/auth.json ln -s ~/.config/containers/auth.json ./.docker/config.json vi ~/.config/containers/auth.json
ファイル編集してミラーレジストリのエントリ末尾にカンマ挿入、"cloud.openshift.com"
直前までを削除すれば良いです。
{ "auths": { "ec2-public-ip.ap-northeast-1.compute.amazonaws.com:8443": { "auth": "xxx" }, "cloud.openshift.com":{...
OpenShiftのイメージのミラー
OpenShiftのイメージのミラーにはocコマンド、Operatorのミラーでopmコマンドを利用しますので、まずはそれらを配置します。
curl -LO https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/fast-4.10/openshift-client-linux-4.10.12.tar.gz tar xf openshift-client-linux-*.tar.gz oc sudo cp oc /usr/bin/ https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/fast-4.10/opm-linux-4.10.12.tar.gz tar xf opm-linux-*.tar.gz opm sudo cp opm /usr/bin/
マニュアル記載のミラー手順を実行し、openshift-installバイナリを生成します。
export OCP_RELEASE=4.10.12 export LOCAL_REGISTRY=ec2-public-ip.ap-northeast-1.compute.amazonaws.com:8443 export LOCAL_REPOSITORY='ocp4/openshift4' export PRODUCT_REPO='openshift-release-dev' export LOCAL_SECRET_JSON='/home/ec2-user/.config/containers/auth.json' export RELEASE_NAME="ocp-release" export ARCHITECTURE=x86_64 oc adm release mirror -a ${LOCAL_SECRET_JSON} \ --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} \ --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \ --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE} oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}"
この環境では6分ほどで終了しました。
生成されたopenshift-installバイナリはミラーレジストリ上のイメージが指定されています。
$ ./openshift-install version ./openshift-install 4.10.12 built from commit 1e29cdacf65d54a7fad50683daff9e3083013ab1 release image ec2-public-ip.ap-northeast-1.compute.amazonaws.com:8443/ocp4/openshift4@sha256:f77f4f75c1e1a4ddd0a0355f298a834db3473fd9ca473235013e9419d1df16db release architecture amd64
アップデートする場合も上記と同じ手順でアップデート先のバージョンをミラーして、oc adm upgrade --to-image=...
指定でミラー上のリリースイメージを指定します。
Operatorのミラー
Operatorは膨大な量が提供されており、通常はopm index pruneコマンドを利用して標準のindexイメージから必要なOperatorに絞ったindexイメージを作ってミラーします。今回はCluster Logging Operator, Elasticsearch Operator, Local Storage Operatorのみミラーします。
Sqlite-based catalogs are deprecated.
という警告が表示されますが無視してください。File-basedカタログへの移行フェーズであるため表示される警告ですが、今時点では無視して構いません。
opm index prune \ -f registry.redhat.io/redhat/redhat-operator-index:v4.10 \ -p cluster-logging,elasticsearch-operator,local-storage-operator \ -t ${LOCAL_REGISTRY}/mirror/mirror-operator-index:v4.10 podman push ${LOCAL_REGISTRY}/mirror/mirror-operator-index:v4.10 oc adm catalog mirror \ -a ${LOCAL_SECRET_JSON} \ ${LOCAL_REGISTRY}/mirror/mirror-operator-index:v4.10 \ ${LOCAL_REGISTRY} \ --index-filter-by-os=linux/amd64
この環境では8分ほどで終了しました。
Operatorを全てミラーする場合は大量のディスクを消費するので注意してください。今回利用しているミラーレジストリホストではこの時点で50GB程度のディスク消費です。
Operatorのアップデートする場合も上記と同じ手順でindexイメージ再作成、ミラーを実行します。
OpenShiftのインストール
ミラーレジストリを利用したインストールのinstall-config.yaml
では、通常のOpenShiftのインストール項目の他に、以下の3つの項目の追加、変更が必要となります。ミラーレジストリを利用する指示となるimageContentSources, additionalTrustBundleにミラーレジストリのCA証明書、pullSecretにミラーレジストリのpull secret指定が必要になります。
- imageContentSources
oc adm release mirror
の出力
- additionalTrustBundle
/var/lib/quay/quay-rootCA/rootCA.pem
の内容
- pullSecret
mirror-pull-secret.txt
の内容
apiVersion: v1 (省略) imageContentSources: - mirrors: - ec2-public-ip.ap-northeast-1.compute.amazonaws.com:8443/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-release - mirrors: - ec2-public-ip.ap-northeast-1.compute.amazonaws.com:8443/ocp4/openshift4 source: quay.io/openshift-release-dev/ocp-v4.0-art-dev additionalTrustBundle: | -----BEGIN CERTIFICATE----- xxx -----END CERTIFICATE----- pullSecret: '{"auths": {"ec2-public-ip.ap-northeast-1.compute.amazonaws.com:8443": {"auth": "xxx"}}}'
install-config.yaml
が用意できたら実際にインストールを実行します。
openshift-install create cluster
これでミラーレジストリのみを利用したOpenShiftのインストールができます。
ミラーレジストリのOperatorを利用
非接続環境およびミラーレジストリのみ接続可能な構成では、OpenShiftインストール後にopenshift-marketplace内に作成される標準のOperator indexイメージを利用するPod群がImagePullBackoffとなります。これらはquay.io
を直接参照する設定となっているので期待通りの動作となります。
マニュアル通り、disableAllDefaultSourcesを設定して標準のOperator indexイメージの利用を無効化し、これらのPodが作成されないようにします。
oc patch OperatorHub cluster --type json \ -p '[{"op": "add", "path": "/spec/disableAllDefaultSources", "value": true}]'
次にミラーしたOperatorを利用する設定です。Operatorのミラー実行時にミラーしたOperator indexイメージを指定するCatalogSource、およびOperator関連イメージにミラーを参照する設定であるimageContentSourcePolicyが生成されているので、それを作成します。
oc create -f manifests-mirror-operator-index-xxx/imageContentSourcePolicy.yaml oc create -f manifests-mirror-operator-index-xxx/catalogSource.yaml
これでミラーしたOperatorが利用可能になり、Operatorがインストールできるようになります。
マイナーバージョンアップデートの際にはCatalogSourceのimage行を書き換え、たとえば mirror-operator-index:v4.10
を mirror-operator-index:v4.11
に更新することでアップデートが可能になります。別のCatalogSourceとして作成してしまうと同じパッケージのアップグレードとはみなされなくなりますので注意してください。