kro(Kube Resource Orchestrator)로 리소스 구성
kro(Kube Resource Orchestrator)로 리소스 구성
kro(Kube Resource Orchestrator)를 사용해 커스텀 Kubernetes API를 정의하고 리소스를 구성하는 방법을 설명합니다.
출처: 문서
본문
kro(Kube Resource Orchestrator)는 간단하고 직관적인 구성으로 커스텀 Kubernetes API를 정의할 수 있는 오픈 소스 Kubernetes 네이티브 프로젝트입니다. kro를 사용하면 Kubernetes 객체 그룹과 그 사이의 논리적 연산을 만드는 새로운 커스텀 API를 쉽게 구성할 수 있습니다.
EKS 캐퍼빌리티를 통하면 kro가 AWS에 의해 완전 관리되므로, 클러스터에 kro 컨트롤러를 설치하고 유지 관리하며 확장할 필요가 없습니다.
kro 작동 방식
kro는 커스텀 Kubernetes API의 간단하고 매끄러운 생성을 가능하게 하는 ResourceGraphDefinition(RGD)이라는 커스텀 리소스 정의(CRD)를 도입합니다. ResourceGraphDefinition을 만들면 kro가 네이티브 Kubernetes 확장을 사용해 클러스터에 새 API를 생성하고 관리합니다. 이 단일 리소스 스펙에서 kro가 사용자의 스펙에 따라 새 CRD를 만들고 등록하며, 사용자가 새로 정의한 커스텀 리소스를 관리하도록 적응합니다.
RGD는 여러 리소스를 포함할 수 있으며, kro가 상호 의존성과 리소스 순서를 결정하므로 직접 처리할 필요가 없습니다. 한 리소스에서 다른 리소스로 구성을 주입하는 간단한 구문을 사용할 수 있어, 구성(composition)을 크게 단순화하고 클러스터에서 "글루(glue)" 오퍼레이터의 필요를 없앱니다. kro를 사용하면 커스텀 리소스에 네이티브 Kubernetes 리소스뿐 아니라 클러스터에 설치된 모든 커스텀 리소스 정의(CRD)를 포함할 수 있습니다.
kro는 하나의 기본 리소스 유형을 지원합니다.
- ResourceGraphDefinition(RGD) - Kubernetes 커스텀 리소스를 정의하며, 하나 이상의 기본 네이티브 또는 커스텀 Kubernetes 리소스를 캡슐화합니다.
이 리소스 외에도 kro는 이를 사용해 만든 커스텀 리소스와 그 모든 구성 리소스의 수명 주기를 생성하고 관리합니다.
kro는 AWS Controllers for Kubernetes(ACK)와 원활하게 통합되어 워크로드 리소스를 AWS 리소스와 구성해 더 높은 수준의 추상화를 만들 수 있습니다. 이를 통해 조직 표준에 기반한 기본 및 불변 구성 설정으로 자체 클라우드 빌딩 블록을 만들어 리소스 관리를 간소화하고 재사용 가능한 패턴을 가능하게 합니다.
kro의 이점
kro는 플랫폼 팀이 여러 리소스를 더 높은 수준의 추상화로 구성하는 커스텀 Kubernetes API를 만들 수 있게 합니다. 이는 개발자가 간단하고 표준화되며 버전 관리되는 커스텀 리소스로 복잡한 애플리케이션을 배포할 수 있게 해 리소스 관리를 간소화합니다. 일반적인 리소스 조합에 대한 재사용 가능한 패턴을 정의해 조직 전반에 일관된 리소스 생성을 가능하게 합니다.
kro는 값 전달과 조건부 로직을 위해 Kubernetes의 Common Expression Language(CEL)을 사용해 리소스 구성에 유연성을 제공합니다. ACK가 관리하는 Kubernetes 리소스와 AWS 리소스를 모두 통합 커스텀 API로 구성할 수 있어 완전한 애플리케이션과 인프라 정의가 가능합니다.
kro는 Kubernetes 매니페스트를 통한 선언적 구성을 지원해 기존 개발 프로세스와 원활히 통합되는 GitOps 워크플로와 infrastructure as code 방식을 가능하게 합니다. EKS 관리형 캐퍼빌리티의 일부로서 kro는 AWS에 의해 완전 관리되어 클러스터에 kro 컨트롤러를 설치, 구성, 유지 관리할 필요가 없습니다.
예시: ResourceGraphDefinition 생성
다음 예시는 Deployment와 Service가 있는 웹 애플리케이션을 만드는 간단한 ResourceGraphDefinition을 보여줍니다.
apiVersion: kro.run/v1alpha1
kind: ResourceGraphDefinition
metadata:
name: web-application
spec:
schema:
apiVersion: v1alpha1
kind: WebApplication
spec:
name: string
replicas: integer | default=3
resources:
- id: deployment
template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: ${schema.spec.name}
spec:
replicas: ${schema.spec.replicas}
- id: service
template:
apiVersion: v1
kind: Service
metadata:
name: ${schema.spec.name}
사용자가 WebApplication 커스텀 리소스의 인스턴스를 만들면 kro가 해당 Deployment와 Service 리소스를 자동으로 생성하고, 커스텀 리소스와 함께 그 수명 주기를 관리합니다.
다른 EKS 관리형 캐퍼빌리티와의 통합
kro는 다른 EKS 관리형 캐퍼빌리티와 통합됩니다.
- AWS Controllers for Kubernetes(ACK) - kro를 사용해 ACK 리소스를 더 높은 수준의 추상화로 구성하여 AWS 리소스 관리를 간소화합니다.
- Argo CD - Argo CD를 사용해 여러 클러스터에 걸쳐 kro 커스텀 리소스의 배포를 관리하여 플랫폼 빌딩 블록과 애플리케이션 스택에 GitOps 워크플로를 적용할 수 있습니다.
kro 시작하기
kro용 EKS 캐퍼빌리티를 시작하려면:
- AWS 콘솔, AWS CLI 또는 선호하는 infrastructure as code 도구를 통해 EKS 클러스터에 kro 캐퍼빌리티 리소스를 생성합니다.
- 커스텀 API와 리소스 구성을 정의하는 ResourceGraphDefinition(RGD)을 만듭니다.
- 커스텀 리소스의 인스턴스를 적용해 기본 Kubernetes 및 AWS 리소스를 프로비저닝하고 관리합니다.