GitOps
GitOps for Applications を使用して、アプリケーションをデプロイおよび管理します。
概要
第1章 GitOps の概要 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift Container Platform の GitOps および Argo CD は、Red Hat Advanced Cluster Management for Kubernetes と統合されています。以前のアプリケーションライフサイクルの チャネル および サブスクリプション モデルと比較して、高度な機能を備えています。
Argo CD 開発と GitOps の統合が活発であり、Argo CD の機能拡張や更新に貢献する大規模なコミュニティーも活発です。OpenShift Container Platform GitOps Operator を利用すると、Argo CD 開発の最新の進歩を利用でき、GitOps Operator サブスクリプションからサポートを受けることができます。
Red Hat Advanced Cluster Management for Kubernetes と OpenShift Container Platform GitOps および Argo CD の統合の詳細は、以下のトピックを参照してください。
- GitOps コンソール
- プルモデル用の任意の namespace に Argo CD ApplicationSet リソースをデプロイする (テクノロジープレビュー)
- 任意の namespace で ApplicationSet リソースを有効にする
- マネージドクラスターを Red Hat OpenShift GitOps Operator に登録する
- GitOps のアプリケーション配置許容範囲の設定
- プッシュアンドプルモデルを使用した Argo CD の導入
- GitOps Operator をインストールするためのポリシーの生成
- OpenShift Container Platform GitOps を使用したポリシー定義の管理 (Argo CD)
- Red Hat OpenShift GitOps アドオンの管理
- ArgoCD エージェントを伴う Red Hat OpenShift GitOps アドオンを有効にする
- ArgoCD エージェントなしで Red Hat OpenShift GitOps アドオンを有効にする
- OpenShift GitOps アドオンの適用をスキップする
- OpenShift GitOps アドオンのアンインストール
- {gitops-short) アドオン機能の検証
- ArgoCD エージェント機能の検証
- ApplicationSet リソースを使用した段階的なロールアウトストラテジーの実装 (テクノロジープレビュー)
1.1. GitOps コンソール リンクのコピーリンクがクリップボードにコピーされました!
統合された OpenShift Container Platform GitOps コンソールの機能を詳しく説明します。ApplicationSet や Argo CD タイプなどのアプリケーションを作成および表示します。ApplicationSet は、このコントローラーから生成される Argo アプリケーションを表します。
- Launch resource in Search をクリックし、関連リソースを検索します。
-
Search を使用して、各リソースのコンポーネント
kind別にアプリケーションリソースを検索します。
重要: 利用可能なアクションは割り当てられたロールに基づきます。ロールベースのアクセス制御 のドキュメントで、アクセス要件を確認してください。
前提条件
コンソールで Argo server ドロップダウンメニューにアクセスし、ApplicationSet リソースを作成する場合の前提条件と要件は以下のとおりです。
-
Argo CD
ApplicationSetリソースを作成します。Sync policy のステップで、Automatically sync when cluster state changes オプションをクリックします。 -
ApplicationSetを作成するには、GitOps クラスターリソースと GitOps Operator がインストールされている必要があります。
1.1.1. Argo CD アプリケーションのクエリー リンクのコピーリンクがクリップボードにコピーされました!
Argo CD アプリケーションを検索すると、Applications ページに移動します。Search ページから Argo CD アプリケーションにアクセスするには、以下の手順を実行します。
- Red Hat Advanced Cluster Management ハブクラスターにログインします。
- コンソールヘッダーから Search アイコンを選択します。
-
kind:applicationおよびapigroup:argoproj.ioの値でクエリーをフィルターします。 - 表示するアプリケーションを選択します。アプリケーション ページでは、アプリケーションに関する情報の概要が表示されます。
検索の詳細は、検索サービス を参照してください。
1.2. プルモデル用の任意の namespace に Argo CD ApplicationSet リソースをデプロイする (テクノロジープレビュー) リンクのコピーリンクがクリップボードにコピーされました!
Argo CD プルモデルを使用すると、ハブクラスターの任意の namespace に ApplicationSet リソースを作成できます。
Argo CD ApplicationSet リソースを完全に管理するには、次のセクションを完了します。
必要なアクセス権: クラスター管理者
前提条件
- マネージドクラスターを登録する手順を完了します。手順については、マネージドクラスターを Red Hat OpenShift GitOps Operator に登録する を参照してください。
-
任意のカスタム namespace で
ApplicationSetおよびApplicationリソースを有効にするための手順を完了します。手順については、任意の namespace で ApplicationSet リソースを有効にする を参照してください。
1.2.1. 標準設定の ApplicationSet リソースをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
ロールベースのアクセス制御 (RBAC) のサポートが制限されている場合は、標準設定の ApplicationSet リソースをデプロイすることを推奨します。
シンプルな RBAC 管理のために、標準設定の ApplicationSet リソースをデプロイすると、次の利点が得られます。
- namespace は GitHub リポジトリーリソースで指定されません。
-
ワークロード namespace の宛先は、
Applicationテンプレートで指定されます。 -
ApplicationSetリソースは、デフォルトのAppProjectリソースを使用します。
標準設定の ApplicationSet リソースをデプロイするには、次の手順を実行します。
-
openshift-gitopsnamespace で、Placementリソースを作成します。 次の YAML ファイルサンプルを追加し、デフォルトの
AppProjectリソースを使用して、appset-2namespace にApplicationSetリソースを作成します。apiVersion: v1 kind: Namespace metadata: annotations: name: appset-2次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f namespace-example.yaml次の YAML ファイルサンプルを追加し、デフォルトの
AppProjectリソースを使用して、appset-2namespace にApplicationSetリソースを作成します。apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: helloworld namespace: appset-2 spec: generators: - clusterDecisionResource: configMapRef: acm-placement labelSelector: matchLabels: cluster.open-cluster-management.io/placement: all-openshift-clusters requeueAfterSeconds: 30 template: metadata: annotations: apps.open-cluster-management.io/ocm-managed-cluster: '{{name}}' argocd.argoproj.io/skip-reconcile: "true" labels: apps.open-cluster-management.io/pull-to-ocm-managed-cluster: "true" name: '{{name}}-helloworld' spec: destination: namespace: helloworld server: https://kubernetes.default.svc project: default source: path: helloworld repoURL: https://github.com/stolostron/application-samples.git targetRevision: HEAD syncPolicy: automated: {}次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f applicationset-example.yaml-
ApplicationSetリソースは、ハブクラスターのappset-2namespace に作成されます。 -
Applicationリソースは、マネージドクラスターのappset-2namespace にデプロイされます。 -
Applicationリソースは、マネージドクラスター上のHelloworldnamespace にワークロードをデプロイします。 -
デフォルトの Argo CD
AppProjectリソース設定が適用されます。 -
GitHub リポジトリーの指定されたパスで定義されているすべての
Applicationリソースは、namespace 固有ではありません。
-
1.2.2. 高度な設定用に ApplicationSet リソースをデプロイする リンクのコピーリンクがクリップボードにコピーされました!
ロールベースのアクセス制御 (RBAC) をサポートしている場合は、高度な設定用に ApplicationSet リソースをデプロイするオプションがあります。
より高度な RBAC 管理を備えた高度な設定用に ApplicationSet リソースをデプロイすると、次のような利点が得られます。
-
GitHub リポジトリーリソースで指定された
Applicationリソースのワークロード namespace。 -
ApplicationSetリソースで指定されているワークロード namespace の宛先は、GitHub リポジトリーと一致します。 -
ApplicationSetリソースは、RBAC 制御にカスタム Argo CDAppProjectリソースを使用します。
高度な設定用に ApplicationSet リソースをデプロイするには、次の手順を実行します。
-
openshift-gitopsnamespace で、Placementリソースを作成します。 次の YAML ファイルサンプルを追加し、カスタム
bgdkAppProjectリソースを使用して、bgdknamespace にApplicationSetリソースを作成します。apiVersion: v1 kind: Namespace metadata: annotations: name: bgdk次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f namespace-example.yaml次の YAML ファイルサンプルを追加して、OpenShift GitOps namespace に
bgdkAppProjectリソースを設定します。apiVersion: argoproj.io/v1alpha1 kind: AppProject metadata: name: bgdk namespace: openshift-gitops spec: sourceNamespaces: - bgdk sourceRepos: - https://github.com/redhat-developer-demos/openshift-gitops-examples.git destinations: - namespace: bgdk server: https://kubernetes.default.svc clusterResourceWhitelist: - group: '' kind: Namespace-
sourceNamespacesは、Application自体が作成される namespace です。 -
sourceReposは、Applicationテンプレートが使用するリポジトリーです。 -
destinationsは、Applicationがワークロードをデプロイする namespace です。 -
clusterResourceWhitelistは、Applicationがデプロイを許可されているクラスタースコープのリソースリストです。このシナリオでは、Applicationが新しい namespace を作成する必要があるため、この namespace の種類は必須です。
-
次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f appproject-example.yaml次の YAML ファイルサンプルを追加して、カスタマイズされた Argo CD
AppProjectリソース設定をApplicationSetリソースに適用します。apiVersion: argoproj.io/v1alpha1 kind: ApplicationSet metadata: name: bgdk-2 namespace: bgdk spec: generators: - clusterDecisionResource: configMapRef: acm-placement labelSelector: matchLabels: cluster.open-cluster-management.io/placement: all-openshift-clusters requeueAfterSeconds: 30 template: metadata: annotations: apps.open-cluster-management.io/ocm-managed-cluster: '{{name}}' argocd.argoproj.io/skip-reconcile: "true" labels: apps.open-cluster-management.io/pull-to-ocm-managed-cluster: "true" name: '{{name}}-bgdk' spec: destination: namespace: bgdk server: https://kubernetes.default.svc project: bgdk source: path: apps/bgd/overlays/bgdk repoURL: https://github.com/redhat-developer-demos/openshift-gitops-examples.git targetRevision: HEAD syncPolicy: automated: {}次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f applicationset-example.yaml
関連情報
ArgoCD ApplicationSet の詳細は、次のリソースを参照してください。
1.3. 任意の namespace で ApplicationSet リソースを有効にする リンクのコピーリンクがクリップボードにコピーされました!
ハブクラスター上の任意の namespace で ApplicationSet リソースを有効にできます。
Argo CD ApplicationSet リソースを有効にするには、次のセクションを完了します。
必要なアクセス権: クラスター管理者
1.3.1. ハブクラスター上の任意の namespace で ApplicationSet リソースを有効にする リンクのコピーリンクがクリップボードにコピーされました!
ハブクラスターの任意の namespace で Argo CD ApplicationSet リソースを有効にするには、次の手順を実行します。
コマンドラインインターフェイスから次のコマンドを実行して、GitHub リポジトリーのクローンを作成します。
git clone https://github.com/stolostron/multicloud-integrations次のコマンドを実行して、クローンを作成した GitHub リポジトリーに移動します。
cd multicloud-integrations/deploy/appset-any-namespace次のコマンドを実行して、任意の namespace で
ApplicationSetリソースを有効にします。./setup-appset-any-namespace.sh --namespace openshift-gitops --argocd-name openshift-gitopsOpenShift GitOps インスタンスが再起動し、ハブクラスターで実行されていることを確認します。ハブクラスターで次のコマンドを実行します。
oc get pods -n openshift-gitops
1.3.2. マネージドクラスター上の任意の namespace で アプリケーション リソースを有効にする リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Advanced Cluster Management OpenShift GitOps アドオンは、マネージドクラスター上の任意の namespace で Application リソースを有効にするために使用できる OpenShift GitOps インスタンスを起動します。マネージドクラスターの任意の namespace で Argo CD Application リソースを有効にするには、次の手順を実行します。
次の YAML ファイルサンプルを追加して、グローバル
ManagedClusterSetBindingリソースを作成します。apiVersion: cluster.open-cluster-management.io/v1beta2 kind: ManagedClusterSetBinding metadata: name: global namespace: openshift-gitops spec: clusterSet: global次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f managedclustersetbinding-example.yaml(gitops-short) アドオンが有効になるマネージドクラスターを選択するための
Placementカスタムリソースを作成します。次の YAML ファイルサンプルを追加します。apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: all-openshift-clusters namespace: openshift-gitops spec: tolerations: - key: cluster.open-cluster-management.io/unreachable operator: Exists - key: cluster.open-cluster-management.io/unavailable operator: Exists predicates: - requiredClusterSelector: labelSelector: matchExpressions: - key: vendor operator: "In" values: - OpenShift次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f placement-example.yamlGitOpsClusterリソースを作成し、gitopsAddon仕様を追加します。YAML ファイルは、次のサンプルのようになります。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: argo-acm-importer namespace: openshift-gitops spec: argoServer: cluster: notused argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops gitopsAddon: enabled: true overrideExistingConfigs: true次のコマンドを実行して、YAML ファイルサンプルを適用します。
oc apply -f gitopscluster-example.yamlマネージドクラスターで次のコマンドを実行して、OpenShift GitOps インスタンスが再起動し、マネージドクラスターで実行されていることを確認します。
oc get pods -n openshift-gitops
関連情報
引き続き、Argo CD ApplicationSet リソースをデプロイして完全に管理します。手順については、プルモデル用の任意の namespace に Argo CD ApplicationSet リソースをデプロイする (テクノロジープレビュー) を参照してください。
Argo CD ApplicationSet リソースの詳細は、次のリソースを参照してください。
1.4. マネージドクラスターを Red Hat OpenShift GitOps Operator に登録する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps を Push モデルで設定するには、1 つ以上の Red Hat Advanced Cluster Management for Kubernetes マネージドクラスターのセットを OpenShift GitOps Operator のインスタンスに登録します。登録後、アプリケーションをこれらのクラスターにデプロイできます。継続的な OpenShift GitOps 環境を設定して、開発環境、ステージング、および実稼働環境のクラスター全体でアプリケーションの整合性を自動化します。
1.4.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Advanced Cluster Management for Kubernetes に Red Hat OpenShift GitOps Operator をインストールする必要がある。
- 1 つ以上のマネージドクラスターをインポートする。
- マネージドクラスターを OpenShift GitOps に登録するには、ManagedClusterSet の作成 ドキュメントに記載されている内容を完了してください。
-
ManagedServiceAccountアドオンを有効にして、Argo CD プッシュおよびプルモデルがマネージドクラスターに接続するために使用するトークンをローテーションします。アドオンを有効にする方法は、klusterlet アドオンの設定 を参照してください。
1.4.2. マネージドクラスターを Red Hat OpenShift GitOps に登録する リンクのコピーリンクがクリップボードにコピーされました!
マネージドクラスターを OpenShift GitOps に登録するには、次の手順を実行します。
OpenShift GitOps がデプロイされている namespace にバインドして、マネージドクラスターセットを作成します。
- ManagedClusterSetBinding リソースの作成 を参照してください。
- 配置情報は、ManagedCluster オブジェクトによるフィルタリング を参照してください。
マネージドクラスターセットバインディングで使用される namespace で、
Placementカスタムリソースを作成し、OpenShift GitOps Operator インスタンスに登録するマネージドクラスターのセットを選択します。multicloud-integration配置例をテンプレートとして使用します。配置情報は、配置での ManagedClusterSets の使用 を参照してください。注記:
- 他の Kubernetes クラスターではなく、OpenShift GitOps Operator インスタンスに登録されるのは、OpenShift Container Platform クラスターのみです。
-
一部の不安定なネットワークシナリオでは、マネージドクラスターが一時的に使用
unavailableまたはunreachable状態になることがあります。詳細は、Red Hat Advanced Cluster Management および OpenShift GitOps の配置許容範囲の設定 を参照してください。
GitOpsClusterカスタムリソースを作成し、配置決定から OpenShift GitOps の指定されたインスタンスにマネージドクラスターのセットを登録します。これにより、OpenShift GitOps インスタンスは、これらの Red Hat Advanced Cluster Management マネージドクラスターのいずれかにアプリケーションをデプロイできます。multicloud-integrationsOpenShift GitOps クラスターの例を使用します。注記: 参照される
Placementリソースは、GitOpsClusterリソースと同じ namespace に配置されている必要があります。以下の例を参照してください。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-cluster-sample namespace: dev spec: argoServer: cluster: <your-local-cluster-name> argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters1 -
placementRef.nameの値はall-openshift-clustersで、argoNamespace: openshift-gitopsにインストールされている OpenShift GitOps インスタンスのターゲットクラスターとして指定されます。 -
argoServer.cluster仕様には<your-local-cluster-name>値が必要です。
-
- 変更を保存します。これで、OpenShift GitOps ワークフローに従ってアプリケーションを管理できるようになりました。
1.4.3. OpenShift Container Platform クラスター以外のクラスターを Red Hat OpenShift GitOps に登録する リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Advanced Cluster Management GitOpsCluster リソースを使用して、OpenShift Container Platform クラスター以外のクラスターを OpenShift GitOps クラスターに登録できるようになりました。この機能では、OpenShift GitOps コンソールを使用して、OpenShift Container Platform クラスター以外のクラスターにアプリケーションリソースをデプロイできます。OpenShift Container Platform クラスター以外のクラスターを OpenShift GitOps クラスターに登録するには、次の手順を実行します。
OpenShift Container Platform 以外の
ManagedClusterリソースspecの API サーバー URL に移動し、次のコマンドを実行して検証します。oc get managedclusters eks-1次の情報のような出力になっていることを確認します。
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE eks-1 true https://5E336C922AB16684A332C10535B8D407.gr7.us-east-2.eks.amazonaws.com True True 37mOpenShift Container Platform 以外の
MangedClusterリソースspecの API サーバー URL が空の場合は、次の手順を実行して手動で更新します。API サーバー URL を完成させるには、次のコマンドを実行して
MangedClusterリソースspecを編集します。oc edit managedclusters eks-1YAML が次のファイルのようになっていることを確認します。
spec: managedClusterClientConfigs: - caBundle: ZW1wdHlDQWJ1bmRsZQo= url: https://5E336C922AB16684A332C10535B8D407.gr7.us-east-2.eks.amazonaws.com変更を保存し、次のコマンドを実行して API サーバーが完了したことを確認します。
oc get managedclusters eks-1- 次の情報のような出力になっていることを確認します。
NAME HUB ACCEPTED MANAGED CLUSTER URLS JOINED AVAILABLE AGE eks-1 true https://5E336C922AB16684A332C10535B8D407.gr7.us-east-2.eks.amazonaws.com True True 37mクラスターシークレットが生成されたことを確認するには、
openshift-gitopsnamespace に移動し、GitOpsClusterリソースのステータスがsuccessfulとして報告されていることを確認します。注記:
以下のインポート方法を使用すると、OpenShift Container Platform を除くあらゆる種類の
ManagedClusterリソースの API サーバー URL が自動的にレンダリングされます。- 既存クラスターのサーバー URL および API トークンを入力する。
-
既存クラスターの
kubeconfigファイルを入力する。
次の場合、いずれかの
ManagedClustersリソースの API サーバー URL が空になる可能性があります。- OpenShift Container Platform 以外のクラスターを、バージョン 2.12 より前の Red Hat Advanced Cluster Management ハブクラスターにインポートする。
-
OpenShift Container Platform クラスター以外のクラスターを、インポートモード
Run import commandsを使用して、Red Hat Advanced Cluster Management ハブクラスターに手動でインポートする。
1.4.4. Red Hat OpenShift GitOps トークン リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps Operator と統合すると、配置および ManagedClusterSetBinding カスタムリソースを通じて OpenShift GitOps namespace にバインドされているすべてのマネージドクラスターに対して、ManagedCluster にアクセスするためのトークンを含むシークレットが OpenShift GitOps インスタンスサーバー namespace に作成されます。
OpenShift GitOps コントローラーは、リソースをマネージドクラスターに同期するためにこのシークレットを必要とします。デフォルトでは、サービスアカウント application-manager は、マネージドクラスターのクラスター管理者権限を使用して、OpenShift GitOps インスタンスサーバーの namespace にセキュアな OpenShift GitOps クラスターシークレットを生成します。デフォルトの namespace は openshift-gitops です。
OpenShift GitOps インスタンスサーバーの namespace は、以下の優先順位に基づいてセキュアなクラスターシークレットをレンダリングします。
- クラスタープロキシーサービス
multicluster engine Operator では
cluster-proxyアドオンが必ず有効になっているため、クラスタープロキシーサービスはデフォルトのオプションです。すべての Kubernetes クラスターで、クラスタープロキシーサービスによってレンダリングされたセキュアな Argo CD クラスターシークレットを使用できます。そのシークレットには以下のコンポーネントが含まれています。- サーバー URL: マネージドクラスターのクラスタープロキシー URL。
-
caData: マネージドクラスター namespace 内の
openshift-service-caconfig map にある、Transport Layer Security (TLS) 用のサービス認証局 (CA)。 -
ベアラートークン:
ManagedServiceAccountapplication-managerのトークン。
- マネージドクラスタークライアント設定
クラスタープロキシーが利用できない場合 (たとえば、multicluster engine Operator で
cluster-proxyアドオンが無効になっている場合)、システムはマネージドクラスターの API サーバーエンドポイントと CA を自動的に検出します。マネージドクラスタークライアント設定によってレンダリングされたセキュアな Argo CD クラスターシークレットは、OpenShift Container Platform クラスターでのみ使用できます。そのシークレットには以下のコンポーネントが含まれています。- サーバー URL と caData: マネージドクラスター仕様のクライアント設定から導出されます。
-
ベアラートークン: 同じ
ManagedServiceAccountapplication-managerトークンから導出されます。
このデフォルトが不要な場合は、OpenShift GitOps インスタンスサーバーの namespace で OpenShift GitOps クラスターシークレットを生成するために、カスタマイズされた権限を持つサービスアカウントをマネージドクラスターで作成します。デフォルトの namespace は引き続き openshift-gitops です。詳細は、Argo CD プッシュモデル用のカスタマイズされたサービスアカウントの作成 を参照してください。
1.4.5. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
詳細は、次のリソースと例を参照してください。
1.5. GitOps のアプリケーション配置許容範囲の設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Advanced Cluster Management は、アプリケーションを Red Hat OpenShift GitOps にデプロイするマネージドクラスターを登録する方法を提供します。
一部の不安定なネットワークシナリオでは、マネージドクラスターが一時的に使用 Unavailable 状態になることがあります。アプリケーションのデプロイを容易にするために Placement リソースが使用されている場合は、使用できないクラスターを引き続き含めるために、Placement リソースに次の許容範囲を追加します。次の例は、許容範囲を含む Placement リソースを示しています。
apiVersion: cluster.open-cluster-management.io/v1beta1
kind: Placement
metadata:
name: placement
namespace: ns1
spec:
tolerations:
- key: cluster.open-cluster-management.io/unreachable
operator: Exists
- key: cluster.open-cluster-management.io/unavailable
operator: Exists
1.6. プッシュアンドプルモデルを使用した Argo CD の導入 リンクのコピーリンクがクリップボードにコピーされました!
Push モデル 使用して、ハブクラスター上の Argo CD サーバーは、マネージドクラスターにアプリケーションリソースをデプロイします。Pull モデル の場合、アプリケーションリソースは manifestWork を使用して Propagation controller によってマネージドクラスターに伝播されます。
どちらのモデルでも、同じ ApplicationSet CRD を使用してアプリケーションをマネージドクラスターにデプロイします。
必要なアクセス権: クラスター管理者
1.6.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
Argo CD Pull モデルの次の前提条件を確認している。
重要:
-
openshift-gitops-ArgoCD-application-controllerサービスアカウントがクラスター管理者として割り当てられてい ない 場合、Red Hat OpenShift GitOps アプリケーションコントローラーはリソースをデプロイしない可能性があります。アプリケーションのステータスによって、次のようなエラーが送信される場合があります。
cannot create resource "services" in API group "" in the namespace
"mortgage",deployments.apps is forbidden: User
"system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller"
-
マネージドクラスターに
OpenShift GitopsOperator をインストールした後、同じマネージドクラスターにClusterRoleBindingクラスター管理者権限を作成する必要があります。 マネージドクラスターに
ClusterRoleBindingクラスター管理者権限を追加するには、次の YAML の例を参照してください。kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: argo-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminクラスター管理者ではなく、この問題を解決する必要がある場合は、次の手順を実行してください。
- Argo CD アプリケーションがデプロイされる各マネージドクラスター上にすべての namespace を作成します。
managed-byラベルを各 namespace に追加します。Argo CD アプリケーションが複数の namespace にデプロイされている場合、各 namespace は Argo CD によって管理される必要があります。managed-byラベルを使用した次の例を参照してください。
apiVersion: v1 kind: Namespace metadata: name: mortgage2 labels: argocd.argoproj.io/managed-by: openshift-gitops-
すべてのアプリケーション宛先 namespace をアプリケーションのリポジトリー内で宣言し、namespace に
managed-byラベルを含める必要があります。namespace を宣言する方法は、Additional resources を参照してください。
Argo CD Pull モデルを使用するには、次の要件を参照してください。
-
Red Hat OpenShift GitOps Operator はハブクラスターに、ターゲットのマネージドクラスターを
openshift-gitopsnamespace にインストールする必要があります。 - 必要なハブクラスター OpenShift Container Platform GitOps Operator はバージョン 1.9.0 以降である必要があります。
- ハブクラスター上の Red Hat OpenShift GitOps Operator のバージョンは、マネージドクラスター上の Operator のバージョンと同じか、それより新しい必要があります。
- マネージドクラスターの Argo CD アプリケーションテンプレートを伝播するには、ApplicationSet コントローラー が必要です。
すべてのマネージドクラスターは、ハブクラスター上の Argo CD サーバー namespace にクラスターシークレットを持っている必要があります。これは、ArgoCD アプリケーションセットコントローラーがマネージドクラスターの Argo CD アプリケーションテンプレートを伝播するために必要です。
クラスターシークレットを作成するには、
placementリソースへの参照が含まれるgitOpsClusterリソースを作成します。placementリソースは、プルモデルをサポートする必要があるすべてのマネージドクラスターを選択します。OpenShift GitOps クラスターコントローラーが調整すると、Argo CD サーバーの namespace にマネージドクラスターのクラスターシークレットが作成されます。
1.6.2. アーキテクチャー リンクのコピーリンクがクリップボードにコピーされました!
Push および Pull モデルの両方で、ハブクラスター上の Argo CD ApplicationSet コントローラー が調整して、ターゲットのマネージドクラスターごとにアプリケーションリソースを作成します。両方のモデルのアーキテクチャーに関する以下の情報を参照してください。
1.6.2.1. アーキテクチャープッシュモデル リンクのコピーリンクがクリップボードにコピーされました!
- Push モデルを使用すると、OpenShift Container Platform GitOps は、一元化されたハブクラスターからマネージドクラスターにリソースを 直接 適用します。
- ハブクラスター上で実行されている Argo CD アプリケーションは、GitHub リポジトリーと通信し、マニフェストをマネージドクラスターに直接デプロイします。
- Push モデルの実装には、マネージドクラスターの認証情報を持つハブクラスター上の Argo CD アプリケーションのみが含まれます。ハブクラスター上の Argo CD アプリケーションは、アプリケーションをマネージドクラスターにデプロイできます。
- 重要: リソースの適用を必要とするマネージドクラスターが多数ある場合は、OpenShift GitOps コントローラーのメモリーと CPU の使用率に負担がかかる可能性があることを考慮してください。リソース管理を最適化するには、Red Hat OpenShift GitOps ドキュメントの リソースクォータまたはリクエストの設定 を参照してください。
-
デフォルトでは、
ApplicationSetのテンプレートセクションにapps.open-cluster-management.io/ocm-managed-clusterおよびapps.open-cluster-management.io/pull-to-ocm-managed-clusterアノテーションを追加しない限り、アプリケーションのデプロイには Push モデルが使用されます。
1.6.2.2. アーキテクチャープルモデル リンクのコピーリンクがクリップボードにコピーされました!
- プルモデルでは、ハブクラスター内のコントローラーのストレスが軽減されるため、プッシュモデルと比較してスケーラビリティーが軽減されますが、より多くのリクエストとステータスレポートが必要になります。
- プルモデルの場合、OpenShift Container Platform GitOps は、一元化されたハブクラスターからマネージドクラスターにリソースを直接適用 しません。Argo CD アプリケーションは、ハブクラスターからマネージドクラスターに伝播されます。
-
Pull モデルの実装では、OpenShift Cluster Manager の登録、配置、
manifestWorkAPI が適用され、ハブクラスターがハブクラスターとマネージドクラスター間のセキュアな通信チャネルを使用してリソースをデプロイできるようになります。 - 各マネージドクラスターは個別に GitHub リポジトリーと通信してリソースマニフェストをローカルにデプロイするため、各マネージドクラスターに OpenShift GitOps operator をインストールして設定する必要があります。
-
Argo CD サーバーは、各ターゲットのマネージドクラスター上で実行されている必要があります。Argo CD アプリケーションリソースはマネージドクラスター上に複製され、ローカルの Argo CD サーバーによってデプロイされます。マネージドクラスター上の分散 Argo CD アプリケーションは、ハブクラスター上の単一の Argo CD
ApplicationSetリソースを使用して作成されます。 -
マネージドクラスターは、
ocm-managed-clusterアノテーションの値によって決定されます。 -
Pull モデルを正常に実装するには、Argo CD アプリケーションコントローラーは、
ApplicationSetのテンプレートセクションにあるargocd.argoproj.io/skip-reconcileアノテーションを持つプッシュモデルアプリケーションリソースを 無視 する必要があります。 - Pull モデルの場合、マネージドクラスター上の Argo CD アプリケーションコントローラー が調整してアプリケーションをデプロイします。
- ハブクラスター上の Pull モデル Resource sync controller は、各マネージドクラスター上の OpenShift Cluster Manager 検索 V2 コンポーネントに定期的にクエリーを実行し、各 Argo CD アプリケーションのリソースリストとエラーメッセージを取得します。
-
ハブクラスターの Aggregation controller はリソース同期コントローラーからのデータと、
manifestWorkからのステータス情報を使用して、クラスター全体からMulticlusterApplicationSetReportを作成および更新します。 - デプロイメントのステータスはハブクラスターに収集されますが、すべての詳細情報が送信されるわけではありません。概要を提供するために、追加のステータス更新が定期的に収集されます。ステータスのフィードバックはリアルタイムではなく、各マネージドクラスターの OpenShift GitOps operator は Git リポジトリーと通信する必要があるため、複数のリクエストが発生します。
1.6.3. ApplicationSet カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
Argo CD ApplicationSet リソースは、マネージドクラスターのリストを取得するために使用されるジェネレーターフィールド内の placement リソースを含むプッシュまたはプルモデルを使用して、マネージドクラスターにアプリケーションをデプロイするために使用されます。
- プルモデルの場合、次の例に示すように、アプリケーションの宛先をデフォルトのローカル Kubernetes サーバーに設定します。アプリケーションは、マネージドクラスター上のアプリケーションコントローラーによってローカルにデプロイされます。
以下の
ApplicationSetYAML の例に示されるように、デフォルトの Push モデルをオーバーライドするために必要なアノテーションを追加します。これは、テンプレートアノテーションで Pull モデルを使用します。apiVersion: argoproj.io/v1alpha1 kind: `ApplicationSet` metadata: name: guestbook-allclusters-app-set namespace: openshift-gitops spec: generators: - clusterDecisionResource: configMapRef: ocm-placement-generator labelSelector: matchLabels: cluster.open-cluster-management.io/placement: aws-app-placement requeueAfterSeconds: 30 template: metadata: annotations: apps.open-cluster-management.io/ocm-managed-cluster: '{{name}}'1 apps.open-cluster-management.io/ocm-managed-cluster-app-namespace: openshift-gitops argocd.argoproj.io/skip-reconcile: "true"2 labels: apps.open-cluster-management.io/pull-to-ocm-managed-cluster: "true"3 name: '{{name}}-guestbook-app' spec: destination: namespace: guestbook server: https://kubernetes.default.svc project: default sources: [ { repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: main path: guestbook } ] syncPolicy: automated: {} syncOptions: - CreateNamespace=true
1.6.4. MulticlusterApplicationSetReport リンクのコピーリンクがクリップボードにコピーされました!
-
Pull モデルの場合、
MulticlusterApplicationSetReportはマネージドクラスター全体からアプリケーションステータスを集約します。 - レポートには、リソースのリストと、各マネージドクラスターからのアプリケーションの全体的なステータスが含まれます。
-
Argo CD ApplicationSet リソースごとに個別のレポートリソースが作成されます。レポートは
ApplicationSetと同じ namespace に作成されます。 レポートには次の項目が含まれます。
- Argo CD アプリケーションのリソースのリスト
- 各 Argo CD アプリケーションの全体的な同期およびヘルスステータス
-
全体的なステータスが
out of sync、またはunhealthy各クラスターのエラーメッセージ - マネージドクラスターのすべての状態を示すサマリーステータス
- Resource sync controller と Aggregation controller は両方とも 10 秒ごとに実行され、レポートを作成します。
次の出力例に示すように、2 つのコントローラーと Propagation コントローラーは、同じ
multicluster-integrationsPod 内の別々のコンテナーで実行されます。NAMESPACE NAME READY STATUS open-cluster-management multicluster-integrations-7c46498d9-fqbq4 3/3 Running
以下は、guestbook アプリケーションの MulticlusterApplicationSetReport YAML ファイルの例です。
apiVersion: apps.open-cluster-management.io/v1alpha1
kind: MulticlusterApplicationSetReport
metadata:
labels:
apps.open-cluster-management.io/hosting-applicationset: openshift-gitops.guestbook-allclusters-app-set
name: guestbook-allclusters-app-set
namespace: openshift-gitops
statuses:
clusterConditions:
- cluster: cluster1
conditions:
- message: 'Failed sync attempt: one or more objects failed to apply, reason: services is forbidden: User "system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller" cannot create resource "services" in API group "" in the namespace "guestbook",deployments.apps is forbidden: User <name> cannot create resource "deployments" in API group "apps" in the namespace "guestboo...'
type: SyncError
healthStatus: Missing
syncStatus: OutOfSync
- cluster: pcluster1
healthStatus: Progressing
syncStatus: Synced
- cluster: pcluster2
healthStatus: Progressing
syncStatus: Synced
summary:
clusters: "3"
healthy: "0"
inProgress: "2"
notHealthy: "3"
notSynced: "1"
synced: "2"
Note: リソースがデプロイに失敗した場合、リソースはリソース一覧に含まれません。詳細は、エラーメッセージを参照してください。
1.6.5. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat OpenShift GitOps ドキュメントの クラスター設定を使用してアプリケーションをデプロイして OpenShift クラスターの設定 を参照してください。
- Red Hat OpenShift GitOps ドキュメントの Argo CD インスタンスの設定 を参照してください。
1.7. Red Hat OpenShift GitOps を使用したポリシー定義の管理 リンクのコピーリンクがクリップボードにコピーされました!
ArgoCD リソースを使用する場合、Red Hat Advanced Cluster Management ハブクラスターでポリシーを作成するための OpenShift GitOps アクセスを許可することで、Red Hat OpenShift GitOps を使用してポリシー定義を管理できます。
1.7.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
ハブクラスターにログインしておく。
必要なアクセス権: クラスター管理者
非推奨: PlacementRule
1.7.2. OpenShift GitOps 用の ClusterRole リソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
ポリシーと配置の作成、読み取り、更新、削除のアクセス権を持つ OpenShift GitOps の ClusterRole リソースを作成するには以下を実行します。
コンソールから
ClusterRoleを作成します。ClusterRoleは次の例のようになります。kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin rules: - verbs: - get - list - watch - create - update - patch - delete apiGroups: - policy.open-cluster-management.io resources: - policies - configurationpolicies - certificatepolicies - operatorpolicies - policysets - placementbindings - verbs: - get - list - watch - create - update - patch - delete apiGroups: - apps.open-cluster-management.io resources: - placementrules - verbs: - get - list - watch - create - update - patch - delete apiGroups: - cluster.open-cluster-management.io resources: - placements - placements/status - placementdecisions - placementdecisions/statusClusterRoleBindingオブジェクトを作成して、OpenShift GitOps サービスアカウントにopenshift-gitops-policy-adminClusterRoleオブジェクトへのアクセスを許可します。ClusterRoleBindingは次の例のようになります。kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin注記: - Red Hat Advanced Cluster Management ポリシー定義が OpenShift GitOps でデプロイされると、ハブテンプレートの違いを解決するために、各マネージドクラスター namespace にポリシーのコピーが作成されます。これらのコピーは、複製されたポリシーと呼ばれます。- OpenShift GitOps がこの複製されたポリシーを繰り返し削除したり、Argo CD
Applicationが同期されていないことを示したりするのを防ぐために、Red Hat Advanced Cluster Management ポリシーフレームワークによって、各複製されたポリシーにargocd.argoproj.io/compare-options: IgnoreExtraneousアノテーションが自動的に設定されます。-
Argo CD がオブジェクトを追跡するために使用するラベルとアノテーションがあります。複製されたポリシーが Argo CD にまったく表示されないようにするには、Red Hat Advanced Cluster Management ポリシー定義で
spec.copyPolicyMetadataをfalseに設定して、Argo CD 追跡ラベルとアノテーションを無効にします。
1.7.3. ポリシージェネレーターと OpenShift GitOps の統合 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps を使用すると、GitOps を通じてポリシージェネレーターを使用してポリシーを生成できます。ポリシージェネレーターは OpenShift GitOps コンテナーイメージにプリインストールされていないため、カスタマイズを行う必要があります。
1.7.3.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift GitOps を Red Hat Advanced Cluster Management ハブクラスターにインストールしておく。
- ハブクラスターにログインしておく。
1.7.3.2. OpenShift GitOps からのポリシージェネレーターへのアクセス リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps からポリシージェネレーターにアクセスするには、Init コンテナーを設定して、Red Hat Advanced Cluster Management Application Subscription コンテナーイメージからポリシージェネレーターバイナリーをコピーする必要があります。Kustomize を実行するときに --enable-alpha-plugins フラグを指定して OpenShift GitOps を設定する必要もあります。
ポリシージェネレーターを使用してポリシーと配置を作成、読み取り、更新、削除するには、OpenShift GitOps からポリシージェネレーターへのアクセス権を付与します。以下の手順を実行します。
次のコマンドを使用して、OpenShift GitOps
argocdオブジェクトを編集します。oc -n openshift-gitops edit argocd openshift-gitopsポリシージェネレーターを新しいバージョンに更新するには、Init コンテナーで使用される
registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9イメージを新しいタグに追加します。<version>パラメーターは、ArgoCDリソースの最新の Red Hat Advanced Cluster Management バージョンに置き換えます。ArgoCDリソースは、次の YAML ファイルのようになります。apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops spec: kustomizeBuildOptions: --enable-alpha-plugins repo: env: - name: KUSTOMIZE_PLUGIN_HOME value: /etc/kustomize/plugin initContainers: - args: - -c - cp /policy-generator/PolicyGenerator-not-fips-compliant /policy-generator-tmp/PolicyGenerator command: - /bin/bash image: registry.redhat.io/rhacm2/multicluster-operators-subscription-rhel9:v<version> name: policy-generator-install volumeMounts: - mountPath: /policy-generator-tmp name: policy-generator volumeMounts: - mountPath: /etc/kustomize/plugin/policy.open-cluster-management.io/v1/policygenerator name: policy-generator volumes: - emptyDir: {} name: policy-generator注記: または、
ArgoCDマニフェストを含むConfigurationPolicyリソースを作成し、MulticlusterHubで設定されたバージョンと一致するバージョンをテンプレート化することもできます。image: '{{ (index (lookup "apps/v1" "Deployment" "open-cluster-management" "multicluster-operators-hub-subscription").spec.template.spec.containers 0).image }}'ポリシーを生成する前に Kustomize ディレクトリー内で Helm チャート処理を有効にする場合は、
spec.repo.envフィールドでPOLICY_GEN_ENABLE_HELM環境変数を"true"に設定します。env: - name: POLICY_GEN_ENABLE_HELM value: "true"ポリシーと配置を作成、読み取り、更新、削除するには、
ClusterRoleBindingオブジェクトを作成し、OpenShift GitOps サービスアカウントに Red Hat Advanced Cluster Management ハブクラスターへのアクセス権を付与します。ClusterRoleBindingは、次のようなリソースになる場合があります。kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: openshift-gitops-policy-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: openshift-gitops-policy-admin
1.7.4. OpenShift GitOps でのポリシーヘルスチェックの設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps を ArgoCD リソースとともに使用して、resourceHealthChecks フィールドに追加することで、リソースの状態に基づいてリソースのヘルスステータスを設定するカスタムロジックを定義します。たとえば、ポリシーに準拠している場合にのみポリシーが正常であると報告するカスタムヘルスチェックを定義できます。
重要: インターネットから悪意のあるものをダウンロードしていないことを確認するには、ポリシーを適用する前にすべてのポリシーを確認してください。
リソースの種類のヘルスチェックを定義するには、次の手順を実行します。
argocd-policy-healthchecks.yamlをダウンロードして、CertificatePolicy、ConfigurationPolicy、OperatorPolicy、およびPolicyリソースにヘルスチェックを追加します。以下のコマンドを実行します。wget https://raw.githubusercontent.com/open-cluster-management-io/policy-collection/main/stable/CM-Configuration-Management/argocd-policy-healthchecks.yamlコンソールで Governance > Create policy に移動し、内容を YAML エディターに貼り付けて、
argocd-policy-healthchecks.yamlポリシーを適用します。注記: YAML エディターで配置情報を追加すると、ポリシーがアクティブなクラスターを特定できます。
-
ArgoCDリソースの Summary タブを表示して、ヘルスチェックが期待どおりに機能していることを確認します。Argo CD コンソールから健全性の詳細を表示します。
1.7.5. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift GitOps について のドキュメントを参照してください。
1.8. GitOps Operator をインストールするためのポリシーの生成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Advanced Cluster Management ポリシーの一般的な用途は、Operator を 1 つ以上の Red Hat OpenShift Container Platform マネージドクラスターにインストールすることです。ポリシージェネレーターを使用してポリシーを生成する方法、および生成されたポリシーを使用して OpenShift Container Platform GitOps Operator をインストールする方法は、引き続きお読みください。
1.8.1. OpenShift Container Platform GitOps をインストールするポリシーの生成 リンクのコピーリンクがクリップボードにコピーされました!
Policy Generator を使用して、OpenShift Container Platform GitOps をインストールするポリシーを生成できます。OpenShift Container Platform GitOps Operator は all namespaces インストールモードを提供しており、次の例で確認できます。次の例のように、openshift-gitops-subscription.yaml という Subscription マニフェストファイルを作成します。
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-gitops-operator
namespace: openshift-operators
spec:
channel: stable
name: openshift-gitops-operator
source: redhat-operators
sourceNamespace: openshift-marketplace
Operator の特定のバージョンに固定するには、パラメーターと値 spec.startingCSV: openshift-gitops-operator.v<version> を追加します。<version> を希望のバージョンに置き換えます。
PolicyGenerator 設定ファイルが必要です。policy-generator-config.yaml という名前の設定ファイルを使用してポリシーを生成し、すべての OpenShift Container Platform マネージドクラスターに OpenShift GitOps をインストールします。以下の例を参照してください。
apiVersion: policy.open-cluster-management.io/v1
kind: PolicyGenerator
metadata:
name: install-openshift-gitops
policyDefaults:
namespace: policies
placement:
clusterSelectors:
vendor: "OpenShift"
remediationAction: enforce
policies:
- name: install-openshift-gitops
manifests:
- path: openshift-gitops-subscription.yaml
最後に必要なファイルは kustomization.yaml で、次の設定が必要です。
generators:
- policy-generator-config.yaml
生成されたポリシーは、PlacementRule (非推奨) を含む次のファイルのようになります。
apiVersion: apps.open-cluster-management.io/v1
kind: PlacementRule
metadata:
name: placement-install-openshift-gitops
namespace: policies
spec:
clusterSelector:
matchExpressions:
- key: vendor
operator: In
values:
- OpenShift
---
apiVersion: policy.open-cluster-management.io/v1
kind: PlacementBinding
metadata:
name: binding-install-openshift-gitops
namespace: policies
placementRef:
apiGroup: apps.open-cluster-management.io
kind: PlacementRule
name: placement-install-openshift-gitops
subjects:
- apiGroup: policy.open-cluster-management.io
kind: Policy
name: install-openshift-gitops
---
apiVersion: policy.open-cluster-management.io/v1
kind: Policy
metadata:
annotations:
policy.open-cluster-management.io/categories: CM Configuration Management
policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
policy.open-cluster-management.io/standards: NIST SP 800-53
policy.open-cluster-management.io/description:
name: install-openshift-gitops
namespace: policies
spec:
disabled: false
policy-templates:
- objectDefinition:
apiVersion: policy.open-cluster-management.io/v1
kind: ConfigurationPolicy
metadata:
name: install-openshift-gitops
spec:
object-templates:
- complianceType: musthave
objectDefinition:
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: openshift-gitops-operator
namespace: openshift-operators
spec:
channel: stable
name: openshift-gitops-operator
source: redhat-operators
sourceNamespace: openshift-marketplace
remediationAction: enforce
severity: low
OpenShift Container Platform ドキュメントのマニフェストから生成されたポリシーがサポートされています。ポリシージェネレーターを使用して、OpenShift Container Platform ドキュメントの設定ガイダンスを適用できます。
1.8.2. OperatorGroups でのポリシー依存関係の使用 リンクのコピーリンクがクリップボードにコピーされました!
OperatorGroup マニフェストを使用して Operator をインストールする場合、Subscription が作成される前に、クラスターに OperatorGroup が存在している必要があります。ポリシージェネレーターとともにポリシー依存関係機能を使用して、Subscription ポリシーを実施する前に OperatorGroup ポリシーが準拠していることを確認します。
必要な順序でマニフェストを一覧表示して、ポリシーの依存関係を設定します。たとえば、namespace ポリシーを最初に作成し、次に OperatorGroup を作成し、最後に Subscription を作成することができます。
ポリシージェネレーター設定マニフェストで policyDefaults.orderManifests パラメーターを有効にし、policyDefaults.consolidateManifests を無効にして、マニフェスト間の依存関係を自動的に設定します。
1.9. Argo CD プッシュモデル用のカスタマイズされたサービスアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
ハブクラスター上に ManagedServiceAccount リソースを作成することにより、マネージドクラスター上にサービスアカウントを作成します。ClusterPermission リソースを使用して、特定のパーミッションをサービスアカウントに付与します。
Argo CD プッシュモデルで使用するカスタマイズされたサービスアカウントを作成すると、次の利点があります。
- アプリケーションマネージャーアドオンは、各マネージドクラスター上で実行されます。デフォルトでは、Argo CD コントローラーはサービスアカウントアプリケーションマネージャーを使用して、これらのリソースをマネージドクラスターにプッシュします。
- アプリケーションサブスクリプションアドオンはアプリケーションマネージャーサービスを使用してマネージドクラスターにアプリケーションをデプロイするため、アプリケーションマネージャーサービスアカウントには大規模なアクセスパーミッションのセットがあります。制限された権限セットが必要な場合は、アプリケーションマネージャーサービスアカウントを使用しないでください。
- Argo CD プッシュモデルで使用する別のサービスアカウントを指定できます。Argo CD コントローラーが集中ハブクラスターからマネージドクラスターにリソースをプッシュする場合、デフォルトのアプリケーションマネージャーとは異なるサービスアカウントを使用できます。別のサービスアカウントを使用すると、このサービスアカウントに付与されるアクセス許可を制御できます。
-
サービスアカウントはマネージドクラスター上に存在している必要があります。関連するアクセスパーミッションが割り当てられたサービスアカウントの作成を容易にするには、一元化されたハブクラスターで
ManagedServiceAccountリソースと新しいClusterPermissionリソースを使用します。
次の手順をすべて完了すると、マネージドサービスアカウントにクラスターのアクセスパーミッションを付与できます。クラスター権限があると、マネージドサービスアカウントには、マネージドクラスターにアプリケーションリソースをデプロイするために必要な権限が与えられます。以下の手順を実行します。
1.9.1. マネージドサービスアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
ハブ上の ManagedServiceAccount カスタムリソースは、マネージドクラスター上に ServiceAccount を作成する場合に便利です。ハブクラスターの <managed-cluster> namespace に ManagedServiceAccount カスタムリソースが作成されると、マネージドクラスターに ServiceAccount が作成されます。
マネージドサービスアカウントを作成するには、ManagedServiceAccount アドオンの有効化 を参照してください。
1.9.2. GitOpsCluster リソースでの管理サービスアカウントの使用 リンクのコピーリンクがクリップボードにコピーされました!
GitOpsCluster リソースは、配置を使用して、選択したマネージドクラスターを Argo CD にインポートします。これには、クラスターへのアクセスに使用される情報を含む Argo CD クラスターシークレットの作成が含まれます。デフォルトでは、Argo CD クラスターシークレットは、アプリケーションマネージャーサービスアカウントを使用してマネージドクラスターにアクセスします。
-
マネージドサービスアカウントを使用するように
GitOpsClusterリソースを更新するには、マネージドサービスアカウントの名前を指定してManagedServiceAccountRefプロパティーを追加します。 次のサンプルを
gitops.yamlファイルとして保存し、GitOpsClusterカスタムリソースを作成します。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: argo-acm-importer namespace: openshift-gitops spec: managedServiceAccountRef: <managed-sa-sample> argoServer: cluster: notused argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops-
ファイルを適用するには
oc apply -f gitops.yamlを実行します。 openshift-gitopsnamespace に移動し、<managed cluster-managed-sa-sample-cluster-secret>という名前の新しい Argo CD クラスターシークレットがあることを確認します。以下のコマンドを実行します。oc get secrets -n openshift-gitops <managed cluster-managed-sa-sample-cluster-secret>以下の出力を参照して確認します。
NAME TYPE DATA AGE <managed cluster-managed-sa-sample-cluster-secret> Opaque 3 4m2s
1.9.3. Argo CD アプリケーションの作成 リンクのコピーリンクがクリップボードにコピーされました!
プッシュモデルを使用して、Argo CD コンソールから Argo CD アプリケーションをデプロイします。Argo CD アプリケーションは、マネージドサービスアカウント <managed-sa-sample> でデプロイされます。
- Argo CD コンソールにログインします。
- Create a new application をクリックします。
- クラスター URL を選択します。
-
Argo CD アプリケーションに移動し、
<managed cluster>に伝播したロールやクラスターロールなど、指定のパーミッションがあることを確認します。
1.9.4. ポリシーを使用したマネージドサービスアカウントおよびクラスターパーミッションの作成 リンクのコピーリンクがクリップボードにコピーされました!
GitOpsCluster リソースが ManagedServiceAccountRef で更新されると、この GitOpsCluster の配置内の各マネージドクラスターにサービスアカウントが必要になります。複数のマネージドクラスターがある場合、マネージドクラスターごとにマネージドサービスアカウントとクラスター権限を作成することは、手間がかかります。このプロセスは、ポリシーを使用して、すべてのマネージドクラスターのマネージドサービスアカウントとクラスター権限を作成することで、簡略化できます。
ManagedServiceAccount リソースと ClusterPermission リソースをハブクラスターに適用すると、このポリシーの配置はローカルクラスターにバインドされます。これらのリソースを、GitOpsCluster リソースの配置内のすべてのマネージドクラスターのマネージドクラスター namespace に複製します。
ポリシーを使用して ManagedServiceAccount および ClusterPermission リソースを作成すると、次の属性が含まれます。
-
ポリシー内の
ManagedServiceAccountとClusterPermissionオブジェクトテンプレートを更新すると、すべてのマネージドクラスターのManagedServiceAccountおよびClusterPermissionリソースがすべて更新されます。 -
ManagedServiceAccountおよびClusterPermissionリソースを直接更新すると、ポリシーが適用されるため、元の状態に戻されます。 GitOpsCluster の配置に関する決定が変更された場合、ポリシーはマネージドクラスターの namespace 内のリソースの作成と削除を管理します。
- マネージドサービスアカウントとクラスター権限を作成するための YAML のポリシーを作成するには、次の内容を含む YAML を作成します。
apiVersion: policy.open-cluster-management.io/v1 kind: Policy metadata: name: policy-gitops namespace: openshift-gitops annotations: policy.open-cluster-management.io/standards: NIST-CSF policy.open-cluster-management.io/categories: PR.PT Protective Technology policy.open-cluster-management.io/controls: PR.PT-3 Least Functionality spec: remediationAction: enforce disabled: false policy-templates: - objectDefinition: apiVersion: policy.open-cluster-management.io/v1 kind: ConfigurationPolicy metadata: name: policy-gitops-sub spec: pruneObjectBehavior: None remediationAction: enforce severity: low object-templates-raw: | {{ range $placedec := (lookup "cluster.open-cluster-management.io/v1beta1" "PlacementDecision" "openshift-gitops" "" "cluster.open-cluster-management.io/placement=aws-app-placement").items }} {{ range $clustdec := $placedec.status.decisions }} - complianceType: musthave objectDefinition: apiVersion: authentication.open-cluster-management.io/v1alpha1 kind: ManagedServiceAccount metadata: name: <managed-sa-sample> namespace: {{ $clustdec.clusterName }} spec: rotation: {} - complianceType: musthave objectDefinition: apiVersion: rbac.open-cluster-management.io/v1alpha1 kind: ClusterPermission metadata: name: <clusterpermission-msa-subject-sample> namespace: {{ $clustdec.clusterName }} spec: roles: - namespace: default rules: - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list", "create", "update", "delete"] - apiGroups: [""] resources: ["configmaps", "secrets", "pods", "podtemplates", "persistentvolumeclaims", "persistentvolumes"] verbs: ["get", "update", "list", "create", "delete"] - apiGroups: ["storage.k8s.io"] resources: ["*"] verbs: ["list"] - namespace: mortgage rules: - apiGroups: ["apps"] resources: ["deployments"] verbs: ["get", "list", "create", "update", "delete"] - apiGroups: [""] resources: ["configmaps", "secrets", "pods", "services", "namespace"] verbs: ["get", "update", "list", "create", "delete"] clusterRole: rules: - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list"] roleBindings: - namespace: default roleRef: kind: Role subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> - namespace: mortgage roleRef: kind: Role subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> clusterRoleBinding: subject: apiGroup: authentication.open-cluster-management.io kind: ManagedServiceAccount name: <managed-sa-sample> {{ end }} {{ end }} --- apiVersion: policy.open-cluster-management.io/v1 kind: PlacementBinding metadata: name: binding-policy-gitops namespace: openshift-gitops placementRef: name: lc-app-placement kind: Placement apiGroup: cluster.open-cluster-management.io subjects: - name: policy-gitops kind: Policy apiGroup: policy.open-cluster-management.io --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: lc-app-placement namespace: openshift-gitops spec: numberOfClusters: 1 predicates: - requiredClusterSelector: labelSelector: matchLabels: name: <your-local-cluster-name>-
YAML ファイルを
policy.yamlというファイルとして保存します。 -
oc apply -f policy.yamlを実行します。 -
ポリシーのオブジェクトテンプレートでは、GitOpsCluster に関連付けられた配置の決定を繰り返し処理し、次の
ManagedServiceAccountおよびClusterPermissionテンプレートを適用します。
1.10. Red Hat OpenShift GitOps アドオンの管理 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps アドオンは、マネージドクラスターのデプロイメントとライフサイクル管理を自動化します。アーキテクチャーと接続要件に基づいて、ArgoCD エージェントコンポーネントとともに GitOps アドオンをデプロイするかどうかを決定します。それ以外の場合は、ArgoCD エージェントなしで OpenShift GitOps アドオンをデプロイできます。
重要: GitOpsCluster カスタムリソースを使用して OpenShift GitOps アドオンを有効にすると、GitOpsCluster は、すべてのアプリケーションの Push Model を無効にします。
OpenShift GitOps アドオンを有効にすると、次のデプロイメントモードが利用可能になります。
-
Basicモード:GitOpsClusterカスタムリソースを通じて、マネージドクラスターに OpenShift GitOps Operator とArgoCDインスタンスをデプロイします。 -
Agentモード: 強化されたプルベースのアーキテクチャー用のArgoCDエージェントとともに、すべての基本モードコンポーネントが含まれます。
選択したマネージドクラスターに対して OpenShift GitOps アドオンを有効にするには、Placement を参照し、有効化のインターフェイスとして GitOpsCluster カスタムリソースを使用します。
前提条件
ArgoCD エージェントで OpenShift GitOps アドオンを有効にする場合は、Agent モードを使用します。ArgoCD エージェントを伴う Red Hat OpenShift GitOps アドオンの有効化 を参照してください。
ArgoCD エージェントなしで OpenShift GitOps アドオンを有効にする場合は、Basic モードを使用します。ArgoCD エージェントなしで Red Hat OpenShift GitOps アドオンを有効にする を参照してください。
1.10.1. OpenShift GitOps アドオン設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps アドオンは、要件に応じてデプロイメントをカスタマイズするためのさまざまな設定オプションをサポートしています。
OpenShift GitOps アドオンは、gitopsAddon 仕様の次の設定オプションをサポートしています。
-
enabled: GitOps アドオンを有効または無効にします。デフォルトはfalseです。 -
gitOpsOperatorImage: GitOps Operator のカスタムコンテナーイメージ。 -
gitOpsImage:ArgoCDコンポーネントのカスタムコンテナーイメージ。 -
redisImage:Redisのカスタムコンテナーイメージ。 -
gitOpsOperatorNamespace: GitOps Operator がデプロイされる namespace。デフォルトはopenshift-gitops-operatorです。 -
gitOpsNamespace:ArgoCDインスタンスがデプロイされる namespace。デフォルトは `openshift-gitops` です。 -
reconcileScope:All-NamespacesまたはSingle-Namespaceを含むArgoCDリコンシリエーションスコープを制御します。デフォルト:Single-Namespaces。 -
overrideExistingConfigs: 既存のAddOnDeploymentConfig値をGitOpsCluster仕様の新しい値でオーバーライドします。アンインストール操作を実行するときはtrueに設定する必要があります。デフォルトはfalseです。 -
argoCDAgent:ArgoCDエージェント設定サブセクション。
Argo CD Agent は、argoCDAgent 仕様の次の設定オプションをサポートしています。
-
enabled: エージェントを有効または無効にします。デフォルトはfalseです。 -
propagateHubCA: ハブ認定機関 (CA) 証明書をマネージドクラスターに伝播します。デフォルトはtrueです。 -
image: カスタムエージェントコンテナーイメージ。 -
serverAddress:ArgoCDエージェントのプリンシパルサーバーアドレスをオーバーライドします。 -
serverPort:ArgoCDエージェントのプリンシパルサーバーポートをオーバーライドします。 -
mode: エージェントの操作モード。デフォルトはmanagedです。
OpenShift GitOps アドオン設定を行うには、ハブクラスターで次の手順を実行します。
GitOpsClusterを含む YAML サンプルを追加して、OpenShift GitOps コンポーネントのコンテナーイメージをカスタマイズします。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-custom-images namespace: openshift-gitops spec: argoServer: argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops gitopsAddon: enabled: true gitOpsOperatorImage: "registry.redhat.io/openshift-gitops-1/gitops-operator@sha256:..." gitOpsImage: "registry.redhat.io/openshift-gitops-1/argocd@sha256:..." redisImage: "registry.redhat.io/rhel8/redis-6@sha256:..."次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f gitopscluster-example.yamlGitOpsClusterに以下の YAML を追加し、OpenShift GitOps コンポーネントをデプロイする namespace をカスタマイズします。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-custom-namespaces namespace: openshift-gitops spec: argoServer: argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops gitopsAddon: enabled: true gitOpsOperatorNamespace: openshift-gitops-operator gitOpsNamespace: openshift-gitops次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f gitopscluster-example.yamlGitOpsClusterに次の YAML を追加して、ArgoCDエージェントがすべての namespace でアプリケーションをリコンサイルできるかどうかを指定します。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-reconcile-scope namespace: openshift-gitops spec: argoServer: argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops gitopsAddon: enabled: true reconcileScope:-
ArgoCDインスタンスにすべての namespace のアプリケーションをリコンサイルさせたい場合は、reconcileScopeフィールドにAll-Namespaces値を指定します。 -
ArgoCDインスタンスに独自の namespace のアプリケーションのみをリコンサイルさせたい場合は、reconcileScopeフィールドにSingle-Namespace値を指定します。
-
次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f gitopscluster-example.yaml
関連情報
不要な特定の OpenShift GitOps アドオン機能をスキップできます。OpenShift GitOps アドオンの適用をスキップする を参照してください。
OpenShift GitOps アドオンが機能することを検証するには、{gitops-short) アドオン機能の検証 を参照してください。
ArgoCD エージェントが機能することを検証するには、ArgoCD エージェント機能の検証 を参照してください。
OpenShift GitOps の詳細は、次のドキュメントを参照してください。
1.11. ArgoCD エージェントを伴う Red Hat OpenShift GitOps アドオンを有効にする リンクのコピーリンクがクリップボードにコピーされました!
プルモデルの Agent モードは、OpenShift GitOps アドオンを、ArgoCD エージェントを伴う Advanced プルモデル向けに有効化し、アプリケーションの健全性について詳細なステータスを取得できるようにします。この Agent モードは、ネットワーク制限やセキュリティー要件が強化されている環境、またはアプリケーション配信にプルモデルを実装する場合に使用します。高度なプルモデルは ArgoCD エージェントによって実行され、完全に自動化された OpenShift GitOps エクスペリエンスを提供します。
ArgoCD エージェントで OpenShift GitOps アドオンを有効にするには、次のセクションを完了します。
前提条件
- Red Hat Advanced Cluster Management ハブクラスターがインストールされている。
- Red Hat Advanced Cluster Management に登録されたマネージドクラスター
- ハブクラスターにインストールされた OpenShift GitOps Operator
-
ターゲットマネージドクラスターを選択するための
Placementリソース -
ターゲット namespace にバインドされた
ManagedClusterSet -
ArgoCDエージェント環境で設定された OpenShift GitOps Operator サブスクリプション -
Agentモード用に設定されたArgoCDカスタムリソース
1.11.1. サブスクリプションとリソースの設定 リンクのコピーリンクがクリップボードにコピーされました!
ArgoCD エージェントを有効にするには、OpenShift GitOps Operator のサブスクリプションと ArgoCD カスタムリソースを設定する必要があります。必要なサブスクリプションとリソースを設定するには、次の手順を実行します。
ハブクラスターでのみ、次のコマンドを実行して、OpenShift GitOps Operator サブスクリプションを変更し、必要な環境変数を含めます。
oc edit subscription gitops-operator -n openshift-gitops-operator次の YAML サンプルを追加して、次の環境変数を
spec.config.envファイルに追加します。spec: config: env: - name: ARGOCD_CLUSTER_CONFIG_NAMESPACES value: openshift-gitops - name: ARGOCD_PRINCIPAL_TLS_SERVER_ALLOW_GENERATE value: "false" - name: ARGOCD_PRINCIPAL_REDIS_SERVER_ADDRESS value: openshift-gitops-redis:6379次の YAML サンプルを追加して、既存の
ArgoCDカスタムリソースを互換性のあるAgentモード設定に置き換えます。apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops spec: controller: enabled: false argoCDAgent: principal: auth: mtls:CN=system:open-cluster-management:cluster:([^:]+):addon:gitops-addon:agent:gitops-addon-agent enabled: true namespaces: allowedNamespaces: - '*'次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f argocd-example.yaml-
注記: ハブクラスターのみで、この設定により従来の
ArgoCDコントローラーが無効になり、相互 TLS 認証を使用したエージェントプリンシパルが有効になります。
-
注記: ハブクラスターのみで、この設定により従来の
1.11.2. ArgoCD エージェントの有効化 リンクのコピーリンクがクリップボードにコピーされました!
ArgoCD エージェントアドオンのデプロイメントを管理するための GitOpsCluster リソースを作成します。コントローラーは、Placement によって選択された各マネージドクラスターに対して、以下のリソースを自動的に作成します。
GitOpsCluster コントローラーは、次の操作を実行します。
- PKI 管理を作成して自動化する
-
エージェントモード用に設定された
ArgoCDクラスターシークレットを作成する - 選択された各マネージドクラスターに Argo CD Agent をデプロイする
高度なプルモデル Argo CD Agent アーキテクチャーを有効にするには、次の手順を実行します。
マネージドクラスターで、次の YAML サンプルを追加して、
ArgoCDエージェントが有効になっているGitOpsCluster`リソースを作成します。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-agent-clusters namespace: openshift-gitops spec: argoServer: argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: production-clusters namespace: openshift-gitops gitopsAddon: enabled: true argoCDAgent: enabled: true次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f gitopscluster-example.yaml
1.11.3. ArgoCD のインストールの検証 リンクのコピーリンクがクリップボードにコピーされました!
ArgoCD エージェントが正常にデプロイされたら、ハブクラスターにアプリケーションを作成し、それがマネージドクラスターで動作することを確認することで、高度な Pull Model ワークフローが完了したことを確認します。
正常なデプロイメントに必要なインストールとリソースを確認するには、次の手順を実行します。
次のコマンドを実行して、特定の
Agent条件のGitOpsClusterステータスを確認します。oc get gitopscluster gitops-agent-clusters -n openshift-gitops -o jsonpath='{.status.conditions}' | jqステータスに次の条件タイプが表示されていることを確認します。
-
Ready:GitOpsClusterの準備が完了し、すべてのコンポーネントが機能しています。 -
PlacementResolved:Placement参照が解決され、マネージドクラスターが取得済みです。 -
ClustersRegistered: マネージドクラスターがArgoCDサーバーに正常に登録されています。 -
AddOnDeploymentConfigsReady: すべてのマネージドクラスターに対してAddOnDeploymentConfigsが作成済みです。 -
ManagedClusterAddOnsReady:ManagedClusterAddonsは、マネージドクラスターを作成および更新します。 -
AddOnTemplateReady:ArgoCDエージェントモード用に作成された動的AddOnTemplate。 -
ArgoCDAgentPrereqsReady: エージェントの前提条件がセットアップされています。 -
CertificatesReady: TLS 証明書が署名されています。 -
ManifestWorksApplied: マネージドクラスターに伝播された CA 証明書。
-
次の YAML ファイルを追加して、マネージドクラスター namespace に
ArgoCDアプリケーションリソースを作成します。apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook namespace: <managed cluster name> spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: server: https://<principal-external-ip:port>?agentName=<managed cluster name> namespace: guestbook syncPolicy: automated: prune: true selfHeal: true次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f application-example.yamlマネージドクラスターで、次のコマンドを実行して、アプリケーションリソースがデプロイされていることを確認します。
oc get all -n guestbookハブクラスターで次のコマンドを実行して、アプリケーションステータスが反映されていることを確認します。
oc get application guestbook -n <managed cluster name>-
アプリケーションが正常にデプロイされたら、ステータスが
Syncedと表示されていることを確認します。
関連情報
Red Hat OpenShift GitOps アドオンの管理 を完了して、OpenShift GitOps アドオンのセットアップを続行します。
1.12. ArgoCD エージェントなしで Red Hat OpenShift GitOps アドオンを有効にする リンクのコピーリンクがクリップボードにコピーされました!
プルモデルの Basic モードには ArgoCD エージェントが含まれていないため、プルモデルではハブクラスター管理のセットアップが簡素化され、ハブクラスターの正常性に関する必要なステータスのみが提供されます。このモードでは、Placement で選択したマネージドクラスターに対して OpenShift GitOps アドオンが有効になります。
アドオンの有効化後、Basic モードは、クラスターのワークフローに適した OpenShift GitOps ArgoCD コンポーネントをデプロイします。
前提条件
- Red Hat Advanced Cluster Management ハブクラスターがインストールされている。
- Red Hat Advanced Cluster Management に登録されているマネージドクラスター
- ハブクラスターにインストールされた OpenShift GitOps Operator
-
ターゲットマネージドクラスターを選択するために定義された
Placementリソース -
ターゲット namespace にバインドされた
ManagedClusterSet
ArgoCD エージェントなしで OpenShift GitOps アドオンを有効にするには、次のセクションを完了します。
1.12.1. GitOpsCluster リソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
基本的なプルモデルを有効にするには、GitOpsCluster リソースを作成します。コントローラーは、Placement ポリシーによって選択されたマネージドクラスターごとに、次のリソースを自動的に作成します。
-
マネージドクラスター namespace 内の
AddOnDeploymentConfigリソース -
マネージドクラスター namespace 内の
ManagedClusterAddOnリソース
Red Hat OpenShift GitOps アドオンは、選択された各マネージドクラスターにデプロイされ、次のリソースがインストールされます。
-
openshift-gitops-operatornamespace の OpenShift GitOps Operator -
openshift-gitopsnamespace の ArgoCD インスタンス
GitOpsCluster リソースを作成するには、次の手順を実行します。
ハブクラスターで、次の YAML サンプルを追加して、Red Hat OpenShift GitOps アドオンを有効にする
GitOpsClusterリソースを作成します。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-clusters namespace: openshift-gitops spec: argoServer: argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops gitopsAddon: enabled: true次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f gitopscluster-example.yaml
1.12.2. インストールの検証 リンクのコピーリンクがクリップボードにコピーされました!
正常なデプロイメントに必要なインストールとリソースを確認するには、次の手順を実行します。
次のコマンドを実行して、
GitOpsClusterリソースにデプロイメントが成功したことを示すステータスがあることを確認します。oc get gitopscluster gitops-clusters -n openshift-gitops -o yaml次のコマンドを実行して、OpenShift GitOps アドオンコントローラーが動作していることを確認します。
oc get pods -n open-cluster-management-agent-addon次のコマンドを実行して、OpenShift GitOps Operator が動作していることを確認します。
oc get pods -n openshift-gitops-operator次のコマンドを実行して、
ArgoCD`インスタンスが動作していることを確認します。oc get pods -n openshift-gitops
関連情報
Red Hat OpenShift GitOps アドオンの管理 を完了して、OpenShift GitOps アドオンのセットアップを続行します。
1.13. OpenShift GitOps アドオンの適用をスキップする リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps アドオンは、一貫性を維持するために、マネージドクラスターに特定のリソースを適用します。マネージドクラスター上の特定のリソースに gitops-addon.open-cluster-management.io/skip アノテーションを追加することで、特定のリソースに対する適用をスキップできます。強制をスキップすると、アドオンが管理する ArgoCD カスタムリソースやその他の OpenShift GitOps コンポーネントをカスタマイズする必要がある場合に役立ちます。
マネージドクラスター上のリソースにスキップアノテーションが付いている場合、OpenShift GitOps アドオンはそのリソースを更新または管理しません。アドオンは変更を適用する前にこのアノテーションをチェックし、アドオンのデフォルト設定とは異なるカスタム設定を維持できるようにします。
注記: スキップアノテーションを使用する場合は、カスタム設定が OpenShift GitOps アドオンの要件と互換性があることを確認してください。適用をスキップすると、OpenShift GitOps アドオンはこれらのリソースを管理またはリコンサイルしないため、一貫性と正確性を維持する責任はユーザーにあります。
リソースの適用をスキップするには、マネージドクラスターの ArgoCD カスタムリソースに次のアノテーションを追加します。
metadata:
Annotations:
gitops-addon.open-cluster-management.io/skip: "true"
大規模なマネージドクラスター全体でスキップアノテーションを管理するために、Red Hat Advanced Cluster Management Policy を使用して、そのアノテーションをフリート全体に適用します。
1.13.1. ArgoCD カスタムリソースをカスタマイズして強制をスキップする リンクのコピーリンクがクリップボードにコピーされました!
ArgoCD カスタムリソースのカスタマイズは、リソース制限を調整したり、特定の設定を行ったり、追加機能を有効にしたりするための一般的なユースケースです。
ArgoCD カスタムリソースをカスタマイズして適用をスキップするには、次の手順を実行します。
マネージドクラスターで、
ArgoCDカスタムリソースを編集します。oc edit argocd openshift-gitops -n openshift-gitops次の YAML に示されるように、
gitops-addon.open-cluster-management.io/skipアノテーションを追加し、trueに設定します。apiVersion: argoproj.io/v1beta1 kind: ArgoCD metadata: name: openshift-gitops namespace: openshift-gitops annotations: gitops-addon.open-cluster-management.io/skip: "true"次のコマンドを実行して、YAML サンプルを適用します。
oc apply -f argocd-example.yamlオプション: 次の YAML サンプルを追加して、
GitOpsClusterがAddOnDeploymentConfig仕様で保持する既存の設定値をオーバーライドします。apiVersion: apps.open-cluster-management.io/v1beta1 kind: GitOpsCluster metadata: name: gitops-override-config namespace: openshift-gitops spec: argoServer: argoNamespace: openshift-gitops placementRef: kind: Placement apiVersion: cluster.open-cluster-management.io/v1beta1 name: all-openshift-clusters namespace: openshift-gitops gitopsAddon: enabled: true overrideExistingConfigs: true gitOpsImage: "registry.redhat.io/openshift-gitops-1/argocd@sha256:..."次のコマンドを実行して YAML サンプルを適用します。
oc apply -f gitopscluster-example.yaml
関連情報
OpenShift GitOps アドオンを完全にアンインストールする場合は、OpenShift GitOps アドオンのアンインストール を参照してください。
1.14. OpenShift GitOps アドオンのアンインストール リンクのコピーリンクがクリップボードにコピーされました!
Operator と GitOpsCluster リソースを含む OpenShift GitOps アドオンを完全にアンインストールするには、次の手順を実行します。
次のコマンドを実行して、
GitOpsClusterリソースを削除します。oc delete gitopscluster gitops-clusters -n openshift-gitops次のコマンドを実行して、
ManagedClusterAddOnリソースを削除します。oc -n <managed_cluster_namespace> delete managedclusteraddon gitops-addon次のコマンドを実行して、
ManagedClusterAddOnリソースがマネージドクラスターの namespace から削除されていることを確認します。oc get managedclusteraddon gitops-addon -n <managed-cluster-name>
1.15. {gitops-short) アドオン機能の検証 リンクのコピーリンクがクリップボードにコピーされました!
次のセクションを完了することで、OpenShift GitOps アドオン機能が動作することを確認できます。
1.15.1. GitOpsCluster ステータスの検証 リンクのコピーリンクがクリップボードにコピーされました!
GitOpsCluster のステータスを確認するには、次の手順を実行します。
次のコマンドを実行して、
GitOpsClusterリソースのステータスを表示します。oc get gitopscluster <gitopscluster-name> -n openshift-gitops -o yaml次のコマンドを実行して、特定の障害情報のステータス条件を確認します。
oc get gitopscluster <gitopscluster-name> -n openshift-gitops -o jsonpath='{.status.conditions}' | jq
確認するには、次の一般的な条件タイプを参照してください。
-
Ready:GitOpsCluster全体の健全性 -
PlacementResolved:Placementリソースのステータス -
ClustersRegistered: クラスター登録ステータス -
ArgoCDAgentPrereqsReady: エージェントの前提条件 (エージェントを有効にした場合) -
CertificatesReady: エージェントを有効にしている場合の TLS 証明書のステータス。 -
ManifestWorksApplied: エージェントを有効にしている場合のManifestWork伝播ステータス。
1.15.2. OpenShift GitOps アドオンコントローラーのログの検証 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps アドオンコントローラーのログを確認するには、次の手順を実行します。
- マネージドクラスターに移動します。
次のコマンドを実行して、OpenShift GitOps アドオンコントローラーのログを確認します。
oc logs -n open-cluster-management-agent-addon -l app=gitops-addon
1.15.3. OpenShift GitOps Operator の検証 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift GitOps Operator が機能することを確認するには、次の手順を実行します。
次のコマンドを実行して、Operator が動作していることを確認します。
oc get pods -n openshift-gitops-operator次のコマンドを実行して、Operator のログを確認します。
oc logs -n openshift-gitops-operator -l control-plane=controller-manager
1.16. ArgoCD エージェント機能の検証 リンクのコピーリンクがクリップボードにコピーされました!
ArgoCD エージェントを使用する場合は、それが動作することを確認する必要があります。ArgoCD インスタンスが動作していることを確認するには、次の手順を実行します。
次のコマンドを実行して、Argo CD コンポーネントが動作していることを確認します。
oc get pods -n openshift-gitops次のコマンドを実行して、
ArgoCDアプリケーションコントローラーのログを確認します。oc logs -n openshift-gitops -l app.kubernetes.io/name=argocd-application-controller
ArgoCD エージェントを有効にしている場合は、次の手順を実行して動作していることを確認します。
次のコマンドを実行して、エージェントが動作していることを確認します。
oc get pods -n openshift-gitops次のコマンドを実行して、エージェントログが機能していることを確認します。
oc logs -n openshift-gitops次のコマンドを実行して、
ManifestWorkのステータスが証明書認証局 (CA) の伝播のために設定されていることを確認してくださいoc get manifestwork -n <managed-cluster-name> argocd-agent-ca-propagation -o yaml
1.17. ApplicationSet リソースを使用した段階的なロールアウトストラテジーの実装 (テクノロジープレビュー) リンクのコピーリンクがクリップボードにコピーされました!
プッシュモデルとプルモデルの両方について、クラスターフリート内のアプリケーションに段階的なロールアウトストラテジーを実装することで、クラスターフリート全体にわたって安全に変更を加える Red Hat OpenShift GitOps ベースのプロセスが実現します。ロールアウトストラテジーを使用すると、さまざまなクラスター間で段階的な更新を調整できます。さらに、開発や製品クラスターなど、ラベルで定義されたグループ全体に変更を促進できます。
アプリケーションへの段階的なロールアウトストラテジーに ApplicationSet リソースを使用すると、ApplicationSet コントローラーはアプリケーションのクラスターをグループに編成します。コントローラーは、Argo CD ヘルスサイクルを通じて一度に 1 つのグループを処理し、ステータスが Healthy である場合にのみグループを使用可能にします。
ApplicationSet リソースを使用して段階的なロールアウトストラテジーを実装する方法の詳細は、次のセクションを確認してください。
1.17.1. ApplicationSet リソースを使用して段階的なロールアウトストラテジーを有効にする リンクのコピーリンクがクリップボードにコピーされました!
ApplicationSet リソースで段階的なロールアウトストラテジーを有効にするには、次の手順を実行します。
-
ハブクラスターで、
openshift-gitopsnamespace の OpenShift GitOps Operator インスタンス設定を更新します。 次のコマンドを実行して、
ApplicationSetリソースの段階的な同期を有効にします。oc -n openshift-gitops patch argocd openshift-gitops --type='merge' -p '{"spec":{"applicationSet":{"extraCommandArgs":["--enable-progressive-syncs"]}}}'-
openshift-gitopsnamespace でopenshift-gitops-applicationset-controllerデプロイメントを再起動します。 次のコマンドを実行して、更新された OpenShift GitOps Operator インスタンス設定を適用し、新しいロールアウトを作成します。
oc -n openshift-gitops rollout restart deployment openshift-gitops-applicationset-controller
1.17.2. 段階的なロールアウトストラテジーのサンプル ApplicationSet リソースを理解する リンクのコピーリンクがクリップボードにコピーされました!
ストラテジー仕様を確認して、段階的なロールアウトストラテジーを実装する Argo CD プルモデルを使用したサンプル ApplicationSet を理解します。この YAML は、段階的なロールアウトストラテジーを有効にします。ハブクラスターに strategy パラメーターセクションを追加すると、クラスターを個別に更新するのではなく、完全に同時に更新できるようになります。
たとえば、次の ApplicationSet リソースでストラテジーがどのように定義されているかを確認します。
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: guestbook-allclusters-app-set
namespace: openshift-gitops
spec:
generators:
- clusterDecisionResource:
configMapRef: ocm-placement-generator
labelSelector:
matchLabels:
cluster.open-cluster-management.io/placement: aws-app-placement
requeueAfterSeconds: 30
strategy:
type: RollingSync
rollingSync:
steps:
- name: dev-stage
matchExpressions:
- key: envLabel
operator: In
values: [env-dev]
maxUpdate: 100%
- name: qa-stage
matchExpressions:
- key: envLabel
operator: In
values: [env-qa]
maxUpdate: 100%
- name: prod-stage
matchExpressions:
- key: envLabel
operator: In
values: [env-prod]
maxUpdate: 100%
template:
preserveFields:
- metadata.labels.envLabel
metadata:
annotations:
apps.open-cluster-management.io/ocm-managed-cluster: '{{name}}'
apps.open-cluster-management.io/ocm-managed-cluster-app-namespace: openshift-gitops
argocd.argoproj.io/skip-reconcile: "true"
labels:
apps.open-cluster-management.io/pull-to-ocm-managed-cluster: "true"
name: '{{name}}-guestbook-app'
spec:
destination:
namespace: guestbook
server: https://kubernetes.default.svc
project: default
sources:
- repoURL: https://github.com/argoproj/argocd-example-apps.git
targetRevision: main
path: guestbook
syncPolicy:
syncOptions:
- CreateNamespace=true
- 1
preserveFieldsパラメーターを使用して、ApplicationSetコントローラーが無視する必要があるラベルをリストします。必要なラベルを手動で適用できます (例:envLabel=env-qa)。このフィールドがない場合、ApplicationSetコントローラーはテンプレートに定義されていないラベルを上書きまたは削除します。
1.17.3. 段階的なブロールアウトストラテジーを使用するアプリケーションのラベルを理解する リンクのコピーリンクがクリップボードにコピーされました!
ロールアウトストラテジーは、Argo CD ヘルスサイクル全体で一度に 1 つのアプリケーショングループを処理するために使用されます。コントローラーは、アプリケーションオブジェクトに設定されたラベルを照合して、これらのアプリケーショングループを整理します。
ロールアウトストラテジーを使用しているすべてのアプリケーションに必要なプロモーション順序を指定する一意のラベルがあることを確認します。以下の例を参照してください。
たとえば、ハブクラスターで次のコマンドを実行すると、アプリケーションに一意のラベルを付けることができます。
oc -n openshift-gitops label applications.argoproj.io/cluster1-guestbook-app envLabel=env-dev品質保証のアプリケーションを指定する場合は、次のコマンドを実行します。
oc -n openshift-gitops label applications.argoproj.io/cluster2-guestbook-app envLabel=env-qa- 製品のアプリケーショングループを指定する場合は、次のコマンドを実行します。
oc -n openshift-gitops label applications.argoproj.io/cluster3-guestbook-app envLabel=env-prod
1.17.4. 段階的なブロールアウトストラテジーを使用する Git リポジトリーの変更を理解する リンクのコピーリンクがクリップボードにコピーされました!
クラスターフリート上の ApplicationSet リソースの段階的なロールアウトストラテジーを開始するために、Argo CD アプリケーションは Git リポジトリーでコミットされた変更を確認します。コミットされた変更がある場合、段階的なロールアウトストラテジーが開始されます。
Argo CD がロールアウトストラテジーを開始すると、ApplicationSet コントローラーは OutOfSync ステータスのアプリケーションを検出し、段階的なロールアウトのためにアプリケーションをスケジュールします。アプリケーショングループに使用するラベルに基づいて、ApplicationSet コントローラーは env-dev アプリケーショングループで最初の RollingSync ステップを開始します。
Argo CD のヘルスサイクルから、各アプリケーショングループのステータスが OutOfSync から Healthy に移行するのを確認できます。すべてのアプリケーショングループのステータスが Healthy になったら、ApplicationSet コントローラーは env-qa ラベルのアプリケーショングループを同期し、次に env-prod ラベルのアプリケーショングループを同期します。最後の env-prod アプリケーショングループのステータスが Healthy になると、段階的なロールアウトストラテジーが自動的に完了し、クラスターフリートでそのストラテジーが完全に実行されます。