1.4.6.3.4. Git リポジトリーのサブスクリプションの例
1.4.6.3.4.1. Git リポジトリーの特定ブランチおよびディレクトリーのサブスクライブ
apiVersion: apps.open-cluster-management.io/v1 kind: Subscription metadata: name: sample-subscription namespace: default annotations: apps.open-cluster-management.io/git-path: sample_app_1/dir1 apps.open-cluster-management.io/git-branch: branch1 spec: channel: default/sample-channel placement: placementRef: kind: PlacementRule name: dev-clusters
このサブスクリプションの例では、apps.open-cluster-management.io/git-path
のアノテーションは、チャネルに指定されている Git リポジトリーの sample_app_1/dir1
ディレクトリーにある Helm チャートと Kubernetes リソースすべてを、サブスクリプションがサブスクライブするように指定します。サブスクリプションは、デフォルトで master
ブランチにサブスクライブします。このサブスクリプションの例では、apps.open-cluster-management.io/git-branch: branch1
のアノテーションを指定して、リポジトリーの branch1
ブランチをサブスクライブしています。
1.4.6.3.4.2. .kubernetesignore
ファイルの追加
Git リポジトリーの root ディレクトリーまたは、サブスクリプションのアノテーションで指定した apps.open-cluster-management.io/git-path
ディレクトリーに .kubernetesignore
ファイルを追加できます。
この .kubernetesignore
ファイルを使用して、サブスクリプションがリポジトリーから Kubernetes リソースか、Helm チャートをデプロイするときに無視するファイルまたはサブディレクトリー、あるいは両方を指定することができます。
また、.kubernetesignore
ファイいるを使用して、詳細に絞り込み、選択した Kubernetes リソースだけを適用することも可能です。.kubernetesignore
ファイルのパターン形式は、.gitignore
ファイルと同じです。
apps.open-cluster-management.io/git-path
アノテーション外定義されていない場合には、サブスクリプションは、リポジトリーの root ディレクトリーで .kubernetesignore
ファイルを検索します。apps.open-cluster-management.io/git-path
フィールドが定義されている場合には、サブスクリプションは apps.open-cluster-management.io/github-path
ディレクトリーで .kubernetesignore
ファイルを検索します。サブスクリプションは、他のディレクトリーでは .kubernetesignore
ファイルの検索は行いません。
1.4.6.3.4.3. Kustomize の適用
サブスクライブする Git のフォルダーに kustomization.yaml
または kustomization.yml
ファイルがある場合には、kustomize が適用されます。
spec.packageOverrides
を使用して、サブスクリプションのデプロイメント時に kustomization
を上書きできます。
apiVersion: apps.open-cluster-management.io/v1 kind: Subscription metadata: name: example-subscription namespace: default spec: channel: some/channel packageOverrides: - packageName: kustomization packageOverrides: - value: | patchesStrategicMerge: - patch.yaml
kustomization.yaml
ファイルを上書きするには、packageOverrides
に packageName: kustomization
が必要です。上書きは、新規エントリーを追加するか、既存のエントリーを更新します。既存のエントリーは削除されません。
1.4.6.3.4.4. GitHub Webhook の有効化
デフォルトでは、Git チャネルのサブスクリプションは、チャネルで指定されている GitHub リポジトリーを 1 分毎にクローンし、コミット ID が変更されたら、変更が適用されます。または、リポジトリーのプッシュまたはプルの Webhook イベント通知を Git リポジトリーが送信する場合にのみ、変更を適用するようにサブスクリプションを設定できます。
Git リポジトリーで Webhook を設定するには、ターゲット Webhook ペイロード URL と、シークレット (任意) が必要です。
1.4.6.3.4.4.1. ペイロード URL
ハブクラスターでルート (ingress) を作成し、サブスクリプション Operator の Webhook イベントリスナーサービスを公開します。
oc create route passthrough --service=multicluster-operators-subscription -n open-cluster-management
次に、oc get route multicluster-operators-subscription -n open-cluster-management
コマンドを使用して、外部からアクセスできるホスト名を見つけます。webhook のペイロード URL は https://<externally-reachable hostname>/webhook
です。
1.4.6.3.4.4.2. Webhook シークレット
Webhook シークレットは任意です。チャネル namespace に Kubernetes Secret を作成します。シークレットには data.secret
を含める必要があります。以下の例を参照してください。
apiVersion: v1 kind: Secret metadata: name: my-github-webhook-secret data: secret: BASE64_ENCODED_SECRET
data.secret
の値は、使用する base-64 でエンコードされた WebHook シークレットに置き換えます。
ベストプラクティス: Git リポジトリーごとに一意のシークレットを使用してください。
1.4.6.3.4.4.3. Git リポジトリーでの Webhook の設定
ペイロード URL および Webhook シークレットを使用して Git リポジトリーで Webhook を設定します。
1.4.6.3.4.4.4. チャネルでの Webhook イベント通知の有効化
サブスクリプションチャネルにアノテーションを追加します。以下の例を参照してください。
oc annotate channel.apps.open-cluster-management.io <channel name> apps.open-cluster-management.io/webhook-enabled="true"
WebHook の設定にシークレットを使用した場合には、これについても、チャネルにアノテーションを付けます。<the_secret_name>
は Webhook シークレットを含む Kubernetes Secret 名に置き換えます。
oc annotate channel.apps.open-cluster-management.io <channel name> apps.open-cluster-management.io/webhook-secret="<the_secret_name>"
1.4.6.3.4.4.5. Webhook 対応のチャネルのサブスクリプション
サブスクリプションには Webhook 固有の設定は必要ありません。