cap-operator について
CAP Operator を通じて Kubernetes 上のマルチテナント SAP Cloud Application Programming Model アプリを運用するスキルです。ライフサイクル管理、リソースの安全規則、トラブルシューティングに加え、段階を分けた Helm チャート生成とデプロイを扱います。
主な機能
- 01CAP アプリのライフサイクル管理
- 02ドメインとサービス公開の設定
- 03新しいリソースによるバージョン更新
- 04リソース状態の確認と問題調査
- 05段階的な確認を伴う Helm チャート生成
活用シーン
- 01新しい CAP アプリのデプロイ
- 02テナント全体のアプリ更新
- 03テナントとサブスクリプション状態の確認
- 04Operator とアプリの問題診断
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sap/ cap-operator --skill cap-operatorインストール後、Claude Code で/cap-operatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/cap-operator-plugin.mdcredential-rotation.mddeploy.mddomain.mdservice-exposure.mdtroubleshooting.mdupgrade.md詳細
CAP Operator スキル
CAP Operator コントローラーを介して、Kubernetes 上のマルチテナント SAP Cloud Application Programming Model(CAP)アプリケーションのライフサイクルを管理します。
回答ルール: 質問に回答する際は、関連するページへのリンクを必ず含めてください。リンク先は https://sap.github.io/cap-operator/docs/ にあるページとします。トピックに最も適した、できるだけ具体的なページ(リソースリファレンス、使用ガイド、トラブルシューティング、設定など)を選んでください。
ドキュメントと API リファレンスの全文:website/content/en/docs/ | https://sap.github.io/cap-operator/docs/
カスタムリソース
| リソース | スコープ | 目的 |
|---|---|---|
CAPApplication | 名前空間 | 高レベルのアプリ:BTP サービス、ドメイン参照、プロバイダーサブアカウント |
CAPApplicationVersion | 名前空間 | 不変のバージョン:イメージ、ワークロード、テナント操作手順 |
CAPTenant | 名前空間 | サブスクライブ済みのコンシューマーテナント — コントローラーのみが管理 |
CAPTenantOperation | 名前空間 | プロビジョニング/アップグレード/プロビジョニング解除を調整 — 自動作成 |
Subscription | 名前空間 | 1 つのコンシューマーサブスクリプションを表す — サブスクリプションサーバーが作成 |
SubscriptionProvider | 名前空間 | サブスクリプションの認証情報と依存関係情報をキャッシュ — コントローラーが自動作成 |
Domain | 名前空間 | 1 つのアプリケーション用の Istio Gateway + TLS + DNS |
ClusterDomain | クラスター | アプリケーション間で共有するドメイン設定 |
重要なルール:
CAPApplicationVersionは作成後、変更できません。アップグレードするには、より大きなセマンティックバージョンの新しいリソースを作成してください。Subscriptionを手動で作成または削除してはなりません。SaaS Provisioning サービスのコールバックに応じて、サブスクリプションサーバーのみが管理します。CAPTenantを手動で作成または削除してはなりません。Subscriptionの子としてコントローラーが作成します。CAPTenantOperationはコントローラーが自動作成します。手動で作成または削除しないでください。SubscriptionProviderは各CAPApplicationに対してコントローラーが自動作成し、同期状態を維持します。手動で作成、変更、削除しないでください。- CAP Operator リソースのファイナライザーを手動で削除しないでください。
CAPApplication.spec.providerは非推奨です。以前は、コントローラーがプロバイダーCAPTenantを自動作成するために使われていましたが、この動作は削除されました。現在はプロバイダーを含むすべてのテナントを、明示的にサブスクライブする必要があります。kubectl get captenant -n <namespace>の結果が空でも、アクティブなサブスクリプションがないアプリでは想定どおりです。
一般的な操作
新しいアプリケーションをデプロイする
DomainまたはClusterDomainを作成しますCAPApplicationを作成します(BTP サービスとドメインを参照)CAPApplicationVersionを作成します(イメージとワークロード)
YAML の詳細な例は、デプロイリファレンスを参照してください。
新しいバージョンにアップグレードする
より大きなセマンティックバージョンの新しい CAPApplicationVersion を作成してください。既存のものは編集しないでください。
コントローラーはすべてのテナントを自動的にアップグレードし、Istio の VirtualService ルーティングを更新します。
詳しくは、アップグレードリファレンスと tenantOperations/contentJobs の設定を参照してください。
ステータスの確認
kubectl get capapplication,capapplicationversion,captenant,captenantoperation,subscription -n <namespace>
kubectl describe capapplication <name> -n <namespace>
kubectl get domain,clusterdomain -A
ステータスの遷移:
CAPApplicationVersion:Processing→Ready|ErrorCAPTenant:Provisioning→Ready|Upgrading→Ready|DeletingCAPTenantOperation:Processing→Completed|FailedSubscription:Processing→Ready|ProcessingError(再試行可能)|Error(終端状態)|Deleting
ドメイン管理
Domain— 名前空間スコープで、アプリケーションは1つです。ClusterDomain— クラスタースコープで、共有されます。- TLS モード:
Simple(デフォルト)、Mutual、OptionalMutual - DNS モード:
None(デフォルト)、Wildcard、Subdomain、Custom domainRefsの最初のエントリーがプライマリドメインです。CAPApplicationのインラインセクションdomainsは v0.26.0 で削除されました。代わりにdomainRefsを使用してください。
ドメインのリファレンスを参照してください。
サービスの公開(テナント非依存)
CAPApplicationVersion の serviceExposures を使用すると、テナントルーティングに依存せず、固定サブドメインでワークロードを公開できます。ルートは、最も具体的なものから順に指定してください。
サービス公開のリファレンスを参照してください。
認証情報ローテーションのロールアウト
CAPApplication で rolloutOnCredentialUpdate: true を設定すると、BTP サービスの認証情報 Secret が変更された際に、ワークロードが自動的に再起動します。ローリング再起動を使用するため、ダウンタイムは発生しません。新しい認証情報を発行した後、古い認証情報を少なくとも24時間有効な状態に保ってください。
認証情報ローテーションのリファレンスを参照してください。
バージョンのクリーンアップ(モニタリングベース)
CAPApplication にアノテーション sme.sap.com/enable-cleanup-monitoring: "true" を設定して有効にします。ワークロードの monitoring セクションで deletionRules.expression(PromQL)を設定します。式の評価結果が true になると、そのバージョンは削除可能になります。
バージョンのモニタリング(website/content/en/docs/usage/version-monitoring.md)を参照してください。
主なアノテーション
| アノテーション | リソース | 効果 |
|---|---|---|
sme.sap.com/enable-cleanup-monitoring: "true" | CAPApplication | モニタリングベースのバージョンクリーンアップを有効化 |
sme.sap.com/enable-version-affinity: "true" | CAPApplication | ログアウトするまでユーザーを現在のバージョンに維持(実験的) |
sme.sap.com/logout-endpoint: "<path>" | CAPApplicationVersion | バージョンアフィニティ用のカスタムログアウトパス |
トラブルシューティング
よくある症状と解決方法 — CAPApplicationVersion/CAPTenant が停止したままになる、WaitingForSecrets、ファイナライザー、@sap/cds-mtxs のセキュリティコンテキスト、Approuter の宛先/タイムアウトに関する問題、認証情報の注入、SAP HANA の接続エラー、コントローラーのメモリー制限。
トラブルシューティングのリファレンス | website/content/en/docs/troubleshoot/_index.md | https://sap.github.io/cap-operator/docs/troubleshoot/
コントローラーの設定
コントローラーのデプロイメントに設定する環境変数で調整します。主な変数:
| 変数 | 目的 |
|---|---|
CERT_MANAGER | gardener または cert-manager.io |
DNS_MANAGER | gardener または kubernetes |
MAX_CONCURRENT_RECONCILES_CAP_APPLICATION | CAPApplication の調整処理の並行実行数 |
MAX_CONCURRENT_RECONCILES_CAP_APPLICATION_VERSION | CAPApplicationVersion の調整処理の並行実行数 |
MAX_CONCURRENT_RECONCILES_CAP_TENANT | CAPTenant の調整処理の並行実行数 |
MAX_CONCURRENT_RECONCILES_CAP_TENANT_OPERATION | CAPTenantOperation の調整処理の並行実行数 |
MAX_CONCURRENT_RECONCILES_SUBSCRIPTION | Subscription の調整処理の並行実行数 |
全一覧:website/content/en/docs/configuration/_index.md | https://sap.github.io/cap-operator/docs/configuration/
CAP Operator Plugin(Helm Chart の生成)
@cap-js/cap-operator-plugin CDS プラグインは、CAP アプリケーション用の Helm チャートのひな形を作成し、ランタイム値を生成して、デプロイ可能な最終チャートをビルドします。
スキルの呼び出し時に、これらの手順を実行しないでください。 ユーザーが Helm チャートの生成またはアプリのデプロイを明示的に依頼した場合にのみ開始してください。このスキルを読み込んだだけでは(例:/cap-operator)、依頼とはみなしません。スキルでできることを説明し、指示を待ってください。
チャートの生成とデプロイは、間に確認を挟む別々のフェーズです。チャートのみを作成し、デプロイするかどうか、またそのタイミングはユーザーに判断してもらってください。
- チャートのひな形を作成します。 内容がある MTX サイドカーフォルダー(
mtx/sidecar)が存在するか確認して、バリアントを選択します。サイドカーがある場合 → マルチテナント →--with-templates、サイドカーがない場合 → サービスのみ →--with-service-only。 - デプロイするかどうかを尋ねます。
- 「はい」と回答された後にのみ、 ランタイム入力(
appName、capOperatorSubdomain、clusterDomain、providerSubaccountId)を収集し、runtime-values.yamlを生成します。 - デプロイ前に検証します —
runtime-values.yamlを指定してhelm lintを実行し、必須の値に不足がないことを確認します。 helm upgrade -iでデプロイします。
プラグインの使用方法と設定の詳細については、CAP Operator Plugin のリファレンスを参照してください。