이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
ACK 개념
ACK는 매니페스트의 원하는 상태를 AWS의 실제 상태에 맞게 지속적으로 조정하여 Kubernetes API를 통해 AWS 리소스를 관리합니다. Kubernetes 사용자 지정 리소스를 생성하거나 업데이트할 때 ACK는 해당 AWS 리소스를 생성하거나 수정하는 데 필요한 AWS API 직접 호출을 수행한 다음 드리프트가 있는지 모니터링하고 현재 상태를 반영하도록 Kubernetes 상태를 업데이트합니다. 이 접근 방식을 사용하면 클러스터와 AWS 간의 일관성을 유지하면서 익숙한 Kubernetes 도구 및 워크플로를 사용하여 인프라를 관리할 수 있습니다.
이 주제에서는 ACK가 Kubernetes API를 통해 AWS 리소스를 관리하는 방법의 기본 개념을 설명합니다.
ACK 시작하기
ACK 기능을 생성한 후(ACK 기능 생성 참조) 클러스터에서 Kubernetes 매니페스트를 사용하여 AWS 리소스 관리를 시작할 수 있습니다.
예를 들어 고유한 버킷 이름을 선택하여 bucket.yaml에서 이 S3 버킷 매니페스트를 생성합니다.
apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: my-test-bucket namespace: default spec: name:my-unique-bucket-name-12345
매니페스트를 적용합니다.
kubectl apply -f bucket.yaml
상태를 확인합니다.
kubectl get bucket my-test-bucket kubectl describe bucket my-test-bucket
버킷이 AWS에서 생성되었는지 확인합니다.
aws s3 ls | grepmy-unique-bucket-name-12345
Kubernetes 리소스를 생성합니다.
kubectl delete bucket my-test-bucket
버킷이 AWS에서 삭제되었는지 확인합니다.
aws s3 ls | grepmy-unique-bucket-name-12345
버킷이 목록에 더 이상 표시되지 않아야 합니다. 이는 ACK가 AWS 리소스의 전체 수명 주기를 관리함을 보여줍니다.
ACK 시작 방법에 대한 자세한 내용은 Getting Started with ACK
리소스 수명 주기 및 조정
ACK는 연속 조정 루프를 사용하여 AWS 리소스가 Kubernetes 매니페스트에 정의된 원하는 상태와 일치하는지 확인합니다.
조정 작동 방식:
-
Kubernetes 사용자 지정 리소스(예: S3 버킷)를 생성하거나 업데이트함
-
ACK는 변경을 감지하고 원하는 상태를 AWS의 실제 상태와 비교함
-
차이가 있는 경우 ACK는 AWS API를 직접 호출하여 차이를 조정함
-
ACK는 현재 상태를 반영하도록 Kubernetes의 리소스 상태를 업데이트함
-
루프는 일반적으로 몇 시간마다 지속적으로 반복됨
새 Kubernetes 리소스를 생성하거나 기존 리소스의 spec을 업데이트하거나 ACK가 ACK 외부에서 수행된 수동 변경 사항과의 드리프트를 AWS에서 감지하면 조정이 트리거됩니다. 또한 ACK는 10시간의 재동기화 기간으로 주기적 조정을 수행합니다. Kubernetes 리소스에 대한 변경 사항은 즉각적인 조정을 트리거하는 반면, 업스트림 AWS 리소스 변경 사항에 대한 수동 드리프트 감지는 주기적 재동기화 중에 수행됩니다.
위의 시작하기 예제를 살펴보면 ACK는 다음 단계를 수행합니다.
-
버킷이 AWS에 존재하는지 확인
-
그렇지 않은 경우
s3:CreateBucket직접 호출 -
버킷 ARN 및 상태로 Kubernetes 상태 업데이트
-
드리프트에 대한 지속적 모니터링
ACK 작동 방식에 대한 자세한 내용은 ACK Reconciliation
상태 조건
ACK 리소스는 상태 조건을 사용하여 상태를 전달합니다. 이러한 조건을 이해하면 문제를 해결하고 리소스 상태를 이해하는 데 도움이 됩니다.
-
Ready: 리소스를 사용할 준비가 되었음을 나타냅니다(표준화된 Kubernetes 조건).
-
ACK.ResourceSynced: 리소스 사양이 AWS 리소스 상태와 일치함을 나타냅니다.
-
ACK.Terminal: 복구할 수 없는 오류가 발생했음을 나타냅니다.
-
ACK.Adopted: 새 리소스를 생성하는 대신 기존 AWS 리소스에서 리소스를 채택했음을 나타냅니다.
-
ACK.Recoverable: 사양을 업데이트하지 않고도 해결할 수 있는 복구 가능한 오류를 나타냅니다.
-
ACK.Advisory: 리소스에 대한 자문 정보를 제공합니다.
-
ACK.LateInitialized: 필드의 늦은 초기화가 완료되었는지를 나타냅니다.
-
ACK.ReferencesResolved: 모든
AWSResourceReference필드가 해결되었는지를 나타냅니다. -
ACK.IAMRoleSelected:이 리소스를 관리하기 위해 IAMRoleSelector가 선택되었는지를 나타냅니다.
리소스 상태를 확인합니다.
# Check if resource is ready kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}' # Check for terminal errors kubectl get bucket my-bucket -o jsonpath='{.status.conditions[?(@.type=="ACK.Terminal")]}'
상태 예제:
status: conditions: - type: Ready status: "True" lastTransitionTime: "2024-01-15T10:30:00Z" - type: ACK.ResourceSynced status: "True" lastTransitionTime: "2024-01-15T10:30:00Z" - type: ACK.Terminal status: "True" ackResourceMetadata: arn: arn:aws:s3:::my-unique-bucket-name ownerAccountID: "111122223333" region: us-west-2
ACK 상태 및 조건에 대한 자세한 내용은 ACK Conditions
삭제 정책
ACK의 삭제 정책은 Kubernetes 리소스를 삭제할 때 AWS 리소스에 어떤 일이 발생하는지 제어합니다.
삭제(기본값)
Kubernetes 리소스를 삭제하면 AWS 리소스가 삭제됩니다. 이는 기본 동작입니다.
# No annotation needed - this is the default apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: temp-bucket spec: name: temporary-bucket
이 리소스를 삭제하면 AWS에서 S3 버킷이 삭제됩니다.
보관:
Kubernetes 리소스를 삭제할 때 AWS 리소스는 유지됩니다.
apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: important-bucket annotations: services.k8s.aws/deletion-policy: "retain" spec: name: production-data-bucket
이 리소스를 삭제하면 Kubernetes에서 제거되지만 AWS의 S3 버킷에는 남아 있습니다.
이 retain 정책은 Kubernetes 리소스보다 수명이 길어야 하는 프로덕션 데이터베이스, 여러 애플리케이션에서 사용하는 공유 리소스, 실수로 삭제해서는 안 되는 중요한 데이터가 있는 리소스 또는 리소스를 채택하고 구성한 다음 수동 관리로 다시 릴리스하는 임시 ACK 관리에 유용합니다.
ACK 삭제 정책에 대한 자세한 내용은 ACK Deletion Policy
리소스 채택
채택을 통해 기존 AWS 리소스를 다시 생성하지 않고도 ACK 관리를 적용할 수 있습니다.
채택을 사용해야 하는 경우:
-
기존 인프라를 ACK 관리로 마이그레이션
-
Kubernetes에서 실수로 리소스가 삭제된 경우 분리된 AWS 리소스 복구
-
다른 도구(CloudFormation, Terraform)에서 생성한 리소스 가져오기
채택 작동 방식:
apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: existing-bucket annotations: services.k8s.aws/adoption-policy: "adopt-or-create" spec: name: my-existing-bucket-name
이 리소스를 생성하는 경우:
-
해당 이름의 버킷이 AWS에 있는지 ACK에서 확인
-
찾은 경우 ACK에서 채택(생성할 API 직접 호출 없음)
-
ACK가 AWS에서 현재 구성을 읽음
-
ACK가 실제 상태를 반영하도록 Kubernetes 상태 업데이트
-
향후 업데이트에서 정상적으로 리소스 조정
리소스가 채택되면 리소스는 다른 ACK 리소스와 마찬가지로 관리되며, retain 삭제 정책을 사용하지 않는 한 Kubernetes 리소스를 삭제하면 AWS 리소스가 삭제됩니다.
리소스를 채택할 때 AWS 리소스가 이미 존재해야 하고 ACK가 리소스를 검색하려면 읽기 권한이 필요합니다. 이 adopt-or-create 정책은 리소스가 있는 경우 리소스를 채택하고 없는 경우 리소스를 생성합니다. 이는 리소스의 존재 여부에 상관없이 작동하는 선언적 워크플로를 원하는 경우에 유용합니다.
ACK 리소스 채택에 대한 자세한 내용은 ACK Resource Adoption
교차 리전 및 교차 계정 액세스
ACK는 단일 클러스터에서 서로 다른 AWS 계정 및 리전의 리소스를 관리할 수 있습니다.
교차 리전 리소스 주석
주석을 사용하여 AWS 리소스의 리전을 지정할 수 있습니다.
apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: eu-bucket annotations: services.k8s.aws/region: eu-west-1 spec: name: my-eu-bucket
또한 지정된 네임스페이스에서 생성된 모든 AWS 리소스의 리전을 지정할 수도 있습니다.
네임스페이스 주석
네임스페이스의 모든 리소스에 대해 기본 리전을 설정합니다.
apiVersion: v1 kind: Namespace metadata: name: production annotations: services.k8s.aws/default-region: us-west-2
리소스 수준 주석으로 재정의되지 않는 한 이 네임스페이스에서 생성된 리소스는 이 리전을 사용합니다.
교차 계정
IAM 역할 선택기를 사용하여 특정 IAM 역할을 네임스페이스에 매핑합니다.
apiVersion: services.k8s.aws/v1alpha1 kind: IAMRoleSelector metadata: name: target-account-config spec: arn: arn:aws:iam::444455556666:role/ACKTargetAccountRole namespaceSelector: names: - production
매핑된 네임스페이스에서 생성된 리소스는 지정된 역할을 자동으로 사용합니다.
IAM 역할 선택기에 대한 자세한 내용은 ACK Cross-Account Resource Management
오류 처리 및 재시도 동작
ACK는 일시적인 오류를 자동으로 처리하고 실패한 작업을 재시도합니다.
재시도 전략:
-
일시적인 오류(속도 제한, 일시적인 서비스 문제, 권한 부족)는 자동 재시도를 트리거함
-
지수 백오프로 과도한 AWS API를 방지함
-
최대 재시도 횟수는 오류 유형에 따라 다름
-
영구 오류(잘못된 파라미터, 리소스 이름 충돌)는 재시도되지 않음
오류에 대한 세부 정보를 보려면 kubectl describe를 사용하여 리소스 상태를 확인합니다.
kubectl describe bucket my-bucket
오류 메시지가 있는 상태 조건, 최근 조정 시도를 보여주는 이벤트, 실패를 설명하는 상태 조건의 message 필드를 찾습니다. 일반적인 오류로는 IAM 권한 부족, AWS에서 리소스 이름 충돌, spec에서 유효하지 않은 구성 값, 초과된 AWS 서비스 할당량이 있습니다.
일반적인 오류 문제를 해결하려면 ACK 기능 관련 문제 해결 섹션을 참조하세요.
kro를 사용하는 리소스 구성
여러 ACK 리소스를 함께 구성하고 연결하려면 Kube Resource Orchestrator(kro)의 EKS 기능을 사용합니다. kro는 리소스 그룹을 정의하는 선언적 방법을 제공하여 리소스 간에 구성을 전달해 복잡한 인프라 패턴을 간단히 관리합니다.
ACK 리소스를 사용하여 사용자 지정 리소스 구성을 생성하는 자세한 예제는 kro 개념 섹션을 참조하세요.
다음 단계
-
EKS에 대한 ACK 고려 사항 - EKS 특정 패턴 및 통합 전략