kro 機能に関する問題をトラブルシューティングする - Amazon EKS

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

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

kro 機能に関する問題をトラブルシューティングする

このトピックでは、機能ヘルスチェック、RBAC アクセス許可、CEL 式エラー、リソース構成の問題など、EKS Capability for kro をトラブルシューティングする際のガイダンスを提供します。

注記

EKS の機能は完全に管理され、クラスターの外部で実行されます。コントローラーログや kro-system 名前空間にアクセスすることはできません。トラブルシューティングでは、機能のヘルス、RBAC の設定、リソースのステータスに焦点を当てています。

機能は ACTIVE だが、ResourceGraphDefinitions が機能していない

kro 機能のステータスが ACTIVE なのに、ResourceGraphDefinitions が基盤となるリソースを作成していない場合は、機能ヘルス、RBAC アクセス許可、リソースステータスを確認してください。

機能のヘルスを確認する:

機能のヘルスとステータスの問題は、EKS コンソールまたは AWS CLI を使用して表示できます。

コンソール:

  1. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

  2. クラスター名を選択します。

  3. [オブザーバビリティ] タブを選択します。

  4. [クラスターを監視する] を選択します。

  5. [機能] タブを選択すると、すべての機能のヘルスとステータスが表示されます。

AWS CLI:

# View capability status and health aws eks describe-capability \ --region region-code \ --cluster-name my-cluster \ --capability-name my-kro # Look for issues in the health section

一般的な原因:

  • RBAC アクセス許可がない: kro には、基盤となる Kubernetes リソースを作成するアクセス許可がありません

  • 無効な CEL 式: ResourceGraphDefinition に構文エラーがあります。

  • リソースの依存関係: 依存するリソースの準備ができていません。

  • スキーマ検証: インスタンスが RGD スキーマの要件と一致していません。

RBAC アクセス許可の確認:

# Check if capability has cluster admin policy kubectl get accessentry -A | grep kro

機能に必要なアクセス許可がない場合は、AmazonEKSClusterAdminPolicy を kro 機能のアクセスエントリに関連付けるか、本番稼働用のより制限の厳しい RBAC ポリシーを作成します。詳細については、「kro アクセス許可の設定」を参照してください。

ResourceGraphDefinition のステータスの確認:

# List all RGDs kubectl get resourcegraphdefinition # Describe specific RGD kubectl describe resourcegraphdefinition my-rgd # Check for validation errors kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions}'

ResourceGraphDefinitions には 3 つの主要なステータス条件があります。

  • ResourceGraphAccepted - RGD が検証 (CEL 構文、型チェック、フィールドの存在) に合格したかどうか

  • KindReady - カスタム API の CRD が生成され、登録されたかどうか

  • ControllerReady - kro がカスタム API のインスタンスをアクティブに監視しているかどうか

ResourceGraphAcceptedFalse の場合は、不明なフィールド、型の不一致、循環依存関係などの検証エラーがないか、条件メッセージを確認します。

インスタンスは作成されているが、基盤となるリソースが表示されない

カスタムリソースインスタンスが存在するにもかかわらず、基盤となる Kubernetes リソース (デプロイ、サービス、ConfigMaps) が作成されていない場合は、kro にアクセス許可があることを確認し、構成エラーがないかを確認します。

インスタンスのステータスの確認:

# Describe the instance (replace with your custom resource kind and name) kubectl describe custom-kind my-instance # View instance events kubectl get events --field-selector involvedObject.name=my-instance # Check instance status conditions kubectl get custom-kind my-instance -o jsonpath='{.status.conditions}' # Check instance state kubectl get custom-kind my-instance -o jsonpath='{.status.state}'

インスタンスには、高レベルのステータスを示す次の state フィールドがあります。

  • ACTIVE - インスタンスは正常に実行されています。

  • IN_PROGRESS - インスタンスは処理中または調整中です。

  • FAILED - インスタンスの調整に失敗しました。

  • DELETING - インスタンスを削除中です。

  • ERROR - 処理中にエラーが発生しました。

インスタンスには、次の 4 つのステータス条件もあります。

  • InstanceManaged - ファイナライザーとラベルが適切に設定されています。

  • GraphResolved - ランタイムグラフが作成され、リソースが解決されています。

  • ResourcesReady - すべてのリソースが作成され、準備完了です。

  • Ready - インスタンス全体のヘルス (すべてのサブ条件が Trueの場合にのみ True になります)。

