1.4. アプリケーションの詳細設定
Red Hat Advanced Cluster Management for Kubernetes では、アプリケーションは複数のアプリケーションリソースで構成されています。チャネル、サブスクリプション、および配置ルールリソースを使用すると、アプリケーション全体のデプロイ、更新、および管理に役立ちます。
単一クラスターアプリケーションもマルチクラスターアプリケーションも同じ Kubernetes 仕様を使用しますが、マルチクラスターアプリケーションでは、デプロイメントおよびアプリケーション管理ライフサイクルがさらに自動化されます。
Red Hat Advanced Cluster Management for Kubernetes アプリケーションのアプリケーションコンポーネントリソースはすべて、YAML ファイルの仕様セクションで定義します。アプリケーションコンポーネントリソースを作成または更新する必要がある場合は、適切な仕様セクションを作成してリソースを定義するラベルを追加する必要があります。
以下のアプリケーション詳細設定のトピックを確認してください。
1.4.1. Git リソースのサブスクライブ リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、サブスクリプションを使用してサブスクライプされているアプリケーションをターゲットクラスターにデプロイすると、アプリケーションリソースが別の namespace に関連付けられている場合でも、このアプリケーションはこのサブスクリプション namespace にデプロイされます。このトピックで説明するように、サブスクリプション管理者は、デフォルトの動作を変更できます。
また、アプリケーションリソースがクラスターに存在しており、サブスクリプションを使用して作成されていない場合には、このサブスクリプションではその既存リソースに対して新しいリソースを適用できません。サブスクリプション管理者としてデフォルト設定を変更するには、以下のプロセスを参照してください。
必要なアクセス権限: クラスターの管理者
1.4.1.1. ユーザーとグループのサブスクリプション管理権限の付与 リンクのコピーリンクがクリップボードにコピーされました!
サブスクリプションの管理者権限を付与する方法について説明します。
- コンソールから OpenShift Container Platform クラスターにログインします。
ユーザーを 1 つ以上作成します。ユーザー作成に関する詳細は、「ユーザー向けの準備」を参照してください。
app.open-cluster-management.io/subscriptionアプリケーションの管理者として、ユーザーを作成します。OpenShift Container Platform では、サブスクリプション管理者はデフォルトの動作を変更できます。これらのユーザーをグループ化してサブスクリプション管理グループを表すことができます。これについては、後ほど例説します。- ターミナルから、Red Hat Advanced Cluster Management クラスターにログインします。
以下のコマンドで、次のサブジェクトを
open-cluster-management:subscription-adminClusterRoleBinding に追加します。oc edit clusterrolebinding open-cluster-management:subscription-admin注記:
open-cluster-management:subscription-adminClusterRoleBinding にはサブジェクトは初期設定されていません。サブジェクトは以下の例のように表示されます。
subjects: - apiGroup: rbac.authorization.k8s.io kind: User name: example-name - apiGroup: rbac.authorization.k8s.io kind: Group name: example-group-name
1.4.1.2. Git でのアプリケーションリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
サブスクライブ時に、リソース YAML で apiVersion の完全グループおよびバージョンを指定する必要があります。たとえば、apiVersion: v1 にサブスクライブすると、サブスクリプションコントローラーがサブスクリプションの検証に失敗し、エラーメッセージ Resource /v1, Kind=ImageStream is not supported が表示されます。
以下の例にあるように、apiVersion を image.openshift.io/v1 に変更すると、サブスクリプションコントローラーの検証を渡し、リソースが正常に適用されます。
apiVersion: `image.openshift.io/v1`
kind: ImageStream
metadata:
name: default
namespace: default
spec:
lookupPolicy:
local: true
tags:
- name: 'latest'
from:
kind: DockerImage
name: 'quay.io/repository/open-cluster-management/multicluster-operators-subscription:community-latest'
次に、サブスクリプション管理者がデフォルト動作を変更する有用な例を確認します。
1.4.1.3. アプリケーション namespace の例 リンクのコピーリンクがクリップボードにコピーされました!
この例では、サブスクリプション管理者としてログインします。サブスクリプションを作成して、サンプルのリソース YAML ファイルを Git リポジトリーからサブスクライブします。このサンプルファイルには、以下の異なる namespace にあるサブスクリプションが含まれます。
適用可能なチャネルタイプ: Git
-
ConfigMap
test-configmap-1はmultinsnamespace に作成されます。 -
ConfigMap
test-configmap-2はdefaultnamespace に作成されます。 ConfigMap
test-configmap-3はsubscriptionnamespace に作成されます。--- apiVersion: v1 kind: Namespace metadata: name: multins --- apiVersion: v1 kind: ConfigMap metadata: name: test-configmap-1 namespace: multins data: path: resource1 --- apiVersion: v1 kind: ConfigMap metadata: name: test-configmap-2 namespace: default data: path: resource2 --- apiVersion: v1 kind: ConfigMap metadata: name: test-configmap-3 data: path: resource3
他のユーザーがサブスクリプションを作成した場合には、ConfigMap がすべて、サブスクリプションと同じ namespace に作成されます。
1.4.1.4. リソース上書きの例 リンクのコピーリンクがクリップボードにコピーされました!
適用可能なチャネルタイプ: Git、ObjectBucket (コンソールのオブジェクトストレージ)
この例では、以下の ConfigMap はすでにターゲットクラスターにあります。
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
name: user1
age: 19
Git リポジトリーから、以下のリソース YAML ファイル例をサブスクライブして、既存の ConfigMap を置き換えます。data 仕様の変更を参照してください。
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
age: 20
1.4.1.4.1. デフォルトのマージオプション リンクのコピーリンクがクリップボードにコピーされました!
デフォルトの apps.open-cluster-management.io/reconcile-option: merge アノテーションを使用して、Git リポジトリーから以下のサンプルリソースの YAML ファイルを表示します。以下の例を参照してください。
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: subscription-example
namespace: sub-ns
annotations:
apps.open-cluster-management.io/git-path: sample-resources
apps.open-cluster-management.io/reconcile-option: merge
spec:
channel: channel-ns/somechannel
placement:
placementRef:
name: dev-clusters
サブスクリプション管理者がこのサブスクリプションを作成し、そのサブスクリプションで ConfigMap リソースをサブスクライブする場合には、以下の例のように既存の ConfigMap をマージします。
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
name: user1
age: 20
merge オプションを使用すると、サブスクライブしているリソースのエントリーが、既存のリソースで作成または更新されます。既存のリソースからエントリーは削除されません。
重要: サブスクリプションで上書きする既存のリソースが自動的に別の Operator またはコントローラーで調整される場合は、リソース設定はサブスクリプションとコントローラーの両方、または Operator により更新されます。このような場合には、この方法を使用しないでください。
1.4.1.4.2. replace オプション リンクのコピーリンクがクリップボードにコピーされました!
サブスクリプション管理者としてログインして、apps.open-cluster-management.io/reconcile-option: replace アノテーションを付けてサブスクリプションを作成します。以下の例を参照してください。
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: subscription-example
namespace: sub-ns
annotations:
apps.open-cluster-management.io/git-path: sample-resources
apps.open-cluster-management.io/reconcile-option: replace
spec:
channel: channel-ns/somechannel
placement:
placementRef:
name: dev-clusters
サブスクリプション管理者がこのサブスクリプションを作成し、そのサブスクリプションで ConfigMap リソースをサブスクライブする場合には、既存の ConfigMap を以下に置き換えます。
apiVersion: v1
kind: ConfigMap
metadata:
name: test-configmap-1
namespace: sub-ns
data:
age: 20
1.4.1.4.3. 調整オプション リンクのコピーリンクがクリップボードにコピーされました!
個々のリソースで apps.open-cluster-management.io/reconcile-option アノテーションを使用して、サブスクリプションレベルの調整オプションを上書きすることもできます。
たとえば、apps.open-cluster-management.io/reconcile-option: replace アノテーションをサブスクリプションに追加し、サブスクライブされた Git リポジトリーのリソース YAML に apps.open-cluster-management.io/reconcile-option: merge アノテーションを追加すると、そのリソースはターゲットクラスターにマージされます。その他のリソースは置き換えられます。
1.4.1.4.3.1. 調整頻度 リンクのコピーリンクがクリップボードにコピーされました!
チャネル設定で、不要なリソースの調整を回避するために調整頻度オプション (high、medium、low、および off) を選択できるようになりました。これにより、サブスクリプション Operator のオーバーロードを防ぐことができます。
必要なアクセス: 管理者およびクラスター管理者である必要があります。
settings:attribute:<value> に関する以下の定義を参照してください。
-
Off: デプロイされたリソースは自動的に調整されません。サブスクリプションカスタムリソースを変更すると、調整がトリガーされます。ラベルまたはアノテーションを追加または更新できます。 -
Low: ソースの Git リポジトリーに変更がない場合でも、デプロイされたリソースは 1 時間ごとに自動調整されます。 -
Medium: これはデフォルトの設定です。サブスクリプション Operator は、3 分ごとに現在デプロイされているコミット ID をソースリポジトリーの最新コミット ID と比較し、変更がある場合はターゲットクラスターに変更を適用します。リポジトリーに変更がない場合でも、すべてのリソースは 15 分ごとにソース Git リポジトリーからターゲットクラスターに再適用されます。 -
High: ソースの Git リポジトリーに変更がない場合でも、デプロイされたリソースは 2 分ごとに自動調整されます。
これは、サブスクリプションによって参照されるチャネルカスタムリソースの apps.open-cluster-management.io/reconcile-rate アノテーションを使用して設定できます。
以下の例を参照してください。
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: git-channel
namespace: sample
annotations:
apps.open-cluster-management.io/reconcile-rate: <value from the list>
spec:
type: GitHub
pathname: <Git URL>
---
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: git-subscription
annotations:
apps.open-cluster-management.io/git-path: <application1>
apps.open-cluster-management.io/git-branch: <branch1>
spec:
channel: sample/git-channel
placement:
local: true
上記の例では、sample/git-channel を使用するすべてのサブスクリプションの調整頻度は low になります。
チャネルの reconcile-rate 設定に関係なく、サブスクリプションは、サブスクリプション CR の apps.open-cluster-management.io/reconcile-rate: off アノテーションを指定して、自動調整を off に設定できます。
以下のサンプルを参照してください。
apiVersion: apps.open-cluster-management.io/v1
kind: Channel
metadata:
name: git-channel
namespace: sample
annotations:
apps.open-cluster-management.io/reconcile-rate: high
spec:
type: GitHub
pathname: <Git URL>
---
apiVersion: apps.open-cluster-management.io/v1
kind: Subscription
metadata:
name: git-subscription
annotations:
apps.open-cluster-management.io/git-path: application1
apps.open-cluster-management.io/git-branch: branch1
apps.open-cluster-management.io/reconcile-rate: "off"
spec:
channel: sample/git-channel
placement:
local: true
チャネルで reconcile-rate が high に設定されている場合でも、git-subscription によってデプロイされたリソースが自動調整されないことを確認します。