レジストリ ミラーを使用して Anthos clusters on bare metal をインストールする

このページでは、gcr.io ではなくレジストリ ミラーを使用して、ベアメタル版 Anthos クラスタをインストールする方法について説明します。レジストリ ミラーを使用するには、コンテナ ランタイムを containerd に設定する必要があります。

レジストリ ミラーは、ベアメタル版 Anthos クラスタが物理的に格納される gcr.io/anthos-baremetal-release/ のみではなく、gcr.io 全体をミラーリングするように指定されます。

たとえば、イメージ gcr.io/kubernetes-e2e-test-images/nautilus:1.0 を pull しようとした場合には、レジストリ サービスがこのイメージを厳密に同じパス(例: 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0)に保有している場合にのみ、操作を行うことができます。gcr.io 以外のイメージはすべて通常どおり動作します。たとえば、引き続き k8s.gcr.io/pause:3.1 を pull できます。

レジストリ ミラーを使用することでトラフィックを節約できます。また、クラスタを gcr.io の停止から保護する必要がある場合に、gcr.io の代わりに使用できます。また、独自の脆弱性スキャンを行えるようにもなります。

始める前に

  • ネットワークに Container Registry サーバーが設定されている必要があります。
  • レジストリ サーバーでプライベート TLS 証明書を実行する場合は、認証局(CA)ファイルが必要です。
  • レジストリ サーバーで認証が必要な場合は、適切なログイン認証情報または Docker 構成ファイルが必要です。

ベアメタル版 Anthos クラスタに必要なすべてのイメージをダウンロードする

[ダウンロード] ページから、bmctl ツールとイメージ パッケージの最新バージョンをダウンロードします。

コンテナ イメージをレジストリ サーバーにアップロードする

次のコマンドを実行して、イメージをイメージ パッケージからレジストリ サーバーにアップロードします。

[HTTPS_PROXY=http://PROXY_IP:PORT] ./bmctl push images \
    --source=./bmpackages_1.8.0.tar.xz \
    --private-registry=REGISTRY_IP:PORT \
    [--cacert=CERT_PATH] \
    [--need-credential=false]

以下を置き換えます。

  • ワークステーションからレジストリ サーバーにイメージをアップロードするためにプロキシが必要な場合は、PROXY_IP:PORT をプロキシの IP アドレスとポートに置き換えます。
  • REGISTRY_IP:PORT は、プライベート レジストリ サーバーの IP アドレスとポートに置き換えます。
  • レジストリ サーバーがプライベート TLS 証明書を使用している場合は、CERT_PATH を CA 証明書ファイルのパスに置き換えます。

プロンプトが表示されたら、ユーザー名とパスワードを入力するか、Docker 構成ファイルを選択します。レジストリ サーバーで認証情報が必要ない場合は、--need-credential=false を指定します。

bmctl push images コマンドについて詳しくは、以下を実行してください。

bmctl push images --help

独自の名前空間を使用する

レジストリ サーバーでルート名前空間ではなく独自の名前空間を使用する必要がある場合は、限定公開レジストリの API エンドポイントを registryMirrors.endpoint に指定すると、containerd がこのサブ名前空間から pull できるようになります。エンドポイントは通常、<REGISTRY_IP:PORT>/v2/<NAMESPACE> の形式になります。詳細については、非公開レジストリのユーザーガイドをご覧ください。

たとえば、172.18.0.20:5000/test-namespace/ へのアクセス権のみを付与されている場合は、次のコマンドを使用して、名前空間 test-namespace の下にあるすべての画像をアップロードできます。

./bmctl push images \
    --source=./bmpackages_1.8.0.tar.xz \
    --private-registry=172.18.0.20:5000/test-namespace
    --username=<USERNAME>
    --password=<PASSWORD>
    --cacert <path/to/cert.crt>

次に、クラスタの YAML ファイルに次のように入力して、containerd がサブ名前空間から pull するように設定できます。

registryMirrors:
  - endpoint: https://172.18.0.20:5000/v2/test-namespace

レジストリ ミラーからクラスタを作成する

以下は、gcr.io の代わりに独自のレジストリ ミラー サーバーを使用するクラスタ構成ファイルの例です。

レジストリでプライベート TLS 証明書が不要な場合は、caCertPath フィールドを空白のままにできます。

レジストリ サーバーで認証 Docker 構成ファイルが不要な場合は、pullCredentialConfigPath フィールドを空白のままにできます。

クラスタの作成の詳細については、クラスタの作成をご覧ください。

# Sample cluster config with registry mirror:
---
gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
  - endpoint: https://172.18.0.20:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
spec:
  nodeConfig:
    containerRuntime: containerd
...

このクラスタ内のすべてのノードは、gcr.io ではなく、このレジストリ ミラー 172.18.0.20:5000 を使用します。

gcr.io にフェイルオーバーする

クラスタがレジストリ ミラーから pull できない場合、自動的に gcr.io にフェイルオーバーします。そのため、クラスタ構成ファイルで gcrKeyPath の値を指定することをおすすめします。値が指定されていないと、レジストリ ミラーが失敗した場合に、クラスタは gcr.io から pull できなくなります。

pull フェイルオーバー機能が不要な場合は、プロキシ許可リストに gcrKeyPath または gcr.io を追加する必要はありません。

レジストリ ミラー エンドポイント、証明書、pull 認証情報を更新する

レジストリ ミラー エンドポイント、証明書、または pull 認証情報を更新するには、次のように操作します。

  1. クラスタ構成ファイルで、エンドポイント、CA 証明書ファイル、pull 認証情報構成ファイルのパスを更新します。

  2. 次のコマンドを実行して、変更を適用します。

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    以下を置き換えます。

    • CLUSTER_NAME は、更新するクラスタの名前に置き換えます。
    • ADMIN_KUBECONFIG は、管理クラスタの構成ファイルのパスに置き換えます。