概要
こんにちは。サイオステクノロジーの塙です。
今回は、閉域網環境のOpenShift(以下、OCP)で、ミラーレジストリーの構成について説明したいと思います。
OpenShiftの詳細については、本ブログでは省略しています。OpenShiftに関する内容についてはサイオスの他ブログ等をご参照下さい。
SIOS Tech. Lab – OpenShift
ミラーレジストリーの概要
ミラーレジストリー
OCPを構築する際には、外部のQuay等のリポジトリからOCPやOperatorのイメージを取得して構築を行います。
閉域網環境のOCPでは、ノードからインターネットに接続出来ない環境のためミラーレジストリーを作成して対応します。
ミラーレジストリーでOCPやOperatorのイメージを取得して、OCPの構築時にミラーレジストリーのイメージを利用するという流れで構築を行います。
ミラーレジストリーは、OCPサブスクリプションに含まれているため、特に追加費用なく利用できます。
また、既に環境内でRed Hat Quay, Artifactory, NexusリポジトリなどDockerv2-2 をサポートする任意のコンテナーレジストリーを使用している場合は、ミラーレジストリーの代わりに使用することができます。
ミラーレジストリー利用のシナリオ
ミラーレジストリーを利用する場合、以下の2つのシナリオで利用できます。
- ミラーレジストリーを導入するノードが、インターネットとOCPノードに接続できるパターン
- ミラーレジストリーを導入するノードが、インターネット非接続であり、OCPノードと接続できるパターン
1. の場合だと、イメージをインターネットから直接ミラーレジストリーにミラーすることができます。
2. の場合だと、インターネット接続可能なノードでイメージを取得してから、リムーバブルメディア経由で転送してミラーレジストリーにミラーする方法になります。
これらのシナリオは主に完全な閉域網環境として構築するかといった要件で方式が変わってくる部分となります。
それぞれのシナリオでは、イメージのミラーリング方法について少し手順が異なってくるので注意が必要になります。
今回は、2.の場合の内容は扱いません。
参考:
・OpenShift Container Platform – 2.1. ミラーレジストリーについて
事前準備
ミラーレジストリーを導入するノードを用意します。
今回は、AWS環境のベアメタルインスタンスでKVMを構築して、KVM上のVMでノードを準備します。
VMの用意までの手順はここでは割愛します。
ミラーレジストリーの前提条件に従って、VMのリソースは以下で用意をします。
- vCPU: 2コア
- メモリ:8GB
- ストレージ:500GB
また参考の資料に従って、VMにインストールするRHEL OSを用意しておきます。
Web上からRHEL ISOイメージをダウンロードする手順に則り、KVMホスト上に展開します。
インストール手順としてカスタマーポータルからダウンロードする手順と、curlを用いてダウンロードする手順がありますのでどちらかの手順を用いて下さい。
参考:
・2.2. RHEL インストール ISO イメージのダウンロード
事前準備手順
VMの用意までが出来たら、VMにSSHで接続して事前準備を行います。
OCコマンドをインストールします。
インストールするバージョンを確認して、それに合わせる形でURLにバージョンを記載します。
$ curl -L -o - "https://mirror.openshift.com/pub/openshift-v4/$(uname -m)/clients/ocp/4.xx.xx/openshift-client-linux.tar.gz" | sudo tar -C /usr/local/bin -xvzf - oc
$ oc version
必要なパッケージをインストールします。
インストールするバージョンを確認して、それに合わせる形でURLにバージョンを記載します。
# podmanのインストール
$ sudo dnf install podman -y
# oc-mirrorのインストール
$ curl -LO https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.xx.xx/oc-mirror.rhel9.tar.gz
$ tar xvzf oc-mirror.rhel9.tar.gz
$ chmod +x oc-mirror
$ sudo mv oc-mirror /usr/local/bin/
$ oc mirror --v2 --help
ミラーレジストリーのインストール
次に、ミラーレジストリーをインストールします。
インストールでは、mirror-registry コマンドを使用してインストール作業を行います。
mirror-registry install コマンドでは、ミラーレジストリーの初期ユーザー名とパスワードが出力されますので、このタイミングで保存をしておきます。
ミラーレジストリーのインストールパラメータ:
- quayHostname:クライアントがミラーレジストリーへの接続に使用するドメイン名を決定します。
- quayRoot:ミラーレジストリーのルートディレクトリを決定します。該当ディレクトリ上にデータの保存等が行われます。
$ curl -LO https://mirror.openshift.com/pub/cgw/mirror-registry/2.0.6/mirror-registry-amd64.tar.gz
$ tar xf mirror-registry-amd64.tar.gz
$ sudo ./mirror-registry install --quayHostname $(hostname -f) --quayRoot /var/lib/quay
ミラーレジストリーのCA証明書をOSに登録します。CA証明書はインストール時に指定したquayRootのディレクトリ配下に保存されています。
$ sudo cp /var/lib/quay/quay-rootCA/rootCA.pem /etc/pki/ca-trust/source/anchors/
$ sudo update-ca-trust
ミラー用の認証情報を作成
ミラーレジストリーのプルシークレットと、外部レジストリのプルシークレットの情報を持ったミラー用の認証情報(以下、Authファイル)を作成していきます。
ユーザー名とパスワードを用いて、ミラーレジストリーにログインを行います。この時authfileにミラーレジストリーへのアクセス情報としてプルシークレットを生成するようにします。
$ podman login -u init \
-p <password> \
--authfile ./mirror-pull-secret.txt \
<quayHostname>:8443 \
--tls-verify=false
Authファイルのディレクトリを作成します。
$ mkdir -p $XDG_RUNTIME_DIR/containers
プルシークレットの情報を作成します。
Red Hat Hybrid Cloud Console にRed Hatアカウントを用いてログインします。プルシークレットをダウンロードまたはコピーして保存しておきます。
https://console.redhat.com/openshift/install/pull-secret
保存したプルシークレットをAuthファイルとして保存します。
$ cat pull-secret.txt | jq . > $XDG_RUNTIME_DIR/containers/auth.json
Authファイルを編集して、ミラーレジストリーのプルシークレットmirror-pull-secret.txtの内容を連結します。
最終的に下記のような形式に編集していきます。
$ vi $XDG_RUNTIME_DIR/containers/auth.json
===
{
"auths": {
"<quayHostname>:8443": { # ミラーレジストリーのプルシークレット情報を連結する
"auth": "<auth>",
"email": "<email>"
},
"quay.io": { # 以下、外部レジストリのプルシークレット情報
"auth": "<auth>",
"email": "<email>"
},
..(omit)..
}
}
===
OpenShiftのイメージのミラー
ミラーレジストリーのノードで、必要なイメージをミラーしていきます。
ミラーリングの方法として、oc admコマンドを使用する方法と、oc-mirrorプラグインを使用した方法があります。
今回はoc-mirrorプラグインを使用した方法でミラーリングを実施します。oc-mirrorプラグインを使用するために事前準備で必要なパッケージをインストールしています。
OpenShiftのクラスターリソースの生成先のディレクトリーを作成します。
$ mkdir mirror-image
ImageSetConfiguration ファイルを作成します。
このファイルはOpenShift、Operatorの各イメージをミラーレジストリで取得する時の設定を記述します。
- OpenShiftのイメージ:mirror.platform.channels で指定したバージョンのOpenShiftイメージを記載
- Operatorのイメージ:mirror.operators でOperatorイメージを記載
- 追加のイメージ:mirror.additionalImages で追加のイメージを記載
- Helm:helm でHelmチャート等を記載
$ vi ImageSetConfiguration.yaml
記載例)
===
kind: ImageSetConfiguration
apiVersion: mirror.openshift.io/v2alpha1
mirror:
platform:
channels:
- name: stable-4.18
minVersion: 4.18.11
maxVersion: 4.18.11
operators:
- catalog: registry.redhat.io/redhat/redhat-operator-index:v4.18
additionalImages:
- name: registry.redhat.io/ubi8/ubi:latest
- name: registry.redhat.io/ubi9/ubi@sha256:20f695d2a91352d4eaa25107535126727b5945bff38ed36a3e59590f495046f0
- name: registry.redhat.io/rhel8/support-tools:latest
- name: registry.redhat.io/rhel9/support-tools:latest
helm: {}
===
ミラーリングを実施します。
ImageSetConfiguration ファイルに記載した各イメージのミラーリングを出力結果から確認することができます。
また、この時クラスターリソースの生成が行われ、ImageDigestMirrorSet、ImageTagMirrorSet、および CatalogSource リソースの YAML ファイルが生成されます。
$ oc mirror -c ImageSetConfiguration.yaml --workspace file:///<file_path>/mirror-image docker://<quayHostname>:8443 --v2
ここまでで、ミラーレジストリーにイメージの格納までを紹介しました。
この後は、OpenShiftのセットアップでこのミラーレジストリーのイメージを利用して構築していく形になります。
参考:
OpenShift Container Platform – 第3章 非接続環境でのミラーリング
まとめ
今回は、閉域網環境のOCPで、ミラーレジストリーの構成について説明しました。
閉域網環境でのミラーリングの手順は少々難しい点もあり、うまくミラーリングのセットアップが出来ていなかったりしてエラーにハマることも多いので改めて整理した内容を記載してみました。
この記事が読者の参考になれば幸いです。
参考文献
OpenShift Container Platform – 2.1. ミラーレジストリーについて
ミラーレジストリーの前提条件
2.2. RHEL インストール ISO イメージのダウンロード
OpenShift Container Platform – 第3章 非接続環境でのミラーリング