Red Hat Quay のデプロイ - 高可用性 (HA)


Red Hat Quay 3.7

Red Hat Quay HA のデプロイ

Red Hat OpenShift Documentation Team

概要

Red Hat Quay の HA 環境でのデプロイ

はじめに

Red Hat Quay は、エンタープライズレベルの品質の高いコンテナーレジストリー製品です。Quay を使用してコンテナーを構築、保存し、企業内のサーバーにデプロイします。

この手順では、可用性が高く、エンタープライズレベルの品質の Red Hat Quay 設定をデプロイする方法を説明します。

第1章 概要

Red Hat Quay の機能は次のとおりです。

  • 高可用性
  • Geo レプリケーション
  • リポジトリーのミラーリング
  • Docker v2、スキーマ 2 (multiarch) のサポート
  • 継続的インテグレーション
  • Clair によるセキュリティースキャン
  • カスタムログローテーション
  • ダウンタイムなしのガベージコレクション
  • 24 時間 365 日のサポート

Red Hat Quay は以下のサポートを提供します。

  • 複数の認証およびアクセス方法
  • 複数のストレージバックエンド
  • Quay、Clair、およびストレージバックエンドのカスタム証明書
  • アプリケーションレジストリー
  • 異なるコンテナーイメージタイプ

1.1. アーキテクチャー

Red Hat Quay は、内部と外部の両方で数多くのコアコンポーネントで設定されます。

1.1.1. 内部コンポーネント

  • Quay (コンテナーレジストリー): Pod の複数のコンポーネントで設定される Quay コンテナーをサービスとして実行します。
  • Clair: コンテナーイメージで脆弱性の有無をスキャンし、修正を提案します。

1.1.2. 外部コンポーネント

  • データベース: Red Hat Quay で、プライマリーメタデータストレージとして使用されます。これはイメージストレージ用ではないことに注意してください。
  • Redis (key-value ストア): ライブビルダーログおよび Red Hat Quay チュートリアルを保存します。
  • クラウドストレージ: サポートされるデプロイメントでは、以下のストレージタイプのいずれかを使用する必要があります。

    • パブリッククラウドストレージ: パブリッククラウド環境では、Amazon Web Services の Amazon S3 や Google Cloud の Google Cloud Storage などのクラウドプロバイダーのオブジェクトストレージを使用する必要があります。
    • プライベートクラウドストレージ: プライベートクラウドでは、Ceph RADOS や OpenStack Swift などの S3 または Swift 準拠のオブジェクトストアが必要です。
警告

実稼働環境の設定にローカルにマウントされたディレクトリーのストレージエンジンを使用しないでください。マウントされた NFS ボリュームはサポートされません。ローカルストレージは Red Hat Quay のテスト専用のインストールに使用されることが意図されています。

第2章 Red Hat Quay (高可用性) の準備

注記

この手順では、Red Hat Quay の高可用性と実稼働レベルの品質でデプロイを設定する方法を説明します。

2.1. 前提条件

