このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
EKS を利用する場合の kro の考慮事項
このトピックでは、リソース構成、RBAC パターン、他の EKS 機能との統合を使用するタイミングなど、EKS Capability for kro を使用する際の重要な考慮事項について説明します。
kro を使用する場合
kro は、複雑なリソース管理を簡素化する、再利用可能なインフラストラクチャパターンとカスタム API を作成するように設計されています。
次の場合に kro を使用します。
-
アプリケーションチーム向けに、簡素化された API を備えたセルフサービスプラットフォームを作成する場合
-
チーム間でインフラストラクチャパターン (データベース + バックアップ + モニタリング) を標準化する場合
-
リソースの依存関係を管理し、リソース間で値を渡す場合
-
実装の複雑さを隠すカスタム抽象化を構築する場合
-
複数の ACK リソースを高レベルの構成要素に構成する場合
-
複雑なインフラストラクチャスタックの GitOps ワークフローを有効にする場合
次の場合は kro を使用しないでください。
-
シンプルでスタンドアロンなリソースを管理する場合 (ACK または Kubernetes リソースを直接使用します)
-
動的なランタイムロジックが必要な場合 (kro は命令型ではなく、宣言型です)
-
リソースに依存関係や共有設定がない場合
kro は、チームが複雑なインフラストラクチャを正しくデプロイしやすくする、意見が組み込まれた再利用可能なパターン (「paved paths」) の作成に優れています。
RBAC パターン
kro を使用すると、ResourceGraphDefinitions を作成するプラットフォームチームと、インスタンスを作成するアプリケーションチームとの間で責務を分離できます。
プラットフォームチームの責任
プラットフォームチームは、カスタム API を定義する ResourceGraphDefinitions (RGDs) を作成および維持します。
必要となる権限:
-
ResourceGraphDefinitions の作成、更新、削除
-
基盤となるリソースタイプ (デプロイ、サービス、ACK リソース) の管理
-
RGDs が使用されるすべての名前空間へのアクセス
プラットフォームチーム向け ClusterRole の例:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: platform-kro-admin rules: - apiGroups: ["kro.run"] resources: ["resourcegraphdefinitions"] verbs: ["*"] - apiGroups: ["*"] resources: ["*"] verbs: ["get", "list", "watch"]
RBAC 設定の詳細については、「kro アクセス許可の設定」を参照してください。
アプリケーションチームの責任
アプリケーションチームは、基盤となる複雑さを理解することなく、RGDs で定義されたカスタムリソースのインスタンスを作成します。
必要となる権限:
-
カスタムリソースのインスタンスの作成、更新、削除
-
自身の名前空間への読み取りアクセス
-
基盤となるリソースまたは RGDs へのアクセス権は不要
利点:
-
チームはシンプルで高レベルの API を使用
-
プラットフォームチームが実装の詳細を制御
-
設定ミスのリスクを低減
-
新しいチームメンバーのオンボーディングを高速化
他の EKS 機能との統合
ACK リソースの構成
kro は、ACK と組み合わせることで、インフラストラクチャパターンの作成において特に高い効果を発揮します。
一般的なパターン:
-
ストレージを含むアプリケーション: S3 バケット + SQS キュー + 通知設定
-
データベーススタック: RDS インスタンス + パラメータグループ + セキュリティグループ + Secrets Manager シークレット
-
ネットワーク: VPC + サブネット + ルートテーブル + セキュリティグループ + NAT ゲートウェイ
-
ストレージを含むコンピューティング: EC2 インスタンス + EBS ボリューム + IAM インスタンスプロファイル
kro は、依存関係の順序付けを処理し、リソース間で (ARN や接続文字列などの) 値を渡し、ライフサイクル全体を 1 つのユニットとして管理します。
ACK リソースを作成する例については、「ACK の概念」を参照してください。
GitOps と Argo CD
EKS Capability for Argo CD を使用して、Git リポジトリから RGDs とインスタンスの両方をデプロイします。
リポジトリの整理:
-
プラットフォームリポジトリ: プラットフォームチームが管理する ResourceGraphDefinitions を格納
-
アプリケーションリポジトリ: アプリケーションチームが管理するカスタムリソースのインスタンスを格納
-
共有リポジトリ: 小規模な組織向けに、RGDs とインスタンスの両方を格納
考慮事項:
-
インスタンスより先に RGDs をデプロイする (Argo CD の同期ウェーブが役立つ)
-
プラットフォームチームとアプリケーションチームに別々の Argo CD プロジェクトを使用する
-
プラットフォームチームが RGD リポジトリへのアクセスを制御する
-
アプリケーションチームには RGD 定義への読み取り専用アクセスを付与する
Argo CD の詳細については、「Argo CD の使用」を参照してください。
ResourceGraphDefinitions の整理
目的、複雑さ、所有権別に RGDs を整理します。
目的別:
-
インフラストラクチャ: データベーススタック、ネットワーク、ストレージ
-
アプリケーション: ウェブアプリケーション、API、バッチジョブ
-
プラットフォーム: 共有サービス、モニタリング、ログ記録
複雑さ別:
-
シンプル: 依存関係が最小限の 2~3 個のリソース
-
中程度: 一部に依存関係がある 5~10 個のリソース
-
複雑: 複雑な依存関係を持つ 10 個以上のリソース
命名規則:
-
わかりやすい名前を使用する:
webapp-with-database、s3-notification-queue -
重大な変更には、名前にバージョンを含める:
webapp-v2 -
関連する RGDs には、一貫したプレフィックスを使用する:
platform-、app-
名前空間戦略:
-
RGDs はクラスタースコープである (名前空間なし)
-
インスタンスは名前空間に属する
-
RGDs で名前空間セレクタを使用して、インスタンスを作成できる場所を制御する
バージョニングと更新
RGD の進化とインスタンスの移行を計画します。
RGD の更新:
-
重要な変更なし: RGD をそのまま更新する (オプションフィールドを追加、includeWhen を使用した新しいリソースを追加)
-
重大な変更: 異なる名前の新しい RGD を作成する (webapp-v2)
-
非推奨化: 古い RGDs に注釈を付け、移行タイムラインを周知する
インスタンスの移行:
-
更新された RGD を使用して新しいインスタンスを作成する
-
新しいインスタンスが正しく動作することを検証する
-
古いインスタンスを削除する
-
kro は、基盤となるリソースの更新を自動的に処理します
ベストプラクティス:
-
最初に本番稼働用環境以外で RGD の変更をテストする
-
主な変更には、RGD 名にセマンティックバージョニングを使用する
-
重大な変更と移行パスを文書化する
-
アプリケーションチームに移行例を提供する
検証とテスト
本番環境にデプロイする前に RGDs を検証します。
検証戦略:
-
スキーマ検証: kro は RGD の構造を自動的に検証する
-
ドライランインスタンス: 開発用名前空間でテストインスタンスを作成する
-
統合テスト: 構成されたリソースが正しく連携することを確認する
-
ポリシーの適用: アドミッションコントローラーを使用して組織標準を適用する
テストする一般的な問題:
-
リソースの依存関係と順序付け
-
リソース間で渡す値 (CEL 式)
-
条件付きリソースの包含 (includeWhen)
-
基盤となるリソースからのステータス伝播
-
インスタンス作成の RBAC アクセス許可
アップストリームドキュメント
kro の使用の詳細については、以下を参照してください。
-
kro の開始方法
- ResourceGraphDefinitions の作成 -
CEL 式
- CEL 式の記述 -
kro ガイド
- 高度な構成パターン -
トラブルシューティング
- トラブルシューティングとデバッグ
次のステップ
-
kro アクセス許可の設定 - プラットフォームチームとアプリケーションチームに RBAC を設定する
-
kro の概念 - kro の概念とリソースライフサイクルを理解する
-
kro 機能に関する問題をトラブルシューティングする - kro の問題をトラブルシューティングする
-
ACK の概念 - 構成に使用する ACK リソースについて説明する
-
Argo CD の使用 - GitOps を使用して RGDs とインスタンスをデプロイする