アドオン
第1章 アドオンの概要
Red Hat Advanced Cluster Management for Kubernetes アドオンは、パフォーマンスの一部の領域を改善し、アプリケーションを強化する機能を追加できます。以下のセクションでは、Red Hat Advanced Cluster Management で使用できるアドオンの概要を説明します。
1.1. Submariner マルチクラスターネットワーキングおよびサービスディスカバリー
Submariner は、Red Hat Advanced Cluster Management for Kubernetes で使用できるオープンソースツールであり、オンプレミスまたはクラウドのいずれかの環境で、2 つ以上のマネージドクラスター間で直接ネットワークおよびサービスディスカバリーを提供します。Submariner は Multi-Cluster Services API (Kubernetes Enhancements Proposal #1645) と互換性があります。Submariner の詳細は、Submariner のサイト を参照してください。
どのプロバイダーが 自動コンソールデプロイメント をサポートするか、手動デプロイメント を必要とするかなど、インフラストラクチャープロバイダーのサポートレベルの詳細は、Red Hat Advanced Cluster Management サポートマトリックス を必ず参照してください。
Submariner の使用方法の詳細は、次のトピックを参照してください。
1.1.1. 非接続クラスターへの Submariner のデプロイ
非接続クラスターに Submariner をデプロイすると、クラスターに対する外部からの攻撃のリスクが軽減されるため、セキュリティー上の問題を解決できます。Red Hat Advanced Cluster Management for Kubernetes を使用して Submariner を非接続クラスターにデプロイするには、非接続ネットワーク環境へのインストール で説明されている手順を最初に完了する必要があります。
1.1.1.1. 非接続クラスターで Submariner を設定する
非接続ネットワーク環境へのインストール で説明されている手順に従った後、非接続クラスターでのデプロイメントをサポートするために、インストール中に Submariner を設定する必要があります。以下のトピックを参照してください。
1.1.1.1.1. ローカルレジストリーでのイメージのミラーリング
非接続クラスターに Submariner をデプロイする前に、Submariner Operator bundle
イメージをローカルレジストリーにミラーリングしてください。
注: Red Hat Advanced Cluster Management 2.7.2 以前を使用している場合は、nettest-rhel8
イメージもミラーリングする必要があります。
1.1.1.1.2. catalogSource 名のカスタマイズ
デフォルトでは、submariner-addon
は redhat-operators
という名前の catalogSource
を検索します。別の名前の catalogSource
を使用する場合は、マネージドクラスターに関連付けられた SubmarinerConfig
の SubmarinerConfig.Spec.subscriptionConfig.Source
パラメーターの値を、catalogSource
のカスタム名で更新する必要があります。
1.1.1.1.3. SubmarinerConfig で airGappedDeployment を有効にする
Red Hat Advanced Cluster Management for Kubernetes コンソールからマネージドクラスターに submariner-addon
をインストールする場合、Disconnected cluster オプションを選択して、Submariner が外部サーバーに対して API クエリーを作成しないようにすることができます。
API を使用して Submariner をインストールする場合は、マネージドクラスターに関連付けられた SubmarinerConfig
で airGappedDeployment
パラメーターを true
に設定する必要があります。
1.1.2. Submariner の設定
Red Hat Advanced Cluster Management for Kubernetes は、Submariner をハブクラスターのアドオンとして提供します。Submariner の詳細は、Submariner オープンソースプロジェクトのドキュメント を参照してください。
1.1.2.1. 前提条件
Submariner を使用する前に、以下の前提条件があることを確認します。
-
cluster-admin
のパーミッションを使用してハブクラスターにアクセスするための認証情報。 - ゲートウェイノード間で IP 接続を設定している。2 つのクラスターを接続する場合に、最低でも 1 つのクラスターには、ゲートウェイノード専用のパブリックまたはプライベート IP アドレスを使用してゲートウェイノードにアクセスできる必要があります。詳細は、Submariner NAT Traversal を参照してください。
- OVN Kubernetes を使用している場合には、クラスターは Red Hat OpenShift Container Platform バージョン 4.11 以降を使用する必要があります。
- Red Hat OpenShift Container Platform クラスターが OpenShift SDN CNI を使用する場合、各マネージドクラスター内のすべてのノードにわたるファイアウォール設定は、双方向で 4800/UDP を許可する必要があります。
- マネージドクラスター間のトンネルを確立するために、ファイアウォール設定では、ゲートウェイノードで 4500/UDP および 4490/UDP を許可する必要があります。
ゲートウェイノードが間に NAT を介さずにプライベート IP 経由で直接到達できる場合は、ファイアウォール設定でゲートウェイノード上で ESP プロトコルが許可されていることを確認してください。
注記: これは、クラスターが Amazon Web Services、Google Cloud Platform、Microsoft Azure、または Red Hat OpenStack 環境にデプロイされている場合は自動的に設定されますが、他の環境のクラスターおよびプライベートクラウドを保護するファイアウォールについては手動で設定する必要があります。
managedcluster
名は、RFC 1123 で定義されている DNS ラベル標準に従い、次の要件を満たす必要があります。- 63 文字以内
- 小文字の英数字またはハイフン (-) のみが含まれる。
- 英数字で始まる。
- 英数字で終わる。
1.1.2.2. Submariner ポートテーブル
次の表を参照して、有効にする必要がある Submariner ポートを確認してください。
名前 | デフォルト値 | カスタマイズ可能 | 任意または必須 |
---|---|---|---|
IPsec NATT | 4500/UDP | はい | 必須 |
VXLAN | 4800/UDP | いいえ | 必須 |
NAT 検出ポート | 4490/UDP | いいえ | 必須 |
前提条件の詳細は、Submariner アップストリームの前提条件のドキュメント を参照してください。
1.1.2.3. Globalnet
Globalnet は、CIDR が重複しているクラスター間の接続をサポートする Submariner アドオンに含まれている機能です。Globalnet はクラスターセット全体の設定であり、最初のマネージドクラスターがクラスターセットに追加されたときに選択できます。Globalnet が有効になっている場合、各マネージドクラスターには、仮想グローバルプライベートネットワークからグローバル CIDR が割り当てられます。グローバル CIDR は、クラスター間通信をサポートするのに使用されます。
Submariner を実行しているクラスターで CIDR が重複している可能性がある場合は、Globalnet を有効にすることを検討してください。コンソールを使用する場合、ClusterAdmin
は、クラスターセット内のクラスターに対して Submariner アドオンを有効にするときに、Globalnet を有効にする オプションを選択することにより、クラスターセットに対して Globalnet を有効にすることができます。Globalnet を有効にした後は、Submariner を削除せずに無効にすることはできません。
Red Hat Advanced Cluster Management API を使用する場合、ClusterAdmin
は、<ManagedClusterSet>-broker
namespace に submariner-broker
オブジェクトを作成することで Globalnet を有効にできます。
ClusterAdmin
ロールには、ブローカーの namespace にこのオブジェクトを作成するのに必要な権限があります。クラスターセットのプロキシー管理者として機能するのに作成されることがある ManagedClusterSetAdmin
ロールには、必要な権限がありません。必要な権限を提供する場合は、ClusterAdmin
が access-to-brokers-submariner-crd
のロール権限を ManagedClusterSetAdmin
ユーザーに関連付ける必要があります。
submariner-broker
オブジェクトを作成するには、次の手順を実行します。
次のコマンドを実行して
<broker-namespace>
を取得します。oc get ManagedClusterSet <cluster-set-name> -o jsonpath="{.metadata.annotations['cluster\.open-cluster-management\.io/submariner-broker-ns']}"
submariner-broker
という名前の YAML ファイルを作成して、Globalnet 設定を指定するsubmariner-broker
オブジェクトを作成します。次の行のようなコンテンツを YAML ファイルに追加します。apiVersion: submariner.io/v1alpha1 kind: Broker metadata: name: submariner-broker namespace: <broker-namespace> spec: globalnetEnabled: <true-or-false>
broker-namespace
を、ブローカーの namespace に置き換えます。Globalnet を有効にするには、
true-or-false
をtrue
に置き換えます。注:
メタデータ
名
パラメーターはsubmariner-broker
である必要があります。次のコマンドを入力して、ファイルを YAML ファイルに適用します。
oc apply -f submariner-broker.yaml
Globalnet の詳細は、Submariner のドキュメントの Globalnet コントローラー を参照してください。
1.1.3. subctl コマンドユーティリティーのインストール
subctl
ユーティリティーは、コンテナーイメージで提供されます。subctl
ユーティリティーをローカルにインストールするには、次の手順を実行します。
次のコマンドを実行し、プロンプトが表示されたら認証情報を入力して、レジストリーにログインします。
oc registry login --registry registry.redhat.io
次のコマンドを入力して、
subctl
コンテナー をダウンロードし、subctl
バイナリーの圧縮バージョンを/tmp
に展開します。oc image extract registry.redhat.io/rhacm2/subctl-rhel8:v0.14 --path="/dist/subctl-v0.14*-linux-amd64.tar.xz":/tmp/ --confirm
次のコマンドを入力して、
subctl
ユーティリティーを展開します。tar -C /tmp/ -xf /tmp/subctl-v0.14*-linux-amd64.tar.xz
次のコマンドを入力して、
subctl
ユーティリティーをインストールします。install -m744 /tmp/subctl-v0.14*/subctl-v0.14*-linux-amd64 /$HOME/.local/bin/subctl
1.1.3.1. subctl コマンドの使用
パスにユーティリティーを追加した後に使用可能なコマンドの簡単な説明は、次の表を参照してください。
指定されたサービスの | |
指定されたサービスの | |
Submariner リソースに関する情報を提供します。 | |
Submariner がクラスターのペア全体で設定されている場合は、接続性、サービスディスカバリー、およびその他のサブマリーナー機能を検証します。 | |
Submariner で、または単一のクラスター内で有効になっているクラスターのペア全体のスループットおよびレイテンシーをベンチマークします。 | |
チェックを実行して、Submariner デプロイメントが正しく機能しない原因となる問題を特定します。 | |
クラスターから情報を収集して、Submariner デプロイメントのトラブルシューティングに役立てます。 | |
|
subctl
ユーティリティーとそのコマンドの詳細は、Submariner ドキュメントのsubctl
を参照してください。
1.1.4. コンソールを使用した Submariner のデプロイ
Red Hat Advanced Cluster Management for Kubernetes に Submariner をデプロイする前に、ホスト環境でクラスターを準備する必要があります。SubmarinerConfig
API または Red Hat Advanced Cluster Management for Kubernetes コンソールを使用して、以下のプロバイダーで Red Hat OpenShift Container Platform クラスターを自動的に準備できます。
- Amazon Web Services
- Google Cloud Platform
- Red Hat OpenStack Platform
- Microsoft Azure
- VMware vSphere
注: VMware vSphere では、NSX 以外のデプロイメントのみがサポートされています。
他のプロバイダーに Submariner をデプロイするには、Submariner の手動デプロイ を参照してください。
Red Hat Advanced Cluster Management for Kubernetes コンソールで Submariner をデプロイするには、以下の手順を実行します。
必要なアクセス権限: クラスターの管理者
- コンソールで、Infrastructure > Clusters を選択します。
- Clusters ページで、Cluster sets タブを選択します。Submariner で有効にするクラスターは、同じクラスターセットにある必要があります。
- Submariner をデプロイするクラスターがすでに同じクラスターセットにある場合は、手順 5 に進みます。
Submariner をデプロイするクラスターが同じクラスターセットにない場合は、以下の手順に従ってクラスターセットを作成します。
- Create cluster set を選択します。
- クラスターセットに名前を付け、Create を選択します。
- Manage resource assignments を選択して、クラスターセットに割り当てます。
- Submariner で接続するマネージドクラスターを選択して、クラスターセットに追加します。
- Review を選択して、選択したクラスターを表示し、確認します。
- Save を選択してクラスターセットを保存し、作成されるクラスターセットページを表示します。
- クラスターセットページで、Submariner add-on タブを選択します。
- Install Submariner add-ons を選択します。
- Submariner をデプロイするクラスターを選択します。
次の表のフィールドを参照し、Install Submariner アドオン エディターに必要な情報を入力します。
フィールド 注記 AWS Access Key ID
AWS クラスターをインポートする場合にのみ表示されます。
AWS Secret Access Key
AWS クラスターをインポートする場合にのみ表示されます。
Base domain resource group name
Azure クラスターをインポートする場合にのみ表示されます。
Client ID
Azure クラスターをインポートする場合にのみ表示されます。
クライアントシークレット
Azure クラスターをインポートする場合にのみ表示されます。
サブスクリプション ID
Azure クラスターをインポートする場合にのみ表示されます。
テナント ID
Azure クラスターをインポートする場合にのみ表示されます。
Google Cloud Platform service account JSON key
Google Cloud Platform クラスターをインポートする場合にのみ表示されます。
インスタンスタイプ
マネージドクラスターで作成されるゲートウェイノードのインスタンスタイプ。
IPsec NAT-T port
IPsec NAT トラバーサルポートのデフォルト値はポート
4500
です。マネージドクラスター環境が VMware vSphere の場合は、ファイアウォールでこのポートが開いていることを確認してください。ゲートウェイ数
マネージドクラスターにデプロイされるゲートウェイノードの数。AWS、GCP、Azure、および OpenStack クラスターの場合、専用のゲートウェイノードがデプロイされます。VWware クラスターの場合、既存のワーカーノードはゲートウェイノードとしてタグ付けされます。デフォルト値は
1
です。値が 1 を超える場合、Submariner ゲートウェイの High Availability (HA) は自動的に有効になります。ケーブルドライバー
クラスター間トンネルを維持する Submariner ゲートウェイケーブルエンジンのコンポーネントです。デフォルト値は
Libreswan IPsec
です。Disconnected cluster
有効にすると、パブリック IP 解決のために外部サーバーにアクセスしないように Submariner に指示します。
Globalnet CIDR
クラスターセットで Globalnet 設定が選択されている場合にのみ表示されます。マネージドクラスターに使用される Globalnet CIDR。空白のままにすると、クラスターセットプールから CIDR が割り当てられます。
- エディターの末尾で Next を選択して、次のクラスターのエディターに移動し、選択した残りのクラスターごとに、エディターを完了します。
- 各マネージドクラスターの設定を確認します。
Install をクリックして、選択したマネージドクラスターに Submariner をデプロイします。
インストールと設定が完了するまで数分かかる場合があります。Submariner add-on タブのリストで Submariner ステータスを確認できます。
-
Connection status
は、マネージドクラスターで確立される Submariner 接続の数を示します。 -
Agent status
は、Submariner がマネージドクラスターに正常にデプロイされるかどうかを示します。コンソールでは、インストールと設定が完了するまでDegraded
のステータスをレポートする場合があります。 -
Gateway nodes labeled
はマネージドクラスター上のゲートウェイノードの数を示します。
-
Submariner が選択したクラスターにデプロイされました。
1.1.5. サブマリーナを手動でデプロイ
Red Hat Advanced Cluster Management for Kubernetes に Submariner をデプロイする前に、接続用にホスト環境でクラスターを準備する必要があります。コンソールを使用して Submariner をサポートされているクラスターに自動的にデプロイする方法は、コンソールを使用して Submariner をデプロイする を参照してください。
Submariner の自動デプロイメントをサポートしていないプロバイダーでクラスターがホスティングされている場合は、次のセクションを参照してインフラストラクチャーを手動で準備してください。プロバイダーごとに固有の準備手順があるため、正しいプロバイダーを選択してください。
1.1.5.1. Submariner 向けのベアメタルの準備
Submariner をデプロイするためのベアメタルクラスターを準備するには、次の手順を実行します。
- ファイアウォールが、ゲートウェイノードの 4500/UDP ポートおよび 4490/UDP ポートで外部クライアントの受信/送信トラフィックを許可していることを確認します。また、クラスターが OpenShiftSDN CNI を使用してデプロイされている場合は、ローカルクラスターノード内のインバウンド/アウトバウンド UDP/4800 トラフィックを許可します。
次の例のような YAML コンテンツをカスタマイズして適用します。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: gatewayConfig: gateways: 1
managed-cluster-namespace
をマネージドクラスターの名前に置き換えます。以下の例のように、SubmarinerConfig
の名前はsubmariner
である必要があります。この設定では、ワーカーノードの 1 つをベアメタルクラスターの Submariner ゲートウェイとしてラベル付けします。
デフォルトでは、Submariner は IP セキュリティー (IPsec) を使用して、ゲートウェイノード上のクラスター間でセキュアなトンネルを確立します。デフォルトの IPsec NATT ポートを使用するか、設定した別のポートを指定できます。IPsec NATT ポートを指定せずに、この手順を実行すると、接続に 4500/UDP が使用されます。
- Submariner によって設定されたゲートウェイノードを特定し、ファイアウォール設定を有効にして、外部トラフィック用の IPsec NATT (UDP/4500) および NatDiscovery (UDP/4490) ポートを許可します。
カスタマイズオプションについては、Submariner デプロイメントのカスタマイズ を参照してください。
1.1.5.2. コンソールを使用した Submariner 用の Microsoft Azure Red Hat OpenShift の準備 (テクノロジープレビュー)
Microsoft Azure Red Hat OpenShift サービスは、さまざまなツールとリソースを組み合わせて、コンテナーベースのアプリケーションを構築するプロセスを簡素化します。コンソールを使用して Submariner をデプロイするために Azure Red Hat OpenShift クラスターを準備するには、次の手順を実行します。
- Python wheel と CLI 拡張機能 をダウンロードします。
Azure CLI から、次のコマンドを実行して拡張機能をインストールします。
az extension add --upgrade -s <path-to-extension>
.whl
拡張ファイルをダウンロードした場所へのパスにpath-to-extension
を置き換えます。次のコマンドを実行して、CLI 拡張機能が使用されていることを確認します。
az extension list
拡張機能が使用されている場合、出力は次の例のようになります。
"experimental": false, "extensionType": "whl", "name": "aro", "path": "<path-to-extension>", "preview": true, "version": "1.0.x"
Azure CLI から、次のコマンドを実行してプレビュー機能を登録します。
az feature registration create --namespace Microsoft.RedHatOpenShift --name AdminKubeconfig
次のコマンドを実行して、管理者
kubeconfig
を取得します。az aro get-admin-kubeconfig -g <resource group> -n <cluster resource name>
注記:
az aro
コマンドは、kubeconfig
をローカルディレクトリーに保存し、kubeconfig
という名前を使用します。これを使用するには、環境変数KUBECONFIG
をファイルのパスと一致するように設定します。以下の例を参照してください。export KUBECONFIG=<path-to-kubeconfig> oc get nodes
- Red Hat Advanced Cluster Management コンソールから Infrastructure > Clusters > Import cluster を選択して、Azure Red Hat OpenShift クラスターをクラスターリストにインポートします。
Kubeconfig
Import mode を選択し、Kubeconfig ウィンドウでkubeconfig
ファイルの内容を入力します。コンソールの指示に従ってインポートを完了します。Infrastructure > Clusters に移動して、Azure Red Hat OpenShift クラスターが正常にインポートされたことを確認できます。
- Infrastructure > Clusters > Cluster sets に移動し、追加するクラスターセットの名前を選択します。次に、Submariner add-ons タブをクリックします。
- Install Submariner add-ons ボタンをクリックし、Azure Red Hat OpenShift クラスターを Target clusters として設定します。コンソールの指示に従ってインストールを完了します。
-
Infrastructure > Clusters > Cluster sets > Submariner add-ons に移動して、Azure Red Hat OpenShift クラスターの 接続状態 が
Healthy
であることを確認します。
1.1.5.2.1. API を使用した Submariner 用の Microsoft Azure Red Hat OpenShift の準備 (テクノロジープレビュー)
API を使用して Submariner をデプロイするために Azure Red Hat OpenShift クラスターを準備するには、次の例のような YAML コンテンツをカスタマイズして適用します。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: loadBalancerEnable: true
managed-cluster-namespace
をマネージドクラスターの名前に置き換えます。
以下の例のように、SubmarinerConfig
の名前は submariner
である必要があります。
この設定では、ワーカーノードの 1 つを Azure Red Hat OpenShift クラスターの Submariner ゲートウェイとしてラベル付けします。
デフォルトでは、Submariner は IP セキュリティー (IPsec) を使用して、ゲートウェイノード上のクラスター間でセキュアなトンネルを確立します。デフォルトの IPsec NATT ポートを使用するか、設定した別のポートを指定できます。IPsec NATT ポートを指定せずに、この手順を実行すると、接続にポート 4500/UDP が使用されます。
カスタマイズオプションについては、Submariner デプロイメントのカスタマイズ を参照してください。
1.1.5.3. コンソールを使用して Red Hat OpenShift Service on AWS で Submariner を準備する (テクノロジープレビュー)
Red Hat OpenShift Service on AWS は、アプリケーションの開発と最新化のための安定した柔軟なプラットフォームを提供します。Submariner をデプロイするために OpenShift Service on AWS クラスターを準備するには、次の手順を実行します。
次のコマンドを実行して、Submariner ゲートウェイを実行する新しいノードを作成します。
rosa create machinepool --cluster=<cluster_name> --name=sm-gw-mp --replicas=<number of Submariner gateway > --labels='submariner.io/gateway=true'
次のコマンドを実行して、OpenShift Service on AWS にログインします。
rosa login oc login <rosa-cluster-url>:6443 --username cluster-admin --password <password>
次のコマンドを実行して、OpenShift Service on AWS クラスターの
kubeconfig
を作成します。oc config view --flatten=true > rosa_kube/kubeconfig
- Red Hat Advanced Cluster Management コンソールから Infrastructure > Clusters > Import cluster を選択して、OpenShift Service on AWS クラスターをクラスターリストにインポートします。
Kubeconfig
Import mode を選択し、Kubeconfig ウィンドウでkubeconfig
ファイルの内容を入力します。コンソールの指示に従ってインポートを完了します。Infrastructure > Clusters に移動して、OpenShift Service on AWS クラスターが正常にインポートされたことを確認できます。
- Infrastructure > Clusters > Cluster sets に移動し、追加するクラスターセットの名前を選択します。次に、Submariner add-ons タブをクリックします。
- Install Submariner add-ons ボタンをクリックし、OpenShift Service on AWS クラスターを ターゲットクラスター として設定します。コンソールの指示に従ってインストールを完了します。
-
Infrastructure > Clusters > Cluster sets > Submariner add-ons に移動して、OpenShift Service on AWS クラスターの 接続ステータス が
Healthy
であることを確認します。
1.1.5.3.1. API を使用して Red Hat OpenShift Service on AWS で Submariner を準備する (テクノロジープレビュー)
API を使用して Submariner をデプロイするために OpenShift Service on AWS クラスターを準備するには、次の手順を実行します。
次のコマンドを実行して、Submariner ゲートウェイを実行する新しいノードを作成します。
rosa create machinepool --cluster=<cluster_name> --name=sm-gw-mp --replicas=<number of Submariner gateway > --labels='submariner.io/gateway=true'
次の例のような YAML コンテンツをカスタマイズして適用します。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: loadBalancerEnable: true
managed-cluster-namespace
をマネージドクラスターの名前に置き換えます。以下の例のように、
SubmarinerConfig
の名前はsubmariner
である必要があります。デフォルトでは、Submariner は IP セキュリティー (IPsec) を使用して、ゲートウェイノード上のクラスター間でセキュアなトンネルを確立します。デフォルトの IPsec NATT ポートを使用するか、設定した別のポートを指定できます。IPsec NATT ポートを指定せずに、この手順を実行すると、接続にポート 4500/UDP が使用されます。
カスタマイズオプションは、Submariner デプロイメントのカスタマイズ を参照してください。
1.1.5.4. ManagedClusterAddOn API を使用した Submariner のデプロイ
選択したホスティング環境を手動で準備した後、次の手順を完了することで、ManagedClusterAddOn
API を使用して Submariner をデプロイできます。
ManagedClusterSet の作成 ドキュメントに記載されている手順を使用して、ハブクラスターに
ManagedClusterSet
リソースを作成します。ManagedClusterSet
のエントリーが次の内容のようになっていることを確認してください。apiVersion: cluster.open-cluster-management.io/v1beta2 kind: ManagedClusterSet metadata: name: <managed-cluster-set-name>
managed-cluster-set-name
は、作成するManagedClusterSet
の名前に置き換えます。重要: Kubernetes namespace の最大文字数は 63 文字です。
<managed-cluster-set-name>
に使用できる最大文字数は 56 文字です。<managed-cluster-set-name>
の文字数が 56 文字を超える場合、<managed-cluster-set-name>
は先頭から切り捨てられます。ManagedClusterSet
が作成されたら、submariner-addon
は<managed-cluster-set-name>-broker
と呼ばれる namespace を作成し、その namespace に Submariner ブローカーをデプロイします。次の例のような YAML コンテンツをカスタマイズして適用することにより、
<managed-cluster-set-name>-broker
namespace のハブクラスターにBroker
設定を作成します。apiVersion: submariner.io/v1alpha1 kind: Broker metadata: name: submariner-broker namespace: <managed-cluster-set-name>-broker labels: cluster.open-cluster-management.io/backup: submariner spec: globalnetEnabled: <true-or-false>
managed-cluster-set-name
は、マネージドクラスターの名前に置き換えます。ManagedClusterSet
で Submariner Globalnet を有効にする場合は、globalnetEnabled
の値をtrue
に設定します。次のコマンドを実行して、1 つのマネージドクラスターを
ManagedClusterSet
に追加します。oc label managedclusters <managed-cluster-name> "cluster.open-cluster-management.io/clusterset=<managed-cluster-set-name>" --overwrite
managedcluster-name
は、ManagedClusterSet
に追加するマネージドクラスターの名前に置き換えます。ManagedClusterSet-name
は、マネージドクラスターを追加するManagedClusterSet
の名前に置き換えます。次の例のような YAML コンテンツをカスタマイズして適用します。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec:{}
managed-cluster-namespace
は、マネージドクラスターの namespace に置き換えます。注記: 以下の例のように、
SubmarinerConfig
の名前はsubmariner
である必要があります。次の例のような YAML コンテンツをカスタマイズして適用することにより、マネージドクラスターに Submariner をデプロイします。
apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: submariner namespace: <managed-cluster-name> spec: installNamespace: submariner-operator
managedcluster-name
は、Submariner で使用するマネージドクラスターの名前に置き換えます。ManagedClusterAddOn
の仕様のinstallNamespace
フィールドは、Submariner をインストールするマネージドクラスター上の namespace に置き換えます。現在、Submariner-operator
namespace に Submariner をインストールする必要があります。ManagedClusterAddOn
の作成後に、submariner-addon
は Submariner をマネージドクラスターのsubmariner-operator
namespace にデプロイします。このManagedClusterAddOn
のステータスから Submariner のデプロイメントステータスを表示できます。注記:
ManagedClusterAddOn
の名前はsubmariner
である必要があります。- Submariner を有効にするすべてのマネージドクラスターに対して、手順 3、4、および 5 を繰り返します。
マネージドクラスターに Submariner をデプロイしたら、次のコマンドを入力して、Submariner
ManagedClusterAddOn
のステータスを確認して、Submariner のデプロイメントステータスを確認できます。oc -n <managed-cluster-name> get managedclusteraddons submariner -oyaml
cluster-name
は、マネージドクラスターの名前に置き換えます。Submariner
ManagedClusterAddOn
のステータスの 3 つの条件により、Submariner のデプロイメントステータスが分かります。-
SubmarinerGatewayNodesLabeled
の条件は、マネージドクラスターに Submariner ゲートウェイノードにラベル付けされているかどうかを示します。 -
SubmarinerAgentDegraded
の条件は、Submariner がマネージドクラスターに正常にデプロイされるかどうかを示します。 -
SubmarinerConnectionDegraded
の条件は、Submariner でマネージドクラスターで確立される接続の数を示します。
-
1.1.6. Submariner デプロイメントのカスタマイズ
NATT (Network Address Translation-Traversal) ポート、ゲートウェイノードの数、ゲートウェイノードのインスタンスタイプなど、Submariner デプロイメントの設定の一部をカスタマイズできます。これらのカスタマイズは、すべてのプロバイダーで一貫しています。
1.1.6.1. NATT ポート
NATT ポートをカスタマイズする場合は、プロバイダー環境に合わせて次の YAML コンテンツをカスタマイズして適用します。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-<provider>-creds IPSecNATTPort: <NATTPort>
-
managed-cluster-namespace
は、マネージドクラスターの namespace に置き換えます。 managed-cluster-name
は、マネージドクラスターの名前に置き換えます。-
AWS:
provider
をaws
に置き換えます。<managed-cluster-name>-aws-creds
の値は、AWS の認証情報シークレット名で、この情報はハブクラスターのクラスター namespace にあります。 -
GCP:
provider
をgcp
に置き換えます。<managed-cluster-name>-gcp-creds
の値は、Google Cloud Platform 認証情報シークレット名を指し、ハブクラスターのクラスター namespace で見つけることができます。 -
OpenStack:
provider
をosp
に置き換えます。<managed-cluster-name>-osp-creds
の値は、ハブクラスターのクラスター namespace にある Red Hat OpenStack Platform 認証情報シークレット名です。 -
Azure:
provider
をazure
に置き換えます。<managed-cluster-name>-azure-creds
の値は、ハブクラスターのクラスター namespace で見つけることができる Microsoft Azure 認証情報シークレット名です。
-
AWS:
-
managed-cluster-namespace
は、マネージドクラスターの namespace に置き換えます。 -
managed-cluster-name
は、マネージドクラスターの名前に置き換えます。managed-cluster-name-gcp-creds
の値は、Google Cloud Platform 認証情報シークレット名を指し、ハブクラスターのクラスター namespace で見つけることができます。 -
NATTPort
は、使用する NATT ポートに置き換えます。
注記: 以下の例のように、SubmarinerConfig
の名前は submariner
である必要があります。
1.1.6.2. ゲートウェイノードの数
ゲートウェイノードの数をカスタマイズする場合は、次の例のような YAML コンテンツをカスタマイズして適用します。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-<provider>-creds gatewayConfig: gateways: <gateways>
-
managed-cluster-namespace
は、マネージドクラスターの namespace に置き換えます。 managed-cluster-name
は、マネージドクラスターの名前に置き換えます。-
AWS:
provider
をaws
に置き換えます。<managed-cluster-name>-aws-creds
の値は、AWS の認証情報シークレット名で、この情報はハブクラスターのクラスター namespace にあります。 -
GCP:
provider
をgcp
に置き換えます。<managed-cluster-name>-gcp-creds
の値は、Google Cloud Platform 認証情報シークレット名を指し、ハブクラスターのクラスター namespace で見つけることができます。 -
OpenStack:
provider
をosp
に置き換えます。<managed-cluster-name>-osp-creds
の値は、ハブクラスターのクラスター namespace にある Red Hat OpenStack Platform 認証情報シークレット名です。 -
Azure:
provider
をazure
に置き換えます。<managed-cluster-name>-azure-creds
の値は、ハブクラスターのクラスター namespace で見つけることができる Microsoft Azure 認証情報シークレット名です。
-
AWS:
-
gateways
は、使用するゲートウェイ数に置き換えます。値が 1 より大きい場合には、Submariner ゲートウェイは高可用性を自動的に有効にします。
注記: 以下の例のように、SubmarinerConfig
の名前は submariner
である必要があります。
1.1.6.3. ゲートウェイノードのインスタンスタイプ
ゲートウェイノードのインスタンスタイプをカスタマイズする場合は、次の例のような YAML コンテンツをカスタマイズして適用します。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: credentialsSecret: name: <managed-cluster-name>-<provider>-creds gatewayConfig: instanceType: <instance-type>
-
managed-cluster-namespace
は、マネージドクラスターの namespace に置き換えます。 managed-cluster-name
は、マネージドクラスターの名前に置き換えます。-
AWS:
provider
をaws
に置き換えます。<managed-cluster-name>-aws-creds
の値は、AWS の認証情報シークレット名で、この情報はハブクラスターのクラスター namespace にあります。 -
GCP:
provider
をgcp
に置き換えます。<managed-cluster-name>-gcp-creds
の値は、Google Cloud Platform 認証情報シークレット名を指し、ハブクラスターのクラスター namespace で見つけることができます。 -
OpenStack:
provider
をosp
に置き換えます。<managed-cluster-name>-osp-creds
の値は、ハブクラスターのクラスター namespace にある Red Hat OpenStack Platform 認証情報シークレット名です。 -
Azure:
provider
をazure
に置き換えます。<managed-cluster-name>-azure-creds
の値は、ハブクラスターのクラスター namespace で見つけることができる Microsoft Azure 認証情報シークレット名です。
-
AWS:
-
instance-type
は、使用する AWS インスタンスタイプに置き換えます。
注記: 以下の例のように、SubmarinerConfig
の名前は submariner
である必要があります。
1.1.6.4. ケーブルドライバー
Submariner Gateway Engine コンポーネントは、他のクラスターへの安全なトンネルを作成します。ケーブルドライバーコンポーネントは、ゲートウェイエンジンコンポーネントのプラグ可能なアーキテクチャーを使用してトンネルを維持します。ケーブルエンジンコンポーネントの cableDriver
設定には、Libreswan または VXLAN 実装を使用できます。以下の例を参照してください。
apiVersion: submarineraddon.open-cluster-management.io/v1alpha1 kind: SubmarinerConfig metadata: name: submariner namespace: <managed-cluster-namespace> spec: cableDriver: vxlan credentialsSecret: name: <managed-cluster-name>-<provider>-creds
ベストプラクティス: パブリックネットワークでは VXLAN ケーブルドライバーを使用しないでください。VXLAN ケーブルドライバーは暗号化されていません。プライベートネットワークでの不要な二重暗号化を避けるために、VXLAN のみを使用してください。たとえば、一部のオンプレミス環境では、専用の回線レベルのハードウェアデバイスを使用してトンネルの暗号化を処理する場合があります。
1.1.7. Submariner のサービス検出の管理
Submariner がマネージドクラスターと同じ環境にデプロイされた後、マネージドクラスターセット内のクラスター全体で Pod とサービス間の安全な IP ルーティングのためにルートが設定されます。
1.1.7.1. Submariner のサービス検出の有効化
クラスターからのサービスをマネージドクラスターセット内の他のクラスターに表示および検出可能にするには、ServiceExport
オブジェクトを作成する必要があります。ServiceExport
オブジェクトでサービスをエクスポートすると、<service>.<namespace>.svc.clusterset.local
形式でサービスにアクセスできます。複数のクラスターが同じ名前で、同じ namespace からサービスをエクスポートすると、他のクラスターは、その複数のクラスターを 1 つの論理サービスとして認識します。
この例では、default
の namespace で nginx
サービスを使用しますが、Kubernetes の ClusterIP
サービスまたはヘッドレスサービスを検出できます。
以下のコマンドを入力して、
ManagedClusterSet
のマネージドクラスターにnginx
サービスのインスタンスを適用します。oc -n default create deployment nginx --image=nginxinc/nginx-unprivileged:stable-alpine oc -n default expose deployment nginx --port=8080
次のコマンドのような
subctl
ツールを使用してコマンドを入力し、ServiceExport
エントリーを作成して、サービスをエクスポートします。subctl export service --namespace <service-namespace> <service-name>
service-namespace
を、サービスが置かれた namespace の名前に置き換えます。この例では、default
になります。service-name
を、エクスポートするサービスの名前に置き換えます。この例では、nginx
になります。その他の使用可能なフラグの詳細は、Submariner ドキュメントの
export
を参照してください。別のマネージドクラスターから以下のコマンドを実行して、
nginx
サービスにアクセスできることを確認します。oc -n default run --generator=run-pod/v1 tmp-shell --rm -i --tty --image quay.io/submariner/nettest -- /bin/bash curl nginx.default.svc.clusterset.local:8080
これで、nginx
サービス検出が Submariner に対して設定されました。
1.1.7.2. Submariner のサービス検出の無効化
サービスが他のクラスターにエクスポートされないようにするには、nginx
の次の例のようなコマンドを入力します。
subctl unexport service --namespace <service-namespace> <service-name>
service-namespace
を、サービスが置かれた namespace の名前に置き換えます。
service-name
を、エクスポートするサービスの名前に置き換えます。
その他の使用可能なフラグの詳細は、Submariner ドキュメントの unexport
を参照してください。
このサービスは、クラスターによる検出に使用できなくなりました。
1.1.8. Submariner のアンインストール
Red Hat Advanced Cluster Management for Kubernetes コンソールまたはコマンドラインを使用して、クラスターから Submariner コンポーネントをアンインストールできます。0.12 より前の Submariner バージョンで、すべてのデータプレーンコンポーネントを完全に削除するには、追加の手順が必要です。Submariner のアンインストールはべき等であるため、問題なく手順を繰り返すことができます。
1.1.8.1. コンソールを使用した Submariner のアンインストール
コンソールを使用してクラスターから Submariner をアンインストールするには、次の手順を実行します。
- コンソールナビゲーションから、Infrastructure > Clusters を選択し、Cluster sets タブを選択します。
- Submariner コンポーネントを削除するクラスターを含むクラスターセットを選択します。
- Submariner Add-ons タブを選択して、Submariner がデプロイされているクラスターセット内のクラスターを表示します。
- Submariner をアンインストールするクラスターの Actions メニューで、Uninstall Add-on を選択します。
- Submariner をアンインストールするクラスターの アクション メニューで、クラスターセットの削除 を選択します。
Submariner を削除する他のクラスターについても、これらの手順を繰り返します。
ヒント: 複数のクラスターを選択して Actions をクリックすると、同じクラスターセット内の複数のクラスターから Submariner アドオンを削除できます。Uninstall Submariner add-ons を選択します。
削除する Submariner のバージョンがバージョン 0.12 より前の場合は、Submariner を手動でアンインストールする に進みます。Submariner のバージョンが 0.12 以降の場合、Submariner は削除されます。
重要: クラウドプロバイダーによる追加料金を回避するために、すべてのクラウドリソースがクラウドプロバイダーから削除されていることを確認してください。詳細は、Submariner リソースの削除の確認 を参照してください。
1.1.8.2. CLI を使用した Submariner のアンインストール
コマンドラインを使用して Submariner をアンインストールするには、次の手順を実行します。
次のコマンドを実行して、クラスターの Submariner デプロイメントを削除します。
oc -n <managed-cluster-namespace> delete managedclusteraddon submariner
managed-cluster-namespace
は、マネージドクラスターの namespace に置き換えます。次のコマンドを実行して、クラスターのクラウドリソースを削除します。
oc -n <managed-cluster-namespace> delete submarinerconfig submariner
managed-cluster-namespace
は、マネージドクラスターの namespace に置き換えます。次のコマンドを実行して、クラスターセットを削除し、ブローカーの詳細を削除します。
oc delete managedclusterset <managedclusterset>
managedclusterset
をマネージドクラスターセットの名前に置き換えます。
削除する Submariner のバージョンがバージョン 0.12 より前の場合は、Submariner を手動でアンインストールする に進みます。Submariner のバージョンが 0.12 以降の場合、Submariner は削除されます。
重要: クラウドプロバイダーによる追加料金を回避するために、すべてのクラウドリソースがクラウドプロバイダーから削除されていることを確認してください。詳細は、Submariner リソースの削除の確認 を参照してください。
1.1.8.3. Submariner の手動アンインストール
バージョン 0.12 より前のバージョンの Submariner をアンインストールする場合は、Submariner ドキュメントの 手動アンインストール セクションの手順 5 ~ 8 を実行してください。
これらの手順を完了すると、Submariner コンポーネントがクラスターから削除されます。
重要: クラウドプロバイダーによる追加料金を回避するために、すべてのクラウドリソースがクラウドプロバイダーから削除されていることを確認してください。詳細は、Submariner リソースの削除の確認 を参照してください。
1.1.8.4. Submariner リソースの削除の確認
Submariner をアンインストールした後、すべての Submariner リソースがクラスターから削除されていることを確認します。それらがクラスターに残っている場合、一部のリソースはインフラストラクチャープロバイダーからの料金を引き続き発生させます。次の手順を実行して、クラスターに追加の Submariner リソースがないことを確認します。
次のコマンドを実行して、クラスターに残っている Submariner リソースをリスト表示します。
oc get cluster <CLUSTER_NAME> grep submariner
CLUSTER_NAME
をクラスターの名前に置き換えます。次のコマンドを入力して、リストのリソースをすべて削除します。
oc delete resource <RESOURCE_NAME> cluster <CLUSTER_NAME>
RESOURCE_NAME
を、削除する Submariner リソースの名前に置き換えます。- 検索でリソースが特定されなくなるまで、クラスターごとに手順 1 ~ 2 を繰り返します。
Submariner リソースがクラスターから削除されます。
1.2. VolSync の永続ボリューム複製サービス
VolSync は、レプリケーションの互換性がないストレージタイプが指定されたクラスター全体、または 1 つのクラスター内の永続ボリュームの非同期レプリケーションを有効にする Kubernetes Operator です。これは Container Storage Interface (CSI) を使用して互換性の制限を解消します。VolSync Operator を環境にデプロイした後、それを活用して永続データのコピーを作成および保守できます。VolSync は、バージョン 4.8 以降の Red Hat OpenShift Container Platform クラスターでのみ永続的なボリュームクレームを複製できます。
重要: VolSync は、Filesystem
の volumeMode
を使用した永続ボリューム要求の複製のみをサポートします。volumeMode
を選択しない場合、デフォルトで Filesystem
になります。
1.2.1. VolSync を使用した永続ボリュームの複製
サポート対象の方法 3 つを使用して、VolSync で永続ボリュームを複製できます。Rsync、restic または Rclone など所有する同期ロケーションの数により異なります。
1.2.1.1. 前提条件
クラスターに VolSync をインストールする前に、以下の要件が必要です。
- Red Hat Advanced Cluster Management バージョン 2.4 以降のハブクラスターで実行中で、設定済みの OpenShift Container Platform 環境。
- 同じ Red Hat Advanced Cluster Management ハブクラスターが管理する 2 つ以上のクラスター。
-
VolSync で設定しているクラスター間のネットワーク接続。クラスターが同じネットワーク上にない場合は、Submariner マルチクラスターネットワークとサービスディスカバリー を設定し、
ServiceType
のClusterIP
値を使用してクラスターをネットワーク化するか、ServiceType
にLoadBalancer
の値を指定してロードバランサーを使用できます。 - ソース永続ボリュームに使用するストレージドライバーは、CSI 互換であり、スナップショットをサポートできる必要があります。
1.2.1.2. マネージドクラスターへの VolSync のインストール
VolSync が 1 つのクラスターの永続ボリューム要求を別のクラスターの Persistent Volume Claims に複製できるようにするには、ソースとターゲットの両方のマネージドクラスターに VolSync をインストールする必要があります。
VolSync は独自の namespace を作成しないため、他の OpenShift Container Platform のすべての namespace Operator と同じ namespace にあります。VolSync の Operator 設定に加えた変更は、チャネル更新の手動承認に変更した場合など、同じ namespace 内の他の Operator にも影響します。
2 つの方法のいずれかを使用して、環境内の 2 つのクラスターに VolSync をインストールできます。次のセクションで説明するように、ハブクラスター内の各マネージドクラスターにラベルを追加するか、ManagedClusterAddOn
を手動で作成して適用することができます。
1.2.1.2.1. ラベルを使用した VolSync のインストール
ラベルを追加して、マネージドクラスターに VolSync をインストールします。
Red Hat Advanced Cluster Management コンソールから以下のステップを実行します。
-
詳細を表示するには、ハブクラスターコンソールの
Clusters
ページからマネージドクラスターの 1 つを選択します。 Labels フィールドに、次のラベルを追加します。
addons.open-cluster-management.io/volsync=true
VolSync サービス Pod はマネージドクラスターにインストールされます。
- 他のマネージドクラスターに同じラベルを追加します。
各マネージドクラスターで次のコマンドを実行して、VolSync Operator がインストールされていることを確認します。
oc get csv -n openshift-operators
インストール時に VolSync の Operator がリストされています。
-
詳細を表示するには、ハブクラスターコンソールの
コマンドラインインターフェイスから次の手順を実行します。
- ハブクラスターでコマンドラインセッションを開始します。
次のコマンドを入力して、最初のクラスターにラベルを追加します。
oc label managedcluster <managed-cluster-1> "addons.open-cluster-management.io/volsync"="true"
managed-cluster-1
をマネージドクラスターの 1 つの名前に置き換えます。次のコマンドを入力して、ラベルを 2 番目のクラスターに追加します。
oc label managedcluster <managed-cluster-2> "addons.open-cluster-management.io/volsync"="true"
managed-cluster-2
を他のマネージドクラスターの名前に置き換えます。ManagedClusterAddOn
リソースは、対応する各マネージドクラスターの namespace 内のハブクラスターに自動的に作成される必要があります。
1.2.1.2.2. ManagedClusterAddOn を使用した VolSync のインストール
ManagedClusterAddOn
を手動で追加して VolSync をマネージドクラスターにインストールするには、次の手順を実行します。
ハブクラスターで、次の例のようなコンテンツを含む
volsync-mcao.yaml
という YAML ファイルを作成します。apiVersion: addon.open-cluster-management.io/v1alpha1 kind: ManagedClusterAddOn metadata: name: volsync namespace: <managed-cluster-1-namespace> spec: {}
managed-cluster-1-namespace
を、マネージドクラスターの 1 つの namespace に置き換えます。この namespace は、マネージドクラスターの名前と同じです。注: 名前は
volsync
である必要があります。次の例のようなコマンドを入力して、ファイルを設定に適用します。
oc apply -f volsync-mcao.yaml
他のマネージドクラスターに対して手順を繰り返します。
ManagedClusterAddOn
リソースは、対応する各マネージドクラスターの namespace 内のハブクラスターに自動的に作成される必要があります。
1.2.1.3. Rsync レプリケーションの設定
Rsync レプリケーションを使用して、永続ボリュームの 1:1 非同期レプリケーションを作成できます。Rsync ベースのレプリケーションを災害復旧やリモートサイトへのデータ送信に使用できます。
次の例は、Rsync メソッドを使用して設定する方法を示しています。Rsync の追加情報については、VolSync ドキュメントの Usage を参照してください。
1.2.1.3.1. マネージドクラスター間での Rsync レプリケーションの設定
Rsync ベースのレプリケーションの場合は、ソースクラスターおよび宛先クラスターでカスタムリソースを設定します。カスタムリソースは、address
値を使用してソースを宛先に接続し、sshKeys
を使用して転送されたデータがセキュアであることを確認します。
注記: address
および sshKeys
の値を宛先からソースにコピーし、ソースを設定する前に宛先を設定する必要があります。
この例では、source-ns
namespace の source
クラスターの永続ボリューム要求から destination-ns
namespace の destination
クラスターの永続ボリューム要求に Rsync レプリケーションを設定する手順を説明します。必要に応じて、これらの値を他の値に置き換えることができます。
宛先クラスターを設定します。
宛先クラスターで次のコマンドを実行して、ネームスペースを作成します。
oc create ns <destination-ns>
destination-ns
を、オンサイトのボリューム要求ごとに宛先が含まれる namespace の名前に置き換えます。以下の YAML コンテンツをコピーし、
replication_destination.yaml
という名前の新規ファイルを作成します。apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: <destination> namespace: <destination-ns> spec: rsync: serviceType: LoadBalancer copyMethod: Snapshot capacity: 2Gi accessModes: [ReadWriteOnce] storageClassName: gp2-csi volumeSnapshotClassName: csi-aws-vsc
注記:
capacity
の値は、レプリケートされる永続ボリューム要求 (PVC) の容量と一致する必要があります。destination
は、宛先 CR の名前に置き換えます。destination-ns
は、宛先の namespace の名前に置き換えます。この例では、
LoadBalancer
のServiceType
値が使用されます。ロードバランサーサービスはソースクラスターによって作成され、ソースマネージドクラスターが別の宛先マネージドクラスターに情報を転送できるようにします。ソースと宛先が同じクラスター上にある場合、または Submariner ネットワークサービスが設定されている場合は、サービスタイプとしてClusterIP
を使用できます。ソースクラスターを設定するときに参照するシークレットのアドレスと名前をメモします。storageClassName
およびvolumeSnapshotClassName
は任意のパラメーターです。特に、環境のデフォルト値とは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、環境の値を指定してください。宛先クラスターで以下のコマンドを実行し、
replicationdestination
リソースを作成します。oc create -n <destination-ns> -f replication_destination.yaml
destination-ns
は、宛先の namespace の名前に置き換えます。replicationdestination
リソースが作成されると、以下のパラメーターおよび値がリソースに追加されます。パラメーター 値 .status.rsync.address
送信元クラスターと宛先クラスターが通信できるようにするために使用される宛先クラスターの IP アドレス。
.status.rsync.sshKeys
ソースクラスターから宛先クラスターへの安全なデータ転送を可能にする SSH キーファイルの名前。
以下のコマンドを実行して、ソースクラスターで使用する
.status.rsync.address
の値をコピーします。ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.address}}` echo $ADDRESS
destination
は、レプリケーション先のカスタムリソースの名前に置き換えます。destination-ns
は、宛先の namespace の名前に置き換えます。出力は、Amazon Web Services 環境の次の出力のように表示されます。
a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
以下のコマンドを実行して、シークレットの名前および
.status.rsync.sshKeys
の値として提供されるシークレットの内容をコピーします。SSHKEYS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.sshKeys}}` echo $SSHKEYS
destination
は、レプリケーション先のカスタムリソースの名前に置き換えます。destination-ns
は、宛先の namespace の名前に置き換えます。ソースの設定時に、ソースクラスターで入力する必要があります。出力は、SSH キーシークレットファイルの名前である必要があります。これは、次の名前のようになります。
volsync-rsync-dst-src-destination-name
複製するソース永続ボリュームクレームを特定します。
注記: ソース永続ボリューム要求は CSI ストレージクラスにある必要があります。
ReplicationSource
アイテムを作成します。以下の YAML コンテンツをコピーして、ソースクラスターに
replication_source.yaml
という名前の新規ファイルを作成します。apiVersion: volsync.backube/v1alpha1 kind: ReplicationSource metadata: name: <source> namespace: <source-ns> spec: sourcePVC: <persistent_volume_claim> trigger: schedule: "*/3 * * * *" #/* rsync: sshKeys: <mysshkeys> address: <my.host.com> copyMethod: Snapshot storageClassName: gp2-csi volumeSnapshotClassName: gp2-csi
source
は、レプリケーションソースカスタムリソースの名前に置き換えます。これを自動的に置き換える方法については、この手順のステップ 3-vi を参照してください。source-ns
をソースが置かれている Persistent Volume Claim の namespace に置き換えます。これを自動的に置き換える方法については、この手順のステップ 3-vi を参照してください。persistent_volume_claim
は、ソース永続ボリューム要求の名前に置き換えます。mysshkeys
は、設定時にReplicationDestination
の.status.rsync.sshKeys
フィールドからコピーしたキーに置き換えます。my.host.com
は、設定時にReplicationDestination
の.status.rsync.address
フィールドからコピーしたホストアドレスに置き換えます。ストレージドライバーがクローン作成をサポートする場合は、
copyMethod
の値にClone
を使用すると、レプリケーションのより効率的なプロセスになる可能性があります。storageClassName
およびvolumeSnapshotClassName
はオプションのパラメーターです。ご使用の環境のデフォルトとは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、それらの値を指定してください。永続ボリュームの同期方法を設定できるようになりました。
宛先クラスターに対して次のコマンドを入力して、宛先クラスターから SSH シークレットをコピーします。
oc get secret -n <destination-ns> $SSHKEYS -o yaml > /tmp/secret.yaml
destination-ns
を、宛先が置かれている永続ボリューム要求の namespace に置き換えます。以下のコマンドを入力して、
vi
エディターでシークレットファイルを開きます。vi /tmp/secret.yaml
宛先クラスターのオープンシークレットファイルで、次の変更を行います。
-
namespace をソースクラスターの namespace に変更します。この例では、
source-ns
です。 -
所有者の参照を削除します (
.metadata.ownerReferences
)。
-
namespace をソースクラスターの namespace に変更します。この例では、
ソースクラスターで、ソースクラスターで次のコマンドを入力してシークレットファイルを作成します。
oc create -f /tmp/secret.yaml
ソースクラスターで、以下のコマンドを入力して
ReplicationSource
オブジェクトのaddress
およびsshKeys
の値を、宛先クラスターから書き留めた値に置き換えてreplication_source.yaml
ファイルを変更します。sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml sed -i "s/<mysshkeys>/$SSHKEYS/g" replication_source.yaml oc create -n <source> -f replication_source.yaml
my.host.com
は、設定時にReplicationDestination
の.status.rsync.address
フィールドからコピーしたホストアドレスに置き換えます。mysshkeys
は、設定時にReplicationDestination
の.status.rsync.sshKeys
フィールドからコピーしたキーに置き換えます。source
を、ソース が置かれている永続ボリューム要求の名前に置き換えます。注記: 複製する永続ボリューム要求と同じ namespace にファイルを作成する必要があります。
ReplicationSource
オブジェクトで以下のコマンドを実行して、レプリケーションが完了したことを確認します。oc describe ReplicationSource -n <source-ns> <source>
source-ns
をソースが置かれている Persistent Volume Claim の namespace に置き換えます。source
は、レプリケーションソースのカスタムリソースの名前に置き換えます。レプリケーションが成功した場合、出力は次の例のようになります。
Status: Conditions: Last Transition Time: 2021-10-14T20:48:00Z Message: Synchronization in-progress Reason: SyncInProgress Status: True Type: Synchronizing Last Transition Time: 2021-10-14T20:41:41Z Message: Reconcile complete Reason: ReconcileComplete Status: True Type: Reconciled Last Sync Duration: 5m20.764642395s Last Sync Time: 2021-10-14T20:47:01Z Next Sync Time: 2021-10-14T20:48:00Z
Last Sync Time
に時間がリストされていない場合は、レプリケーションが完了していません。
元の永続ボリュームのレプリカがあります。
1.2.1.4. restic バックアップの設定
Restic ベースのバックアップは、永続ボリュームの Restic ベースのバックアップコピーを、restic-config.yaml
シークレットファイルで指定された場所にコピーします。Restic バックアップは、クラスター間でデータを同期しませんが、データをバックアップします。
次の手順を実行して、restic ベースのバックアップを設定します。
次の YAML コンテンツのようなシークレットを作成して、バックアップイメージが保存されるリポジトリーを指定します。
apiVersion: v1 kind: Secret metadata: name: restic-config type: Opaque stringData: RESTIC_REPOSITORY: <my-restic-repository> RESTIC_PASSWORD: <my-restic-password> AWS_ACCESS_KEY_ID: access AWS_SECRET_ACCESS_KEY: password
my-restic-repository
は、バックアップファイルを保存する S3 バケットリポジトリーの場所に置き換えます。my-restic-password
は、リポジトリーへのアクセスに必要な暗号化キーに置き換えます。必要に応じて、
アクセス
とパスワード
は、プロバイダーのクレデンシャルに置き換えます。詳細は 新しいリポジトリーの準備 を参照してください。新しいリポジトリーを準備する必要がある場合の手順は、新しいリポジトリーの準備 を参照してください。この手順を使用する場合は、
restic init
コマンドを実行してリポジトリーを初期化する必要がある手順をスキップしてください。VolSync は、最初のバックアップ中にリポジトリーを自動的に初期化します。重要: 複数の永続ボリューム要求を同じ S3 バケットにバックアップする場合には、バケットへのパスは永続ボリュームクレームごとに一意である必要があります。各永続ボリュームクレームは個別の
ReplicationSource
でバックアップされるので、個別の restic-config シークレットが必要です。同じ S3 バケットを共有することで、各
ReplicationSource
は S3 バケット全体への書き込みアクセスが割り当てられます。次の YAML コンテンツに似た
ReplicationSource
オブジェクトを作成して、バックアップポリシーを設定します。apiVersion: volsync.backube/v1alpha1 kind: ReplicationSource metadata: name: mydata-backup spec: sourcePVC: <source> trigger: schedule: "*/30 * * * *" #\* restic: pruneIntervalDays: 14 repository: <restic-config> retain: hourly: 6 daily: 5 weekly: 4 monthly: 2 yearly: 1 copyMethod: Clone # The StorageClass to use when creating the PiT copy (same as source PVC if omitted) #storageClassName: my-sc-name # The VSC to use if the copy method is Snapshot (default if omitted) #volumeSnapshotClassName: my-vsc-name
source
は、バックアップしている永続ボリュームクレームに置き換えます。schedule
の値は、バックアップを実行する頻度に置き換えます。この例では、30 分ごとにスケジュールが指定されています。詳しくは Synchronization のスケジュール を参照してください。PruneIntervalDays
の値は、インスタンスで次にデータの圧縮するまでの経過時間 (日数) に置き換えて、スペースを節約します。プルーニング操作は、実行中に大量の I/O トラフィックを生成する可能性があります。restic-config
は、ステップ 1 で作成したシークレットの名前に置き換えます。retain
の値は、バックアップしたイメージの保持ポリシーに設定します。ベストプラクティス:
CopyMethod
の値にClone
を使用して、特定の時点のイメージが確実に保存されるようにします。バックアップオプションの詳細は、VolSync ドキュメントの Backup options を参照してください。
注記: デフォルトでは、restic ムーバーは root 権限なしで実行されます。restic ムーバーを root として実行する場合は、次のコマンドを実行して、昇格された権限のアノテーションを namespace に追加します。
oc annotate namespace <namespace> volsync.backube/privileged-movers=true
<namespace>
を namespace の名前に置き換えます。
1.2.1.4.1. restic バックアップの復元
コピーされたデータを restic バックアップから新しい永続ボリューム要求に復元できます。ベストプラクティス: バックアップ 1 つだけを新しい永続ボリューム要求に復元します。Restic バックアップを復元するには、次の手順を実行します。
次の例のように、新しいデータを含む新しい永続ボリュームクレームを作成します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc-name> spec: accessModes: - ReadWriteOnce resources: requests: storage: 3Gi
pvc-name
は、新しい永続ボリュームクレームの名前に置き換えます。次の例のような
ReplicationDestination
カスタムリソースを作成して、データの復元先を指定します。apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: <destination> spec: trigger: manual: restore-once restic: repository: <restic-repo> destinationPVC: <pvc-name> copyMethod: Direct
destination
は、宛先 CR の名前に置き換えます。restic-repo
は、ソースが保存されているリポジトリーへのパスに置き換えます。pvc-name
は、データを復元する新しい永続ボリュームクレームの名前に置き換えます。これには、新しいボリューム要求をプロビジョニングするのではなく、既存の永続ボリューム要求を使用してください。
復元プロセスは 1 回だけ完了する必要があります。この例では、最新のバックアップを復元します。復元オプションの詳細は、VolSync ドキュメントの Restore options を参照してください。
1.2.1.5. Rclone レプリケーションの設定
Rclone バックアップは、Rclone を使用して AWS S3 などの中間オブジェクトストレージの場所を介して単一の永続ボリュームを複数の場所にコピーします。複数の場所にデータを配布する場合に役立ちます。
次の手順を実行して、Rclone レプリケーションを設定します。
次の例のような
ReplicationSource
カスタムリソースを作成します。apiVersion: volsync.backube/v1alpha1 kind: ReplicationSource metadata: name: <source> namespace: <source-ns> spec: sourcePVC: <source-pvc> trigger: schedule: "*/6 * * * *" #\* rclone: rcloneConfigSection: <intermediate-s3-bucket> rcloneDestPath: <destination-bucket> rcloneConfig: <rclone-secret> copyMethod: Snapshot storageClassName: <my-sc-name> volumeSnapshotClassName: <my-vsc>
source-pvc
は、レプリケーションソースのカスタムリソースの名前に置き換えます。source-ns
をソースが置かれている Persistent Volume Claim の namespace に置き換えます。source
は、レプリケートしている永続ボリュームクレームに置き換えます。スケジュール
の値は、レプリケーションを実行する頻度に置き換えます。この例では、6 分ごとにスケジュールが指定されています。この値は引用符で囲む必要があります。詳しくは Synchronization のスケジュール を参照してください。Intermediate-s3-bucket
は、Rclone 設定ファイルの設定セクションへのパスに置き換えます。destination-bucket
は、レプリケートされたファイルをコピーするオブジェクトバケットへのパスに置き換えます。rclone-secret
は、Rclone 設定情報を含むシークレットの名前に置き換えます。copyMethod
の値はClone
、Direct
、またはSnapshot
として設定します。この値は、ある特定の時点でのコピーを生成するかどうか、生成する場合は、生成方法を指定します。my-sc-name
は、ポイントインタイムコピーに使用するストレージクラスの名前に置き換えます。指定しない場合、ソースボリュームのストレージクラスが使用されます。スナップショット
をcopyMethod
として指定した場合はmy-vsc
を使用するVolumeSnapshotClass
の名前に置き換えます。これは、他のタイプのcopyMethod
には必要ありません。次の例のような
ReplicationDestination
カスタムリソースを作成します。apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: database-destination namespace: dest spec: trigger: schedule: "3,9,15,21,27,33,39,45,51,57 * * * *" #/* rclone: rcloneConfigSection: <intermediate-s3-bucket> rcloneDestPath: <destination-bucket> rcloneConfig: <rclone-secret> copyMethod: Snapshot accessModes: [ReadWriteOnce] capacity: 10Gi storageClassName: <my-sc> volumeSnapshotClassName: <my-vsc>
スケジュール
の値は、レプリケーションを宛先に移動する頻度に置き換えます。移動元と宛先のスケジュールをオフセットして、データが宛先からプルされる前に複製を完了できるようにする必要があります。この例では、オフセットは 3 分で、6 分間隔でスケジュールされています。この値は引用符で囲む必要があります。詳しくは Synchronization のスケジュール を参照してください。Intermediate-s3-bucket
は、Rclone 設定ファイルの設定セクションへのパスに置き換えます。destination-bucket
は、レプリケートされたファイルをコピーするオブジェクトバケットへのパスに置き換えます。rclone-secret
は、Rclone 設定情報を含むシークレットの名前に置き換えます。copyMethod
の値はClone
、Direct
、またはSnapshot
として設定します。この値は、ある特定の時点でのコピーを生成するかどうか、生成する場合は、生成方法を指定します。accessModes
の値は、永続ボリュームクレームのアクセスモードを指定します。有効な値はReadWriteOnce
またはReadWriteMany
です。容量
は宛先ボリュームのサイズを指定します。このサイズは、着信データを格納するのに十分な大きさに指定します。my-sc
は、特定の時点のコピーの宛先として使用するストレージクラスの名前に置き換えます。指定しない場合、システムストレージクラスが使用されます。スナップショット
をcopyMethod
として指定した場合はmy-vsc
を使用するVolumeSnapshotClass
の名前に置き換えます。これは、他のタイプのcopyMethod
には必要ありません。含まれていない場合は、システムのデフォルトのVolumeSnapshotClass
が使用されます。
注記: デフォルトでは、rclone ムーバーは root 権限なしで実行されます。rclone ムーバーを root として実行する場合は、次のコマンドを実行して、昇格された権限のアノテーションを namespace に追加します。
oc annotate namespace <namespace> volsync.backube/privileged-movers=true
<namespace>
を namespace の名前に置き換えます。
1.2.2. 複製されたイメージを使用可能な永続的なボリュームクレームに変換
複製されたイメージを使用してデータを回復するか、永続的なボリュームクレームの新しいインスタンスを作成する必要がある場合があります。イメージのコピーは、使用する前に永続的なボリュームクレームに変換する必要があります。複製されたイメージを永続的なボリュームクレームに変換するには、次の手順を実行します。
レプリケーションが完了したら、以下のコマンドを入力して
ReplicationDestination
オブジェクトから最新のスナップショットを特定します。$ kubectl get replicationdestination <destination> -n <destination-ns> --template={{.status.latestImage.name}}
永続的なボリュームクレームを作成するときの最新のスナップショットの値に注意してください。
destination
は、レプリケーション先の名前に置き換えます。destination-ns
は、宛先の namespace に置き換えます。以下の例のような
pvc.yaml
ファイルを作成します。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> namespace: <destination-ns> spec: accessModes: - ReadWriteOnce dataSource: kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io name: <snapshot_to_replace> resources: requests: storage: 2Gi
pvc-name
は、新規の永続ボリューム要求 (PVC) の名前に置き換えます。destination-ns
を、永続ボリューム要求 (PVC) が置かれている namespace に置き換えます。snapshot_to_replace
を、直前の手順で確認したVolumeSnapshot
名に置き換えます。ベストプラクティス: 値が少なくとも最初のソース永続ボリュームクレームと同じサイズである場合は、
resources.requests.storage
を異なる値で更新できます。次のコマンドを入力して、永続ボリュームクレームが環境で実行されていることを確認します。
$ kubectl get pvc -n <destination-ns>
元のバックアップイメージは、メインの永続ボリューム要求として実行されています。
1.2.3. 同期のスケジューリング
レプリケーションの開始方法を決定するときは、常に実行する、スケジュールどおりに実行する、または手動で実行するという 3 つのオプションから選択します。レプリケーションのスケジュールは、よく選択されるオプションです。
スケジュール オプションは、スケジュール時にレプリケーションを実行します。スケジュールは cronspec
で定義されるため、スケジュールを時間間隔または特定の時間として設定できます。スケジュールの値の順序は次のとおりです。
"minute (0-59) hour (0-23) day-of-month (1-31) month (1-12) day-of-week (0-6)"
レプリケーションはスケジュールされた時間に開始されます。このレプリケーションオプションの設定は、以下の内容のようになります。
spec: trigger: schedule: "*/6 * * * *"
これらの方法のいずれかを有効にしたら、設定した方法に従って同期スケジュールが実行されます。
追加情報およびオプションについては、VolSync のドキュメントを参照してください。
1.3. クラスター管理のためにクラスターで klusterlet アドオンを有効にする
Red Hat Advanced Cluster Management for Kubernetes をインストールし、Operator 用のマルチクラスターエンジンを使用してクラスターを作成またはインポートした後、それらのマネージドクラスターに対して klusterlet アドオンを有効にできます。Red Hat Advanced Cluster Management コンソールを使用してクラスターを作成またはインポートしない限り、クラスターを作成またはインポートした場合に、klusterlet アドオンがデフォルトでは有効になりません。次の利用可能な klusterlet アドオンを参照してください。
- application-manager
- cert-policy-controller
- config-policy-controller
- iam-policy-controller
- governance-policy-framework
- search-collector
Red Hat Advanced Cluster Management のインストール後に、マネージドクラスターの klusterlet アドオンを有効にするには、以下のステップを実行します。
次の
KlusterletAddonConfig
に似た YAML ファイルを作成し、アドオンを表すspec
値を使用します。apiVersion: agent.open-cluster-management.io/v1 kind: KlusterletAddonConfig metadata: name: <cluster_name> namespace: <cluster_name> spec: applicationManager: enabled: true certPolicyController: enabled: true iamPolicyController: enabled: true policyController: enabled: true searchCollector: enabled: true
注:
policy-controller
アドオンは、governance-policy-framework
とconfig-policy-controller
の 2 つのアドオンに分かれています。その結果、policyController
はgovernance-policy-framework
とconfig-policy-controller
managedClusterAddons
を制御します。-
ファイルは
klusterlet-addon-config.yaml
として保存します。 ハブクラスターで次のコマンドを実行して、YAML を適用します。
oc apply -f klusterlet-addon-config.yaml
KlusterletAddonConfig
の作成後に、有効なmanagedClusterAddons
が作成されたかどうかを確認するには、次のコマンドを実行します。oc get managedclusteraddons -n <cluster namespace>
1.4. 既存のクラスターアドオンでクラスター全体のプロキシーを有効にする
クラスター namespace で KlusterletAddonConfig
を設定して、管理対象の Red Hat OpenShift Container Platform クラスターのすべての klusterlet アドオン Pod にプロキシー環境変数を追加できます。KlusterletAddonConfig
が 3 つの環境変数を klusterlet アドオンの Pod に追加するように設定するには、以下の手順を実行します。
プロキシーが必要なクラスターの namespace にある
KlusterletAddonConfig
ファイルを編集します。コンソールを使用してリソースを見つけるか、ターミナルから次のコマンドを使用して編集できます。oc -n <my-cluster-name> edit klusterletaddonconfig <my-cluster-name>
注記: 1 つのクラスターのみで作業している場合、コマンドの最後に
<my-cluster-name>
は必要ありません。以下のコマンドを使用します。oc -n <my-cluster-name> edit klusterletaddonconfig
ファイルの
.spec.proxyConfig
セクションを編集して、以下の例のようにします。spec.proxyConfig
は任意のセクションです。spec proxyConfig: httpProxy: "<proxy_not_secure>" httpsProxy: "<proxy_secure>" noProxy: "<no_proxy>"
proxy_not_secure
は、http
要求のプロキシーサーバーのアドレスに置き換えます。たとえば、http://192.168.123.145:3128
を使用します。proxy_secure
は、https
要求のプロキシーサーバーのアドレスに置き換えます。たとえば、https://192.168.123.145:3128
を使用します。no_proxy
は、トラフィックがプロキシー経由でルーティングされない IP アドレス、ホスト名、およびドメイン名のコンマ区切りのリストに置き換えます。たとえば、.cluster.local,.svc,10.128.0.0/14,example.com
を使用します。OpenShift Container Platform クラスターがハブクラスターでクラスターワイドプロキシーを設定して作成されている場合は、以下の条件が満たされると、クラスターワイドプロキシー設定値が環境変数として klusterlet アドオンの Pod に追加されます。
-
addon
セクションの.spec.policyController.proxyPolicy
が有効になり、OCPGlobalProxy
に設定されます。 .spec.applicationManager.proxyPolocy
が有効になり、CustomProxy
に設定されます。注記:
addon
セクションのproxyPolicy
のデフォルト値はDisabled
です。次の
proxyPolicy
エントリーの例を参照してください。apiVersion: agent.open-cluster-management.io/v1 kind: KlusterletAddonConfig metadata: name: clusterName namespace: clusterName spec: proxyConfig: httpProxy: http://pxuser:12345@10.0.81.15:3128 httpsProxy: http://pxuser:12345@10.0.81.15:3128 noProxy: .cluster.local,.svc,10.128.0.0/14, example.com applicationManager: enabled: true proxyPolicy: CustomProxy policyController: enabled: true proxyPolicy: OCPGlobalProxy searchCollector: enabled: true proxyPolicy: Disabled certPolicyController: enabled: true proxyPolicy: Disabled iamPolicyController: enabled: true proxyPolicy: Disabled
-
重要: グローバルプロキシー設定は、アラートの転送には影響しません。クラスター全体のプロキシーを使用して Red Hat Advanced Cluster Management ハブクラスターのアラート転送を設定する場合は、その詳細を アラートの転送 で参照してください。