

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# kro (Kube Resource Orchestrator) を使用したリソース構成
<a name="kro"></a>

 **kro (Kube Resource Orchestrator)** はオープンソースの Kubernetes ネイティブプロジェクトで、シンプルで簡単な設定を使用してカスタム Kubernetes API を定義できます。kro を使用すると、Kubernetes オブジェクトのグループとその間の論理オペレーションを作成する新しいカスタム API を簡単に設定できます。

AWS では EKS の機能を使用して kro を完全に管理できるため、クラスターに kro コントローラーを導入して保守およびスケールする必要がありません。

## kro の仕組み
<a name="_how_kro_works"></a>

kro では、カスタム Kubernetes API を簡潔かつ効率的に作成できる `ResourceGraphDefinition` (RGD) というカスタムリソース定義 (CRD) が導入されています。`ResourceGraphDefinition` を作成すると、kro はネイティブの Kubernetes 拡張機能を使用して、クラスターに新しい API を作成および管理します。この単一のリソース仕様から、kro は仕様に基づいて新しい CRD を作成して登録し、新しく定義されたカスタムリソースを管理するように適応します。

RGD には複数のリソースを含めることができ、kro が相互依存関係とリソースの順序を決定するため、ユーザーがそれを行う必要はありません。シンプルな構文を使用して、あるリソースから別のリソースに設定を挿入できるため、構成が大幅に簡素化され、クラスター内の「グルー」演算子が不要になります。kro を使用すると、カスタムリソースには、ネイティブの Kubernetes リソースだけでなく、クラスターにインストールされている任意のカスタムリソース定義 (CRD) も含めることができます。

kro は、1 つの主要なリソースタイプをサポートしています。
+  **ResourceGraphDefinition (RGD)**: Kubernetes カスタムリソースを定義し、1 つ以上の基盤となるネイティブまたはカスタム Kubernetes リソースをカプセル化します。

このリソースに加えて、kro は、RGD を使用して作成されたカスタムリソースと、それらを構成するすべてのリソースのライフサイクルを作成および管理します。

kro は AWS Controllers for Kubernetes (ACK) とシームレスに統合されており、ワークロードリソースと AWS リソースを組み合わせて、より高いレベルの抽象化を作成できます。これにより、独自のクラウド構成要素を作成し、リソース管理を簡素化し、組織標準に基づくデフォルトおよびイミュータブルな構成設定で再利用可能なパターンを有効にすることができます。

## kro のメリット
<a name="_benefits_of_kro"></a>

kro を使用すると、プラットフォームチームは、複数のリソースを高レベルの抽象化に構成するカスタム Kubernetes API を作成できます。これにより、開発者は、シンプルで標準化され、バージョン管理されたカスタムリソースを使用して複雑なアプリケーションをデプロイできるため、リソース管理が簡素化されます。一般的なリソースの組み合わせに再利用可能なパターンを定義することで、組織全体で一貫したリソースの作成が可能になります。

kro は、[Kubernetes の Common Expression Language (CEL)](https://kubernetes.io/docs/reference/using-api/cel/) を使用してリソース間で値を渡し、条件付きロジックを組み込むことで、リソース構成に柔軟性を提供します。Kubernetes リソースと、ACK によって管理される AWS リソースの両方を統合したカスタム API に構成できるため、アプリケーションとインフラストラクチャの完全な定義が可能になります。

kro は、Kubernetes マニフェストによる宣言型設定をサポートしており、既存の開発プロセスとシームレスに統合される GitOps ワークフローや Infrastructure as Code のプラクティスを実現します。AWS では、EKS マネージド機能の一部として、kro を完全に管理できるため、クラスターに kro コントローラーを導入して設定および保守する必要がありません。

 **例: ResourceGraphDefinition の作成** 

次の例は、デプロイとサービスを使用してウェブアプリケーションを作成するシンプルな `ResourceGraphDefinition` を示しています。

```
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
  name: web-application
spec:
  schema:
    apiVersion: v1alpha1
    kind: WebApplication
    spec:
      name: string
      replicas: integer | default=3
  resources:
    - id: deployment
      template:
        apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: ${schema.spec.name}
        spec:
          replicas: ${schema.spec.replicas}
    - id: service
      template:
        apiVersion: v1
        kind: Service
        metadata:
          name: ${schema.spec.name}
```

ユーザーが `WebApplication` カスタムリソースのインスタンスを作成すると、kro は対応するデプロイおよびサービスリソースを自動的に作成し、カスタムリソースと共にライフサイクルを管理します。

## 他の EKS マネージド機能との統合
<a name="_integration_with_other_eks_managed_capabilities"></a>

kro は、他の EKS マネージド機能と統合されています。
+  **Kubernetes 用 AWS コントローラー (ACK)**: kro を使用して ACK リソースを高レベルの抽象化に構成し、AWS リソース管理を簡素化します。
+  **Argo CD**: Argo CD を使用して、複数のクラスターにまたがる kro カスタムリソースのデプロイを管理し、プラットフォームの構成要素とアプリケーションスタックの GitOps ワークフローを有効にします。

## kro の開始方法
<a name="_getting_started_with_kro"></a>

EKS Capability for kro の使用を開始するには:

1.  AWS コンソール、AWS CLI、または任意の Infrastructure as Code ツールを使用して、EKS クラスターに [kro 機能リソースを作成](create-kro-capability.md)します。

1. カスタム API とリソース構成を定義する ResourceGraphDefinitions (RGDs) を作成します。

1. カスタムリソースのインスタンスを適用して、基盤となる Kubernetes リソースと AWS リソースをプロビジョニングおよび管理します。