このページの改善にご協力ください
このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。
kro 機能に関する問題をトラブルシューティングする
このトピックでは、機能ヘルスチェック、RBAC アクセス許可、CEL 式エラー、リソース構成の問題など、EKS Capability for kro をトラブルシューティングする際のガイダンスを提供します。
注記
EKS の機能は完全に管理され、クラスターの外部で実行されます。コントローラーログや kro-system 名前空間にアクセスすることはできません。トラブルシューティングでは、機能のヘルス、RBAC の設定、リソースのステータスに焦点を当てています。
機能は ACTIVE だが、ResourceGraphDefinitions が機能していない
kro 機能のステータスが ACTIVE なのに、ResourceGraphDefinitions が基盤となるリソースを作成していない場合は、機能ヘルス、RBAC アクセス許可、リソースステータスを確認してください。
機能のヘルスを確認する:
機能のヘルスとステータスの問題は、EKS コンソールまたは AWS CLI を使用して表示できます。
コンソール:
-
https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。
-
クラスター名を選択します。
-
[オブザーバビリティ] タブを選択します。
-
[クラスターを監視する] を選択します。
-
[機能] タブを選択すると、すべての機能のヘルスとステータスが表示されます。
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 のインスタンスをアクティブに監視しているかどうか
ResourceGraphAccepted が False の場合は、不明なフィールド、型の不一致、循環依存関係などの検証エラーがないか、条件メッセージを確認します。
インスタンスは作成されているが、基盤となるリソースが表示されない
カスタムリソースインスタンスが存在するにもかかわらず、基盤となる Kubernetes リソース (デプロイ、サービス、ConfigMaps) が作成されていない場合は、kro にアクセス許可があることを確認し、構成エラーがないかを確認します。
インスタンスのステータスの確認:
# Describe the instance (replace with your custom resource kind and name) kubectl describecustom-kindmy-instance# View instance events kubectl get events --field-selector involvedObject.name=my-instance# Check instance status conditions kubectl getcustom-kindmy-instance-o jsonpath='{.status.conditions}' # Check instance state kubectl getcustom-kindmy-instance-o jsonpath='{.status.state}'
インスタンスには、高レベルのステータスを示す次の state フィールドがあります。
-
ACTIVE- インスタンスは正常に実行されています。 -
IN_PROGRESS- インスタンスは処理中または調整中です。 -
FAILED- インスタンスの調整に失敗しました。 -
DELETING- インスタンスを削除中です。 -
ERROR- 処理中にエラーが発生しました。
インスタンスには、次の 4 つのステータス条件もあります。
-
InstanceManaged- ファイナライザーとラベルが適切に設定されています。 -
GraphResolved- ランタイムグラフが作成され、リソースが解決されています。 -
ResourcesReady- すべてのリソースが作成され、準備完了です。 -
Ready- インスタンス全体のヘルス (すべてのサブ条件がTrueの場合にのみTrueになります)。
インスタンスのヘルスを判断するには、Ready 条件に注目します。Ready が False の場合は、サブ条件を確認して、どのフェーズで失敗したかを特定します。
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 resourcegraphdefinitionmy-rgd-o jsonpath='{.status.conditions[?(@.type=="ResourceGraphAccepted")]}' # View detailed validation errors kubectl describe resourcegraphdefinitionmy-rgd
ResourceGraphAccepted が False の場合、条件メッセージには検証エラーが含まれます。
有効な 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 resourcegraphdefinitionmy-rgd-o jsonpath='{.status.topologicalOrder}'
これは、リソース間の CEL 式の参照に基づいて計算された順序を示しています。
リソースの準備状況の確認:
# View instance status to see which resources are ready kubectl getcustom-kindmy-instance-o jsonpath='{.status}' # Check specific resource status kubectl get deploymentmy-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 -nnamespace--sort-by='.lastTimestamp'
スキーマ検証の失敗
スキーマ検証エラーが原因でインスタンスの作成に失敗した場合は、インスタンスが RGD スキーマの要件と一致していることを確認します。
検証エラーの確認:
# Attempt to create instance and view error kubectl apply -f instance.yaml # View existing instance validation status kubectl describecustom-kindmy-instance| grep -A 5 "Validation"
一般的な検証の問題:
-
必須フィールドがない: インスタンスがすべての必須スキーマフィールドを提供していません。
-
型の不一致: 整数が期待される箇所で文字列が指定されています。
-
無効な列挙値: 許可されているリストに含まれていない値が使用されています。
-
パターンの不一致: 文字列が正規表現パターンと一致していません。
RGD スキーマの確認:
# View the schema definition kubectl get resourcegraphdefinitionmy-rgd-o jsonpath='{.spec.schema}'
インスタンスで、正しい型の必須フィールドがすべて指定されていることを確認します。
次のステップ
-
EKS を利用する場合の kro の考慮事項 - kro の考慮事項とベストプラクティス
-
kro アクセス許可の設定 - プラットフォームチームとアプリケーションチームに RBAC を設定する
-
kro の概念 - kro の概念とリソースライフサイクルを理解する
-
EKS 機能をトラブルシューティングする - 一般的な機能をトラブルシューティングする際のガイダンス