kro 기능 관련 문제 해결 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

kro 기능 관련 문제 해결

이 주제에서는 기능 상태 확인, RBAC 권한, CEL 표현식 오류 및 리소스 구성 문제를 포함하여 kro의 EKS 기능에 대한 문제 해결 지침을 제공합니다.

참고

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에는 다음과 같은 세 가지 주요 상태 조건이 있습니다.

  • 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 - 처리 중에 오류가 발생함

인스턴스에는 다음과 같은 네 가지 상태 조건도 있습니다.

  • 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는 모든 CEL 구문을 검증하고 Kubernetes 스키마를 기준으로 표현식의 유형을 확인하며 RGD를 생성할 때 필드 존재를 확인합니다.

일반적인 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}'

인스턴스가 필요한 모든 필드에 올바른 유형을 제공하는지 확인합니다.

다음 단계