AWS Controllers for Kubernetes(ACK)로 Kubernetes에서 AWS 리소스 배포
AWS Controllers for Kubernetes(ACK)로 Kubernetes에서 AWS 리소스 배포
AWS Controllers for Kubernetes(ACK)를 사용해 Kubernetes에서 직접 AWS 서비스 리소스를 정의하고 관리하는 방법을 설명합니다.
출처: 문서
본문
AWS Controllers for Kubernetes(ACK)를 사용하면 Kubernetes에서 직접 AWS 서비스 리소스를 정의하고 관리할 수 있습니다. ACK를 사용하면 익숙한 Kubernetes API와 도구로 애플리케이션 워크로드와 함께 워크로드 리소스와 클라우드 인프라를 Kubernetes 커스텀 리소스로 관리할 수 있습니다.
EKS 캐퍼빌리티를 통하면 ACK가 AWS에 의해 완전 관리되므로, 클러스터에 ACK 컨트롤러를 설치하고 유지 관리하며 확장할 필요가 없습니다.
ACK 작동 방식
ACK는 Kubernetes 커스텀 리소스 스펙을 AWS API 호출로 변환합니다. AWS 서비스 리소스를 나타내는 Kubernetes 커스텀 리소스를 생성, 업데이트, 삭제하면 ACK가 해당 AWS 리소스를 생성, 업데이트, 삭제하는 데 필요한 AWS API 호출을 수행합니다.
ACK가 지원하는 각 AWS 리소스에는 구성을 지정하기 위한 Kubernetes API 스키마를 정의하는 자체 커스텀 리소스 정의(CRD)가 있습니다. 예를 들어 ACK는 버킷, 버킷 정책, 기타 S3 리소스를 포함해 S3용 CRD를 제공합니다.
ACK는 Kubernetes 커스텀 리소스에 정의된 원하는 상태와 AWS 리소스의 상태를 지속적으로 조정(reconcile)합니다. 리소스가 원하는 상태에서 벗어나면 ACK가 이를 감지하고 정렬 상태로 되돌리기 위한 시정 조치를 취합니다. Kubernetes 리소스에 대한 변경은 즉시 AWS 리소스 상태에 반영되는 반면, 업스트림 AWS 리소스 변경의 수동적 드리프트 감지와 해결은 최대 10시간(재동기화 주기)이 걸릴 수 있지만 보통은 훨씬 빨리 일어납니다.
S3 버킷 리소스 매니페스트 예시
apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
name: my-ack-bucket
spec:
name: my-unique-bucket-name
이 커스텀 리소스를 클러스터에 적용하면, 아직 존재하지 않을 경우 ACK가 계정에 Amazon S3 버킷을 생성합니다. 이후 이 리소스에 대한 변경(예: 비기본 스토리지 계층 지정, 정책 추가)은 AWS의 S3 리소스에 적용됩니다. 이 리소스를 클러스터에서 삭제하면 기본적으로 AWS의 S3 버킷도 삭제됩니다.
ACK의 이점
ACK는 Kubernetes 네이티브 AWS 리소스 관리를 제공하므로, 애플리케이션에 사용하는 것과 같은 Kubernetes API와 도구로 AWS 리소스를 관리할 수 있습니다. 이 통합 접근 방식은 서로 다른 도구를 오가거나 별도의 infrastructure-as-code 시스템을 배울 필요를 없애 인프라 관리 워크플로를 간소화합니다. Kubernetes 매니페스트에 AWS 리소스를 선언적으로 정의함으로써 기존 개발 프로세스와 원활히 통합되는 GitOps 워크플로와 infrastructure as code 방식을 활용할 수 있습니다.
ACK는 AWS 리소스의 원하는 상태와 실제 상태를 지속적으로 조정해 드리프트를 수정하고 인프라 전반의 일관성을 보장합니다. 이 지속적인 조정 덕분에 AWS 리소스에 대한 명령형 외부 변경도 선언된 구성과 일치하도록 자동으로 되돌려져 infrastructure as code의 무결성이 유지됩니다. ACK를 구성해 여러 AWS 계정과 리전의 리소스를 관리할 수 있으므로 추가 도구 없이도 복잡한 멀티 계정 아키텍처를 구현할 수 있습니다.
다른 인프라 관리 도구에서 마이그레이션하는 조직을 위해 ACK는 리소스 어답션(adoption)을 지원하므로, 기존 AWS 리소스를 다시 만들지 않고도 ACK 관리 하에 가져올 수 있습니다. ACK는 또한 수정 접근 없이 AWS 리소스를 관찰하기 위한 읽기 전용 리소스와, Kubernetes 리소스가 클러스터에서 삭제되어도 선택적으로 AWS 리소스를 유지하는 어노테이션도 제공합니다.
ACK용 EKS 캐퍼빌리티에 대해 자세히 알아보고 시작하려면 ACK 개념과 EKS용 ACK 고려 사항을 참고하세요.
지원되는 AWS 서비스
ACK는 다음을 포함해 다양한 AWS 서비스를 지원합니다.
- Amazon EC2
- Amazon S3
- Amazon RDS
- Amazon DynamoDB
- Amazon ElastiCache
- Amazon EKS
- Amazon SQS
- Amazon SNS
- AWS Lambda
- AWS IAM
업스트림에서 Generally Available로 나열된 모든 AWS 서비스는 ACK용 EKS 캐퍼빌리티에서 지원됩니다. 지원되는 AWS 서비스의 전체 목록은 ACK 웹사이트의 ACK 서비스 페이지를 참고하세요.
다른 EKS 관리형 캐퍼빌리티와의 통합
ACK는 다른 EKS 관리형 캐퍼빌리티와 통합됩니다.
- Argo CD - Argo CD를 사용해 여러 클러스터에 걸쳐 ACK 리소스의 배포를 관리하여 AWS 인프라에 GitOps 워크플로를 적용할 수 있습니다. ACK는 Argo CD와 함께 사용하면 GitOps의 이점을 확장하지만, ACK가 git과의 통합을 요구하지는 않습니다.
- kro (Kube Resource Orchestrator) - kro를 사용해 ACK 리소스로 복잡한 리소스를 구성하여 리소스 관리를 간소화하는 더 높은 수준의 추상화를 만들 수 있습니다. kro로 Kubernetes 리소스와 AWS 리소스를 모두 정의하는 복합 커스텀 리소스를 만들 수 있으며, 팀 구성원은 이 커스텀 리소스를 사용해 복잡한 애플리케이션을 빠르게 배포할 수 있습니다.
ACK 시작하기
ACK용 EKS 캐퍼빌리티를 시작하려면 다음을 수행하세요.
- ACK가 사용자 대신 AWS 리소스를 관리하는 데 필요한 권한을 가진 IAM 캐퍼빌리티 역할을 생성하고 구성합니다.
- AWS 콘솔, AWS CLI, 또는 선호하는 infrastructure as code 도구를 통해 EKS 클러스터에 ACK 캐퍼빌리티 리소스를 생성합니다.
- Kubernetes 커스텀 리소스를 클러스터에 적용해 Kubernetes에서 AWS 리소스 관리를 시작합니다.