インスタンスのヘルスを判断するには、Ready 条件に注目します。ReadyFalse の場合は、サブ条件を確認して、どのフェーズで失敗したかを特定します。

RBAC アクセス許可の確認:

kro 機能には、ResourceGraphDefinitions で定義されている基盤となる Kubernetes リソースを作成するためのアクセス許可が必要です。

# Check if the capability has the AmazonEKSClusterAdminPolicy kubectl get accessentry -A | grep kro

アクセス許可がない場合は、AmazonEKSClusterAdminPolicy を kro 機能のアクセスエントリに関連付けるか、本番稼働用のより制限の厳しい RBAC ポリシーを作成します。詳細については、「kro アクセス許可の設定」を参照してください。

CEL 式のエラー

CEL 式のエラーは、インスタンスの作成時ではなく、ResourceGraphDefinition の作成時に検出されます。kro は、RGD の作成時に、すべての CEL 構文を検証し、Kubernetes スキーマに対して式の型チェックを行い、フィールドの存在を検証します。

一般的な CEL 検証エラー:

  • 未定義のフィールド参照: スキーマまたはリソースに存在しないフィールドを参照しています。

  • 型の不一致: 式が期待される型と異なる型 (例: 整数が期待される箇所で文字列) を返します。

  • 無効な構文: CEL 式に括弧、引用符、または演算子がありません。

  • 不明なリソースタイプ: クラスターに存在しない CRD を参照しています。

RGD の検証ステータスの確認:

# Check if RGD was accepted kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}' # View detailed validation errors kubectl describe resourcegraphdefinition my-rgd

ResourceGraphAcceptedFalse の場合、条件メッセージには検証エラーが含まれます。

有効な CEL 式の例:

# Reference schema field ${schema.spec.appName} # Conditional expression ${schema.spec.replicas > 1} # String template (expressions must return strings) name: "${schema.spec.appName}-service" # Standalone expression (can be any type) replicas: ${schema.spec.replicaCount} # Resource reference ${deployment.status.availableReplicas} # Optional field access (returns null if field doesn't exist) ${configmap.data.?DATABASE_URL}

リソースの依存関係が解決されない

kro は CEL 式から依存関係を自動的に推測し、正しい順序でリソースを作成します。リソースが想定どおりに作成されていない場合は、依存関係の順序とリソースの準備状況を確認してください。

計算された作成順序の表示:

# See the order kro will create resources kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.status.topologicalOrder}'

これは、リソース間の CEL 式の参照に基づいて計算された順序を示しています。

リソースの準備状況の確認:

# View instance status to see which resources are ready kubectl get custom-kind my-instance -o jsonpath='{.status}' # Check specific resource status kubectl get deployment my-deployment -o jsonpath='{.status.conditions}'

readyWhen 条件の確認 (使用している場合):

readyWhen フィールドはオプションです。指定しない場合、リソースは作成直後に準備完了とみなされます。readyWhen 条件を定義している場合は、リソースの準備状況が正しくチェックされていることを確認します。

resources: - id: deployment readyWhen: - ${deployment.status.availableReplicas == deployment.spec.replicas}

リソースイベントの確認:

# View events for the underlying resources kubectl get events -n namespace --sort-by='.lastTimestamp'

スキーマ検証の失敗

スキーマ検証エラーが原因でインスタンスの作成に失敗した場合は、インスタンスが RGD スキーマの要件と一致していることを確認します。

検証エラーの確認:

# Attempt to create instance and view error kubectl apply -f instance.yaml # View existing instance validation status kubectl describe custom-kind my-instance | grep -A 5 "Validation"

一般的な検証の問題:

  • 必須フィールドがない: インスタンスがすべての必須スキーマフィールドを提供していません。

  • 型の不一致: 整数が期待される箇所で文字列が指定されています。

  • 無効な列挙値: 許可されているリストに含まれていない値が使用されています。

  • パターンの不一致: 文字列が正規表現パターンと一致していません。

RGD スキーマの確認:

# View the schema definition kubectl get resourcegraphdefinition my-rgd -o jsonpath='{.spec.schema}'

インスタンスで、正しい型の必須フィールドがすべて指定されていることを確認します。

次のステップ