以下で、Red Hat Quay 高可用性デプロイメントを始める前に知っておく必要のある内容をいくつかご紹介します。

  • データベースサービスには、Postgres または MySQL のいずれかを使用できます。今回は、Clair のセキュリティースキャンのサポートに必要な機能が含まれているため、データベースとして Postgres が選択されました。オプションには以下が含まれます。

    • Crunchy Data 社の PostgreSQL Operator。Red Hat では直接サポートしていませんが、Crunchy Data 社が提供する CrunchDB Operator は、Red Hat Quay で使用できます。このアプローチを取る場合は、Crunchy Data 社とサポート契約を結び、使用方法の指導やオペレーターやデータベースに関する問題について、Crunchy Data 社と直接やり取りする必要があります。
    • 組織がすでに高可用性 (HA) データベースを使用している場合には、そのデータベースを Red Hat Quay で使用できます。サードパーティーのデータベースやその他のコンポーネントのサポートの詳細は、Red Hat Quay サポートポリシー を参照してください。
  • Ceph Object Gateway (RADOS Gateway とも呼ばれる) は、Red Hat Quay が必要とするオブジェクトストレージを提供可能な製品の一例です。Red Hat Quay の設定で Geo レプリケーションを行う場合は、Ceph Object Gateway またはその他のサポート対象のオブジェクトストレージが必要です。クラウドインストールの場合は、以下のいずれかのクラウドオブジェクトストレージを使用できます。

    • Amazon S3 (Red Hat Quay 用の S3 バケットポリシーの設定は、S3 IAM Bucket Policy を参照してください。
    • Azure Blob Storage
    • Google Cloud Storage
    • Ceph オブジェクトゲートウェイ
    • OpenStack Swift
    • CloudFront + S3
    • NooBaa S3 ストレージ
  • この例では、haproxy サーバーを使用していますが、お客様の環境に合ったプロキシーサービスを使用できます。
  • システムの数: この手順では、以下のタスクが割り当てられた 7 つのシステム (物理または仮想) を使用します。

    • A: db01: ロードバランサーとデータベース。haproxy のロードバランサーおよび Postgres のデータベースを動作させます。これらのコンポーネントはそれ自体が高可用ではなく、独自のロードバランサーやプロダクションデータベースの設定方法を紹介するためのものであることに注意してください。
    • B: quay01、quay02、quay03: Quay および Randis。Quay および Randis のサービスを実行するために、3 つ (またはそれ以上) のシステムが割り当てられています。
    • C: ceph01, ceph02, ceph03, ceph04, ceph05: Ceph: 3 つ (またはそれ以上) のシステムがストレージ向けに Ceph サービスを提供します。クラウドにデプロイする場合は、前述のクラウドストレージ機能を利用できます。この手順では、追加で Ansible (ceph05) 用のシステムと、Ceph Object Gateway (ceph04) 用のシステムを使用します。

各システムは以下の属性が必要です。

  • Red Hat Enterprise Linux (RHEL) 8: ダウンロードページ から、最新の Red Hat Enterprise Linux 8 サーバーメディアを取得し、Red Hat Enterprise Linux 8 の製品ドキュメント のインストール手順に従います。

    • Valid Red Hat Subscription: 有効な Red Hat Enterprise Linux 8 サーバーのサブスクリプションを設定します。
    • CPU: 2 つ以上の仮想 CPU
    • RAM: A と B の各システムに 4GB、C の各システムに 8GB
    • ディスクスペース。A システム、B システムそれぞれに約 20GB のディスクスペース (OS 用に 10GB、docker ストレージ用に 10GB)。C システムには、少なくとも 30GB のディスクスペース (必要なコンテナーストレージに応じてそれ以上) が必要です。
注記

Red Hat Enterprise Linux (RHEL) 8 は、Red Hat Quay 3.7 の高可用性で本番環境の品質のデプロイメントに強く推奨されます。RHEL 7 は Red Hat Quay 3.7 でテストされておらず、将来のリリースで非推奨になる予定です。

2.2. Pod の使用

本書では、コンテナーを作成し、デプロイするために podman を使用します。システムで podman が利用可能ではない場合は、同等の docker コマンドを使用できる必要があります。Podman および関連テクノロジーの詳細は、Red Hat Enterprise Linux 8 コンテナーの構築、実行、および管理 を参照してください。

注記

Podman は、Red Hat Quay 3.7 の高可用性で本番環境の品質のデプロイメントに強く推奨されます。Docker は Red Hat Quay 3.7 でテストされておらず、将来のリリースで非推奨になる予定です。

2.3. ロードバランサーとデータベースの設定

最初の 2 つのシステム (q01 および q02) に、haproxy ロードバランサーおよび postgresql データベースをインストールします。Haproxy は、他のシステムで実行する以下のサービスのアクセスポイントおよびロードバランサーとして設定されます。

  • Red Hat Quay (B システムではポート 80 および 443)
  • Redis (B システムではポート 6379)
  • RADOS (C システムではポート 7480)

この 2 つのシステムのサービスはコンテナーとして動作するため、podman がインストールされている場合にはそれを使用します。または、同等の docker コマンドを使用することもできます。

注記

podman の使用とコンテナーの再起動については、このドキュメントの前半にある podman の使用を参照してください。

ここでは、A システムの設定方法をご紹介します。

  1. haproxy サービス用のポートを開く。SELinux ではすべての haproxy ポートを、ファイアウォールでは選択した haproxy ポートを開放します。

    # setsebool -P haproxy_connect_any=on
    # firewall-cmd --permanent --zone=public --add-port=6379/tcp --add-port=7480/tcp
    success
    # firewall-cmd --reload
    success
  2. haproxy サービスを設定する。Red Hat Quay、Redis、および Ceph の RADOS サービスを提供するシステムおよびポートを参照するように、/etc/haproxy/haproxy.cfg を設定します。ここでは、デフォルトと追加されたフロントエンドおよびバックエンドの設定例を紹介します。

    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        mode                    tcp
        log                     global
        option                  httplog
        option                  dontlognull
        option http-server-close
        option forwardfor       except 127.0.0.0/8
        option                  redispatch
        retries                 3
        timeout http-request    10s
        timeout queue           1m
        timeout connect         10s
        timeout client          1m
        timeout server          1m
        timeout http-keep-alive 10s
        timeout check           10s
        maxconn                 3000
    
    #---------------------------------------------------------------------
    # main frontend which proxys to the backends
    #---------------------------------------------------------------------
    
    frontend  fe_http *:80
        default_backend             be_http
    frontend  fe_https *:443
        default_backend             be_https
    frontend fe_redis *:6379
       default_backend              be_redis
    frontend  fe_rdgw *:7480
        default_backend             be_rdgw
    backend be_http
        balance     roundrobin
        server quay01 quay01:80 check
        server quay02 quay02:80 check
        server quay03 quay03:80 check
    backend be_https
        balance     roundrobin
        server quay01 quay01:443 check
        server quay02 quay02:443 check
        server quay03 quay03:443 check
    backend be_rdgw
        balance     roundrobin
        server ceph01 ceph01:7480 check
        server ceph02 ceph02:7480 check
        server ceph03 ceph03:7480 check
    backend be_redis
    server quay01 quay01:6380 check inter 1s
    server quay02 quay02:6380 check inter 1s
    server quay03 quay03:6380 check inter 1s

    新しい haproxy.cfg ファイルを設置したら、haproxy サービスを再起動します。

    # systemctl restart haproxy
  3. データベースをインストール/デプロイするPostgreSQL データベースコンテナーをインストールして有効化し、起動します。以下のコマンドでは、

    • ユーザー、パスワード、データベースがすべて設定された状態で、PostgreSQL データベースを起動します。コンテナーのデータは、ホストシステムの /var/lib/pgsql/data ディレクトリーに保存されます。
    • 利用可能な拡張機能を一覧表示します。
    • pg_trgm 機能拡張を作成します。
    • 拡張機能がインストールされていることを確認します。

      $ mkdir -p /var/lib/pgsql/data
      $ chmod 777 /var/lib/pgsql/data
      $ sudo podman run -d --name postgresql_database \
          -v /var/lib/pgsql/data:/var/lib/pgsql/data:Z  \
          -e POSTGRESQL_USER=quayuser -e POSTGRESQL_PASSWORD=quaypass \
          -e POSTGRESQL_DATABASE=quaydb -p 5432:5432 \
          registry.redhat.io/rhel8/postgresql-10:1
      
      $ sudo podman exec -it postgresql_database /bin/bash -c 'echo "SELECT * FROM pg_available_extensions" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
         name    | default_version | installed_version |           comment
      -----------+-----------------+-------------------+----------------------------------------
       adminpack | 1.0             |                   | administrative functions for PostgreSQL
      ...
      
      $ sudo podman exec -it postgresql_database /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS pg_trgm;" | /opt/rh/rh-postgresql96/root/usr/bin/psql -d quaydb'
      
      $ sudo podman exec -it postgresql_database /bin/bash -c 'echo "SELECT * FROM pg_extension" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
       extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
      ---------+----------+--------------+----------------+------------+-----------+--------------
       plpgsql |       10 |           11 | f              | 1.0        |           |
       pg_trgm |       10 |         2200 | t              | 1.3        |           |
      (2 rows)
      
      $ sudo podman exec -it postgresql_database /bin/bash -c 'echo "ALTER USER quayuser WITH SUPERUSER;" | /opt/rh/rh-postgresql96/root/usr/bin/psql'
      ALTER ROLE
  4. ファイアウォールを開く。お使いのシステムで firewalld サービスが有効であれば、以下のコマンドを実行して、PostgreSQL ポートがファイアウォールを通過して利用できるようにしてください。

    # firewall-cmd --permanent --zone=trusted --add-port=5432/tcp
    success
    # firewall-cmd --reload
    success
  5. PostgreSQL の接続性をテストするpsql コマンドを使用して、PostgreSQL データベースへの接続性をテストします。リモートでサービスにアクセスできることを確認するために、リモートシステムでもこの操作を行ってみてください。

    # yum install postgresql -y
    
    # psql -h localhost quaydb quayuser
    Password for user test:
    psql (9.2.23, server 9.6.5)
    WARNING: psql version 9.2, server version 9.6.
             Some psql features might not work.
    Type "help" for help.
    
    test=> \q

2.4. Ceph の設定

この Red Hat Quay の設定では、以下のように 3 ノードの Ceph クラスターを作成し、他にもいくつかのサポートノードを用意します。

  • ceph01、ceph02、ceph03 - Ceph Monitor、Ceph Manager、Ceph OSD の各ノード。
  • ceph04 - Ceph RGW ノード
  • ceph05 - Ceph Ansible 管理ノード

Ceph ノードのインストールの詳細は、Red Hat Enterprise Linux への Red Hat Ceph Storage のインストール を参照してください。

Ceph ストレージクラスターを設定したら、Ceph Object Gateway (RADOS ゲートウェイとも呼ばれる) を作成します。詳細は、Ceph Object Gateway のインストール を参照してください。

2.4.1. 各 Ceph ノードのインストール

ceph01、ceph02、ceph03、ceph04、および ceph05 で、以下の作業を行います。

  1. Red Hat Ceph Storage をインストールするための要件 で、Ceph ノード設定の前提条件を確認します。特に以下を確認します。

  2. OSD ストレージを準備 (ceph01、ceph02、ceph03 のみ) します。3 つの OSD ノード (ceph01、ceph02、ceph03) で OSD ストレージを設定します。サポート対象のストレージタイプの詳細は、表 3 .2 の OSD Ansible 設定を参照してください。これは、後で Ansible 設定に入力します。この例では、OSD ノードのそれぞれに、OS とは別のフォーマットされていないブロックデバイス (/dev/sdb) が 1 つ設定されています。メタルにインストールする場合は、この目的用にマシンに別のハードドライブを追加するとよいでしょう。
  3. RHEL 7 インストールガイド に記載されている通り、Red Hat Enterprise Linux Server エディションをインストールします。
  4. Red Hat Ceph Storage Nodes の登録 で説明したように、各 Ceph ノードを登録してサブスクライブします。ここでは、必要な repo をサブスクライブする方法を説明します。

    # subscription-manager repos --disable=*
    # subscription-manager repos --enable=rhel-7-server-rpms
    # subscription-manager repos --enable=rhel-7-server-extras-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-osd-rpms
    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-rpms
  5. 各ノードに root 権限のある ansible ユーザーを作成します。任意の名前を選んでください。以下に例を示します。

    # USER_NAME=ansibleadmin
    # useradd $USER_NAME -c "Ansible administrator"
    # passwd $USER_NAME
    New password: *********
    Retype new password: *********
    # cat << EOF >/etc/sudoers.d/admin
    admin ALL = (root) NOPASSWD:ALL
    EOF
    # chmod 0440 /etc/sudoers.d/$USER_NAME

2.4.2. Ceph Ansible ノード (ceph05) の設定

Ceph Ansible ノード (ceph05) にログインし、以下のように設定します。この手順を実行するには、ceph01、ceph02、ceph03 の各ノードが稼働している必要があります。

  1. Ansible ユーザーのホームディレクトリーに、ceph-ansible Playbook で作成した一時的な値を保存するディレクトリーを作成します。

    # USER_NAME=ansibleadmin
    # sudo su - $USER_NAME
    [ansibleadmin@ceph05 ~]$ mkdir ~/ceph-ansible-keys
  2. ansible ユーザーにパスワードレスの ssh を有効にします。ceph05 で ssh-keygen を実行してから (パスフレーズは空のまま)、ceph01、ceph02、ceph03 システムの Ansible ユーザーにも、ssh-copy-id を実行して繰り返し、公開鍵をコピーします。

    # USER_NAME=ansibleadmin
    # sudo su - $USER_NAME
    [ansibleadmin@ceph05 ~]$ ssh-keygen
    [ansibleadmin@ceph05 ~]$ ssh-copy-id $USER_NAME@ceph01
    [ansibleadmin@ceph05 ~]$ ssh-copy-id $USER_NAME@ceph02
    [ansibleadmin@ceph05 ~]$ ssh-copy-id $USER_NAME@ceph03
    [ansibleadmin@ceph05 ~]$ exit
    #
  3. ceph-ansible パッケージをインストールします。

    # yum install ceph-ansible
  4. この 2 つのディレクトリーの間にシンボリックを作成します。

    # ln -s /usr/share/ceph-ansible/group_vars \
        /etc/ansible/group_vars
  5. 修正する Ceph サンプル yml ファイルのコピーを作成します。

    # cd /usr/share/ceph-ansible
    # cp group_vars/all.yml.sample group_vars/all.yml
    # cp group_vars/osds.yml.sample group_vars/osds.yml
    # cp site.yml.sample site.yml
  6. コピーした group_vars/all.yml ファイルを編集します。詳細は、表 3.1 の Ansible の一般的な設定を参照してください。以下に例を示します。

    ceph_origin: repository
    ceph_repository: rhcs
    ceph_repository_type: cdn
    ceph_rhcs_version: 3
    monitor_interface: eth0
    public_network: 192.168.122.0/24

    ご使用のネットワーク機器やアドレス範囲は、異なる場合があります。

  7. コピーした group_vars/osds.yml ファイルを編集します。詳細は、表 3.2 の OSD Ansible 設定を参照してください。この例では、各 OSD ノードの 2 番目のディスクデバイス (/dev/sdb) がデータとジャーナルの両方のストレージに使用されています。

    osd_scenario: collocated
    devices:
      - /dev/sdb
    dmcrypt: true
    osd_auto_discovery: false
  8. etc/ansible/hosts インベントリーファイルを編集して、Ceph ノードを Ceph モニター、OSD、マネージャーノードとして識別します。この例では、各ノードでストレージデバイスも識別されています。

    [mons]
    ceph01
    ceph02
    ceph03
    
    [osds]
    ceph01 devices="[ '/dev/sdb' ]"
    ceph02 devices="[ '/dev/sdb' ]"
    ceph03 devices="[ '/dev/sdb' ]"
    
    [mgrs]
    ceph01 devices="[ '/dev/sdb' ]"
    ceph02 devices="[ '/dev/sdb' ]"
    ceph03 devices="[ '/dev/sdb' ]"
  9. この行を /etc/ansible/ansible.cfg ファイルに追加して、Ansible Playbook の各実行結果の出力を Ansible ユーザーのホームディレクトリーに保存します。

    retry_files_save_path = ~/
  10. Ansible が、設定したすべての Ceph ノードに、Ansible ユーザーとして到達できることを確認します。

    # USER_NAME=ansibleadmin
    # sudo su - $USER_NAME
    [ansibleadmin@ceph05 ~]$ ansible all -m ping
    ceph01 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    ceph02 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    ceph03 | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    [ansibleadmin@ceph05 ~]$
  11. ceph-ansible Playbook を (Ansible のユーザーとして) 実行します。

    [ansibleadmin@ceph05 ~]$ cd /usr/share/ceph-ansible/
    [ansibleadmin@ceph05 ~]$ ansible-playbook site.yml

    この時点で、Ansible Playbook が Ceph ノードをチェックし、要求したサービス向けに設定します。失敗した場合は、必要な修正を行い、コマンドを再実行してください。

  12. 3 つの Ceph ノード (ceph01、ceph02、または ceph03) のいずれかにログインし、Ceph クラスターの正常性を確認します。

    # ceph health
    HEALTH_OK
  13. 同じノードで、rados を使用してモニタリングが機能していることを確認します。

    # ceph osd pool create test 8
    # echo 'Hello World!' > hello-world.txt
    # rados --pool test put hello-world hello-world.txt
    # rados --pool test get hello-world fetch.txt
    # cat fetch.txt
    Hello World!

2.4.3. Ceph Object Gateway のインストール

Ansible システム (cef05) で、Ceph Storage クラスターへの Ceph Object Gateway を設定します (最終的には cef04 で実行します)。詳細は、Ceph Object Gateway のインストール を参照してください。

2.5. Redis の設定

3 台の Red Hat Quay システム (quay01、quay02、quay03) のそれぞれに Red Hat Enterprise Linux 8 サーバーがインストールされている状態で、以下のように Redis サービスをインストールして起動します。

  1. Redis をインストール/デプロイします。3 台あるそれぞれの quay0* システムで、Redis をコンテナーとして実行します。

    # mkdir -p /var/lib/redis
    # chmod 777 /var/lib/redis
    # sudo podman run -d -p 6379:6379 \
        -v /var/lib/redis:/var/lib/redis/data:Z \
        registry.redhat.io/rhel8/redis-5
  2. redis の接続性を確認しますtelnet コマンドを使用して、redis サービスへの接続性をテストできます。MONITOR と入力して (サービスの監視を開始し)、QUIT で終了します。

    # yum install telnet -y
    # telnet 192.168.122.99 6379
    Trying 192.168.122.99...
    Connected to 192.168.122.99.
    Escape character is '^]'.
    MONITOR
    +OK
    +1525703165.754099 [0 172.17.0.1:43848] "PING"
    QUIT
    +OK
    Connection closed by foreign host.
注記

podman の使用とコンテナーの再起動については、このドキュメントの前半にある podman の使用を参照してください。

第3章 Red Hat Quay の設定

Red Hat Quay サービスをコンテナーとして実行する前に、同じ Quay コンテナーを使用して Red Hat Quay のデプロイに必要な設定ファイル (config.yaml) を作成する必要があります。これを実行するには、config 引数とパスワード (ここで my-secret-password を置き換える) を Quay コンテナーに渡します。後に、そのパスワードを使用して設定ツールに quayconfig としてログインします。

その例を以下で紹介します。

  1. セットアップモードで quay を起動します。最初の quay ノードで、以下を実行します。

    # sudo podman run --rm -it --name quay_config -p 8080:8080 registry.redhat.io/quay/quay-rhel8:v3.7.10 config my-secret-password
  2. ブラウザーを開きます。quay の設定ツールが起動したら、ブラウザーで、設定ツールを実行中のシステムの URL とポート 8080 を開きます (例: http://myquay.example.com:8080)。ユーザー名とパスワードの入力を求められます。
  3. quayconfig としてログインします。プロンプトが表示されたら、quayconfig のユーザー名とパスワード (podman run コマンドラインで入力したもの) を入力します。
  4. 必要な項目を入力します。既存の設定バンドルをマウントせずに設定ツールを起動すると、初期設定セッションが起動します。設定セッションでは、デフォルト値が自動的に入力されます。次のステップでは、残りの必須項目を入力する方法を説明します。
  5. データベースを特定します。初期設定では、Red Hat Quay で使用するデータベースの種類と場所について、以下の情報を追加する必要があります。

    • データベースの種類。MySQL または PostgreSQL を選択してください。基本的な例では MySQL を使用し、高可用性の Red Hat Quay on OpenShift の例では PostgreSQL を使用します。
    • データベースサーバー。データベースの IP アドレスまたはホスト名、(3306 と異なる場合はポート番号も) 指定します。
    • ユーザー名: データベースへの完全なアクセス権が割り当てられたユーザーを指定します。
    • パスワード: 選択したユーザーに割り当てたパスワードを入力します。
    • データベース名: データベースサーバーの起動時に割り当てたデータベース名を入力します。
    • SSL 証明書: 実稼働環境では、データベースに接続するための SSL 証明書を用意する必要があります。

      次の図は、Red Hat Quay が使用するデータベースを示す画面の例です。

      Identifying the database Red Hat Quay will use

  6. Redis のホスト名、サーバー設定を指定し、他に必要な設定を追加します。設定完了までに他に追加可能な設定は以下のとおりです。Red Hat Quay の高可用性デプロイメントの他の設定

    • 基本的なテスト設定では、Redis のホスト名を特定するだけで十分です。ただし、この手順の最後で説明するように、Clair スキャンやリポジトリーミラーリングなどの他の機能も追加できます。
    • 高可用性および OpenShift の設定では、共有ストレージやシステム間のセキュアな通信などの機能を実現するのに、さらに多くの設定が必要になります (以下に記載)。

      ここでは、考慮する必要のある設定について説明します。

    • カスタム SSL 証明書。Red Hat Quay で使用するカスタムまたは自己署名の SSL 証明書をアップロードします。詳細は、Red Hat Quay への接続を保護するための SSL の使用 を参照してください。これは、高可用性の場合に推奨しています。

      重要

      SSL 証明書の使用は、基本的な展開と高可用性の両方で推奨されます。SSL を使用しないことにした場合は、セキュアでないレジストリーのテスト で説明されているように、新しい Red Hat Quay 設定をセキュアでないレジストリーとして使用するように、コンテナークライアントを設定する必要があります。

    • 基本的な設定: 会社のロゴをアップロードして、Red Hat Quay のレジストリーをリブランディングします。
    • サーバー設定: Red Hat Quay サービスに到達するためのホスト名または IP アドレス、TLS の指定 (実稼働インストールでは推奨)。サーバーのホスト名は、Red Hat Quay の全デプロイメントに必要です。TLS 終端は 2 つの異なる方法で実行できます。

      • インスタンス自体で実行する。すべての TLS トラフィックが Quay コンテナー内の nginx サーバーによって制御されます (推奨される方法)。
      • ロードバランサーで実行する。これは、推奨されません。ロードバランサーで TLS 設定が正しく行われないと、Red Hat Quay へのアクセスが失われる可能性があります。
    • データの整合性設定: パフォーマンスと可用性を向上させるために、ロギングの一貫性保証の設定を緩和するかどうかを選択します。
    • タイムマシン: 古いイメージタグを一定期間リポジトリーに残すことができ、ユーザーがタグの有効期限を独自に選択できるようにします。
    • redis: Red Hat Quay が使用する redis サービスに接続するためのホスト名または IP アドレス (およびオプションのパスワード) を指定します。
    • リポジトリーミラーリング: Enable Repository Mirroring チェックボックスを選択します。この機能を有効にすると、Red Hat Quay クラスターに、リモートレジストリーから選択したリポジトリーをミラーリングするリポジトリーを作成できます。リポジトリーミラーリングを有効にする前に、この手順で後述するように、リポジトリーミラーリングワーカーを起動します。
    • レジストリーストレージ: ストレージの場所を特定します。クラウドとローカルの各種ストレージオプションがあります。高可用性にはリモートストレージが必要です。Red Hat Quay 高可用ストレージの例を使用している場合は、Ceph ストレージの場所を特定します。OpenShift では、この例では Amazon S3 のストレージを使用しています。
    • アクションログの保存設定: アクションログは、デフォルトでは Red Hat Quay データベースに保存されます。大量のアクションログがある場合は、それらのログを Elasticsearch に転送して、後で検索や分析を行うことができます。これを行うには、アクションログストレージの設定 で説明されているように、アクションログストレージの値を Elasticsearch に変更し、関連する設定を行います。
    • アクションログのローテーションおよびアーカイブ: 30 日以上前のログをストレージに移動するログローテーションを有効にして、ストレージ領域を指定します。
    • セキュリティースキャナー: セキュリティースキャナのエンドポイントと認証キーを選択して、セキュリティースキャンを有効にします。イメージスキャンを行うように Clair を設定するには、Clair のセットアップ および Clair の設定 を参照してください。これは、高可用性の場合に推奨しています。
    • アプリケーションレジストリー: Kubernetes のマニフェストや Helm のチャートなどを含む、追加のアプリケーションレジストリーを有効にします (App Registry の仕様 を参照)。
    • rkt 変換: rkt fetch が Red Hat Quay レジストリーからイメージを取得して使用できるようにします。GPG2 の公開鍵および秘密鍵が必要です。このフィールドは非推奨です。
    • 電子メール: 通知やユーザーパスワードのリセットに使用する電子メールを有効にします。
    • 内部認証: レジストリーのデフォルト認証をローカルデータベースから LDAP、Keystone (OpenStack)、JWT Custom Authentication、External Application Token に変更します。
    • 外部認証 (OAuth): これを有効にして GitHub または GitHub Enterprise によるレジストリーへの認証を許可します。
    • Google 認証: これを有効にして、Google によるレジストリーへの認証を許可します。
    • アクセス設定: 基本的なユーザー名/パスワード認証がデフォルトで有効になっています。有効にできる他の認証タイプには、外部アプリケーショントークン (docker や rkt コマンドで使用されるユーザー生成トークン)、匿名アクセス (レジストリーにアクセスできる人なら誰でもアクセスできるようにする)、ユーザー作成 (ユーザーに自分のアカウントを作成させる)、暗号化クライアントパスワード (暗号化パスワードを含むコマンドラインユーザーアクセスを必要とする)、接頭辞ユーザー名の自動補完 (自動補完時にユーザー名を正確に一致させる必要がないように無効化する) などがあります。
    • レジストリープロトコル設定: Restrict V1 Push Support のチェックボックスをチェックしたままにし、Docker V1 プロトコルのプッシュへのアクセスを制限します。Red Hat は Docker V1 プッシュプロトコルを有効にしないように推奨していますが、有効にする場合は、有効にする namespace を明示的にホワイトリスト化する必要があります。
    • Dockerfile ビルドサポート: ビルドして Red Hat Quay にプッシュする Dockerfile をユーザーが送信できるようにします。これは、マルチテナント環境では推奨されません。
  7. 変更内容の検証: Validate Configuration Changes を選択します。検証が成功すると、次のような Download Configuration モーダルが表示されます。

    Download the Red Hat Quay configuration tarball to the local system

  8. 設定のダウンロード: Download Configuration ボタンを選択し、後で Red Hat Quay の起動に使用するために、tarball (quay-config.tar.gz) をローカルディレクトリーに保存します。

この時点で、Red Hat Quay 設定ツールを終了し、ブラウザーを閉じます。次に、最初の Red Hat Quay ノードをインストールするシステムに、この tarball ファイルをコピーします。基本的なインストールでは、同じシステム上で Red Hat Quay を実行しているだけの場合もあります。

第4章 Red Hat Quay のデプロイ

Red Hat Quay サービスをクラスター内のノードにデプロイするには、設定ファイルの作成に使用したものと同じ Quay コンテナーを使用します。以下に、相違点を説明します。

  • 設定ファイルやデータが保存されているディレクトリーを指定する。
  • --sysctl net.core.somaxconn=4096 を指定してコマンドを実行する。
  • config オプションやパスワードは使用しない。

基本的な設定であれば、1 つのノードにデプロイできますが、高可用性には、3 つ以上のノード (たとえば quay01、quay02、quay03) が必要になります。

注記

作成された Red Hat Quay サービスは、通常のポート 8080 および SSL ポート 8443 をリッスンします。これは、それぞれ標準のポート 80 と 443 をリッスンしていた、Red Hat Quay の以前のリリースとは異なります。本書では、8080 と 8443 をそれぞれホストの標準ポート 80 と 443 にマッピングしています。本書の残りの部分では、この方法でポートをマッピングしたとの前提で進めていきます。

手順は以下のとおりです。

  1. ディレクトリーを作成します。2 つのディレクトリーを作成して、ホストの設定情報やデータを保存します。以下に例を示します。

    # mkdir -p /mnt/quay/config
    # #optional: if you don't choose to install an Object Store
    # mkdir -p /mnt/quay/storage
  2. 設定ファイルをコピーします。tarball (quay-config.tar.gz) を設定ディレクトリーにコピーして展開します。以下に例を示します。

    # cp quay-config.tar.gz /mnt/quay/config/
    # tar xvf quay-config.tar.gz
    config.yaml ssl.cert ssl.key
  3. Red Hat Quay をデプロイします。Quay.io への認証を済ませた後 (Red Hat Quay へのアクセス を参照)、以下のように Red Hat Quay をコンテナーとして実行します。

    注記

    quay コンテナーについて -e DEBUGLOG=trueQuaypodman run コマンドラインに追加して、デバッグレベルのロギングを有効にします。-e IGNORE_VALIDATION=true を追加し、起動プロセスで検証をバイパスします。

    # sudo podman run --restart=always -p 443:8443 -p 80:8080 \
       --sysctl net.core.somaxconn=4096 \
       --privileged=true \
       -v /mnt/quay/config:/conf/stack:Z \
       -v /mnt/quay/storage:/datastorage:Z \
       -d registry.redhat.io/quay/quay-rhel8:v3.7.10
  4. ブラウザーおよび UI を開きますQuay コンテナーが起動したら、Web ブラウザーに移動し、Quay コンテナーを実行するノードの URL を開きます。
  5. Red Hat Quay にログインします。設定時に作成したスーパーユーザーアカウントを使用して、ログインして Red Hat Quay が適切に機能していることを確認します。
  6. Red Hat Quay ノードを追加します。この時点で、説明されているように各ノードに移動し、tarball を追加して Quay コンテナーを起動することで、この Red Hat Quay クラスターにノードを追加するオプションを選択することができます。
  7. オプション機能を追加します。Clair イメージスキャンやリポジトリーミラーリングなどの Red Hat Quay クラスターに機能を追加するには、次のセクションに進んでください。

4.1. Red Hat Quay への Clair のイメージスキャンの追加

Red Hat Quay のデプロイメントに Clair イメージスキャンを設定してデプロイする方法は、Clair セキュリティースキャン で説明しています。

4.2. Red Hat Quay へのリポジトリーミラーリングの追加

リポジトリーミラーリングを有効にすると、選択した外部レジストリーのコンテンツと完全に一致するコンテナーイメージのリポジトリーを Red Hat Quay クラスター上に作成し、それらのリポジトリーのコンテンツを定期的なスケジュールで、またはオンデマンドで同期できます。

Red Hat Quay クラスターにリポジトリーミラーリング機能を追加するには、以下の手順に従います。

  • リポジトリーミラーリングワーカーを実行します。これを行うには、repomirror オプションで quay pod を起動します。
  • Red Hat Quay 設定ツールで Enable Repository Mirroring を選択します。
  • Red Hat Quay Web UI にログインし、Red Hat Quay でのリポジトリーミラーリング で説明されているように、ミラーリングされたリポジトリーの作成を開始します。

以下の手順は、ブラウザーで Red Hat Quay Setup コンテナーが実行されている OpenShift プラットフォームで Red Hat Quay クラスターがすでに実行されていることを前提としています。

  1. リポジトリーミラーリングワーカーを起動しますrepomirror モードで Quay コンテナーを起動します。この例では、現在 /root/ca.crt に保存されている証明書を使用して TLS 通信を設定していることを前提としています。そうでない場合は、コンテナーに /root/ca.crt を追加する行を削除します。

    $ sudo podman run -d --name mirroring-worker \
      -v /mnt/quay/config:/conf/stack:Z \
      -v /root/ca.crt:/etc/pki/ca-trust/source/anchors/ca.crt \
      registry.redhat.io/quay/quay-rhel8:v3.7.10 repomirror
  2. 設定ツールにログインします。Red Hat Quay Setup Web UI (設定ツール) にログインします。
  3. リポジトリーのミラーリングを有効にします。リポジトリーミラーリングセクションまでスクロールダウンし、Enable Repository Mirroring チェックボックスを選択します (下図参照)。
  4. HTTPS および証明書の検証を選択します。ミラーリング時に HTTPS 通信を要求し、証明書を検証する場合は、このチェックボックスを選択します。 Enable mirroring and require HTTPS and verified certificates
  5. 設定を保存します。Save Configuration Changes ボタンを選択します。これで Red Hat Quay クラスターのリポジトリーミラーリングが有効になります。ミラーリングされた独自のコンテナーイメージのリポジトリーを設定する方法は、Red Hat Quay におけるリポジトリーミラーリング を参照してください。

第5章 Red Hat Quay の使用開始

Red Hat Quay を起動したら、以下を行うことができます。

  • Quay のホームページでチュートリアルを選択して、15 分間のチュートリアルを試します。チュートリアルでは、Quay へのログイン、コンテナーの起動、イメージの作成、リポジトリーのプッシュ、リポジトリーの閲覧、リポジトリーのパーミッションの変更などを確認できます。
  • Red Hat Quay リポジトリーでの作業については、Red Hat Quay の使用 を参照してください。

関連情報

法律上の通知

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

Red Hat ドキュメントについて

Legal Notice

Theme

© 2026 Red Hat
トップに戻る