第7章 高度なコンセプト

7.1. Quay デプロイメントのカスタマイズ

Quay Operator は、Quay とその依存関係をデプロイするための特性を持つ戦略に沿いますが、Quay のデプロイメントをカスタマイズできる箇所もあります。

7.1.1. Quay アプリケーション設定

デプロイされた Quay アプリケーション自体は、config editor UI を使って通常通り設定するか、Quay のコンフィグレーションバンドルを含む Secret を修正することで設定できます。Operator は spec.configBundleSecret フィールドで指定される Secret を使用しますが、このリソースで変更の有無を認識しません。設定の変更を新規の Secret リソースに加え、spec.configBundleSecret フィールドを変更を反映するように更新することが推奨されます。新しい設定で問題が発生した場合は、spec.configBundleSecret の値を以前の Secret に戻すことが簡単にできます。

7.1.2. レジストリーへの外部アクセスのカスタマイズ

OpenShift で実行している場合、Routes API が利用可能になり、管理コンポーネントとして自動的に使用されます。QuayRegistry の作成後に、外部アクセスポイントは QuayRegistry のステータスブロックで確認できます。

status:
  registryEndpoint: some-quay.my-namespace.apps.mycluster.com

ネイティブ Kubernetes で実行される場合、Operator はレジストリー用に type: ClusterIP の Service を作成します。次に、外部アクセスを行います (Ingress の場合と同様)。

$ kubectl get services -n <namespace>
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP          PORT(S)             AGE
some-quay               ClusterIP   172.30.143.199   <none>               443/TCP,9091/TCP    23h

7.1.2.1. カスタムのホスト名および TLS の使用

デフォルトで、Route はデフォルトの生成されたホスト名で作成され、証明書/キーペアが TLS 用に生成されます。カスタムホスト名を使用して Red Hat Quay にアクセスし、独自の TLS 証明書/キーペアを使用する場合は、以下の手順を実行します。

FEATURE_BUILD_SUPPORT: true の場合、証明書/キーのペアが BUILDMAN_HOSTNAME についても有効であることを確認します。

上記のホスト名について指定の証明書/キーのペアが無効な場合、Quay Operator は提供される証明書/キーのペアを拒否し、Red Hat Quay で使用される証明書/キーのペアを生成します。

以下の内容を含む Secret を作成します。

apiVersion: v1
kind: Secret
metadata:
  name: my-config-bundle
data:
  config.yaml: <must include SERVER_HOSTNAME field with your custom hostname>
  ssl.cert: <your TLS certificate>
  ssl.key: <your TLS key>

次に、作成された Secret を参照する QuayRegistry を作成します。

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: some-quay
spec:
  configBundleSecret: my-config-bundle

7.1.2.2. OpenShift で提供される TLS 証明書の使用

TLS は Quay アプリケーションコンテナーで終了している状態であることが推奨されます。そのため、OpenShift で提供される TLS を使用するには、reencrypt タイプで Route を作成する必要があります。これは OpenShift で提供される TLS をエッジで使用し、Quay Operator が生成する TLS をクラスター内で使用します。これは、route コンポーネントに unmanaged (対象外) のマークを付け、Operator が生成する CA 証明書を使用して TLS を再暗号化 する独自の Route を作成して実行します。

SERVER_HOSTNAME フィールドに <route-name>-<namespace>.apps.<cluster-domain> の値が含まれる config.yaml キーを使用して Secret を作成します (このホスト名の Route は後の手順で作成されます)。

apiVersion: v1
kind: Secret
metadata:
  name: my-config-bundle
data:
  config.yaml: <must include SERVER_HOSTNAME field with your custom hostname>

上記の Secret を参照する QuayRegistryroute コンポーネントを対象外にした状態で作成します。

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: some-quay
spec:
  configBundleSecret: my-config-bundle
  components:
  - kind: route
    managed: false

QuayRegistry が Quay Operator によって完全に調整されるのを待機します。次に、Quay アプリケーション Pod にマウントされている Secret を検索し、tls.cert 値をコピーして、生成された TLS 証明書を取得します。

TLS 再暗号化および上記でコピーした宛先 CA 証明書で Route を作成します。

apiVersion: v1
kind: Route
metadata:
  name: registry
  namespace: <namespace>
spec:
  to:
    kind: Service
    name: <quay-service-name>
  tls:
    termination: reencrypt
    destinationCACertificate:
      -----BEGIN CERTIFICATE-----
      [...]
      -----END CERTIFICATE-----

作成された Route を使用して Quay レジストリーにアクセスできます。

7.1.3. Route コンポーネントの無効化

Operator が Route を作成しないようにするには、QuayRegistry でコンポーネントに管理対象外のマークを付けます。

apiVersion: quay.redhat.com/v1
kind: QuayRegistry
metadata:
  name: some-quay
spec:
  components:
    - kind: route
      managed: false
注記

デフォルトの Route を無効にすると、Quay インスタンスにアクセスするために RouteService、または Ingress を作成し、使用するすべての DNS が Quay 設定の SERVER_HOSTNAME に一致する必要があることを意味します。

7.1.4. 管理ストレージのサイズ変更

Quay Operator は、NooBaa オブジェクト (50 Gib) の作成時に RHOCS によって提供されるデフォルトを使用してデフォルトのオブジェクトストレージを作成します。このストレージを拡張する方法は 2 つあります。既存の PVC のサイズを変更するか、新規ストレージプールに PVC を追加することができます。

7.1.4.1. Noobaa PVC のサイズ変更

  1. OpenShift コンソールにログインし、StoragePersistent Volume Claims を選択します。
  2. noobaa-default-backing-store-noobaa-pvc-* などの名前の PersistentVolumeClaim を選択します。
  3. Action メニューから Expand PVC を選択します。
  4. 永続ボリューム要求 (PVC) の新しいサイズを入力し、Expand を選択します。

数分後に (PVC のサイズによって異なる)、拡張されたサイズは PVC の Capacity フィールドに反映される必要があります。

注記

CSI ボリュームの拡張は、テクノロジープレビュー機能としてのみ利用できます。詳細は https://access.redhat.com/documentation/ja-jp/openshift_container_platform/4.6/html/storage/expanding-persistent-volumes を参照してください。

7.1.4.2. 別のストレージプールの追加

  1. OpenShift コンソールにログインし、NetworkingRoutes を選択します。openshift-storage プロジェクトが選択されていることを確認します。
  2. noobaa-mgmt ルートの Location フィールドをクリックします。
  3. Noobaa 管理コンソールにログインします。
  4. メインダッシュボードの Storage Resources の下で、Add Storage Resources を選択します。
  5. Deploy Kubernetes Pool を選択します。
  6. 新しいプール名を入力します。Next をクリックします。
  7. プールを管理する Pod 数を選択し、ノードごとのサイズを設定します。Next をクリックします。
  8. Deploy をクリックします。

数分後に、追加のストレージプールが Noobaa リソースに追加され、Red Hat Quay で利用できるようになります。

7.1.5. デフォルトの Operator イメージのカスタマイズ

注記

このメカニズムの使用は実稼働環境用の Quay 環境ではサポートされません。これは開発またはテストの目的でのみ使用することが強く推奨されます。Quay Operator でデフォルト以外のイメージを使用する場合、デプロイメントが適切に機能する保証はありません。

特定の状況では、Operator で使用されるデフォルトイメージを上書きすることが役に立つ場合があります。これは、Quay Operator の ClusterServiceVersion に 1 つ以上の環境変数を設定して実行できます。

7.1.5.1. 環境変数

以下の環境変数は、コンポーネントイメージを上書きするために Operator で使用されます。

環境変数

コンポーネント

RELATED_IMAGE_COMPONENT_QUAY

base

RELATED_IMAGE_COMPONENT_CLAIR

clair

RELATED_IMAGE_COMPONENT_POSTGRES

postgres および clair データベース

RELATED_IMAGE_COMPONENT_REDIS

redis

注記

上書きイメージは、タグ (:latest) ではなくマニフェスト (@sha256:) で参照される 必要 があります。

7.1.5.2. 実行中の Operator へのオーバーライドの適用

Operator Lifecycle Manager (OLM) を使用して Quay Operator をクラスターにインストールした場合は、ClusterServiceVersion オブジェクトを変更することで、マネージドコンポーネントのコンテナーイメージを簡単に上書きすることができます。これは、クラスター内で実行中の Operator を示す OLM の表現です。Kubernetes UI または kubectl/oc を使用して Quay Operator の ClusterServiceVersion を検索します。

$ oc get clusterserviceversions -n <your-namespace>

UI、oc edit、またはその他の方法を使用して Quay ClusterServiceVersion を変更し、上記の環境変数を追加して上書きイメージを参照します。

JSONPath: spec.install.spec.deployments[0].spec.template.spec.containers[0].env

- name: RELATED_IMAGE_COMPONENT_QUAY
  value: quay.io/projectquay/quay@sha256:c35f5af964431673f4ff5c9e90bdf45f19e38b8742b5903d41c10cc7f6339a6d
- name: RELATED_IMAGE_COMPONENT_CLAIR
  value: quay.io/projectquay/clair@sha256:70c99feceb4c0973540d22e740659cd8d616775d3ad1c1698ddf71d0221f3ce6
- name: RELATED_IMAGE_COMPONENT_POSTGRES
  value: centos/postgresql-10-centos7@sha256:de1560cb35e5ec643e7b3a772ebaac8e3a7a2a8e8271d9e91ff023539b4dfb33
- name: RELATED_IMAGE_COMPONENT_REDIS
  value: centos/redis-32-centos7@sha256:06dbb609484330ec6be6090109f1fa16e936afcf975d1cbc5fff3e6c7cae7542

これは Operator レベルで実行されるため、すべての QuayRegistry はこれらの同じオーバーライドを使用してデプロイされることに注意してください。

7.1.6. AWS S3 CloudFront

バックエンドレジストリーストレージに AWS S3 CloudFront を使用する場合は、以下の例のようにプライベートキーを指定します。

$ oc create secret generic --from-file config.yaml=./config_awss3cloudfront.yaml --from-file default-cloudfront-signing-key.pem=./default-cloudfront-signing-key.pem test-config-bundle