T
TechInsights
목록으로
Architecture•2024. 07. 01.

쿠버네티스 오퍼레이터를 Java로 개발해보기

지마켓
지마켓 Engineering Team
쿠버네티스 오퍼레이터를 Java로 개발해보기

핵심요약

원문 보기

이 포스트는 Golang 기반의 쿠버네티스 오퍼레이터 개발 경험을 확장하여, Java Operator SDK를 활용해 쿠버네티스 오퍼레이터를 구현하고 로컬 환경에서 테스트 및 배포하는 방법을 상세히 다룹니다.

Java Operator SDK를 활용한 Kubernetes Operator 구현

Java Operator SDK 아키텍처 및 핵심 구현 요소

  • Java Operator SDK는 fabric8io Kubernetes Client Java API 기반으로, 개발자 친화적인 Java API를 통해 Kubernetes Operator 구현을 간소화합니다.
  • 아키텍처: Operator 내 Controller는 단일 리소스를 조정하며, EventSourceManager가 EventSource의 수명 주기를 관리합니다. Event 발생 시 EventProcessor를 거쳐 ReconcilerDispatcher가 Reconciler 메소드를 호출하여 리소스 상태를 업데이트합니다.
  • 필수 구현: 개발자는 Primary Resource(CRD), Spec 및 Status, Reconciler, 그리고 KubernetesDependentResource(Deployment, Service, Ingress 등)를 Java 클래스로 정의해야 합니다.

Kubernetes Operator 구현 과정

  • 프로젝트 설정: Spring Boot 프로젝트를 생성하고, build.gradle에 io.fabric8:crd-generator-apt 및 io.javaoperatorsdk:operator-framework-spring-boot-starter 의존성을 추가합니다.
  • Custom Resource (CRD) 정의: PetclinicSpec, PetclinicStatus 클래스를 생성하고, 이를 참조하는 Petclinic Primary Resource Class를 @Group, @Version 어노테이션과 함께 CustomResource를 확장하여 구현합니다.
  • Dependent Resource 정의: Deployment, Service, Ingress 등의 Kubernetes 리소스들을 CRUDKubernetesDependentResource를 확장하고 @KubernetesDependent 어노테이션을 사용하여 구현하며, desired() 메소드에서 CR 상태 기반으로 K8s 리소스 manifest를 생성합니다.
  • Reconciler 및 Config: PetclinicReconciler는 Reconciler, ErrorStatusHandler, Cleaner 인터페이스를 구현하며, @ControllerConfiguration을 통해 Dependent Resources를 연결합니다. PetclinicOperatorConfig에서 Reconciler와 Operator를 Spring Bean으로 등록하여 Operator 라이프사이클을 관리합니다.

배포 및 동작 검증

  • CRD 적용: 컴파일 시 자동으로 생성되는 CRD YAML(petclinics.spring.my.domain-v1.yml)을 kubectl apply 명령어로 로컬 Kind 클러스터에 등록합니다.
  • 로컬 및 통합 테스트: PetclinicOperatorJavaApplication 실행 후 Petclinic CR을 배포하여 Deployment, Service, Ingress 생성을 확인하고 Petclinic 웹 페이지 접속을 검증합니다. @EnableMockOperator를 활용하여 Kubernetes 클러스터 모킹을 통한 통합 테스트를 수행합니다.
  • Operator 배포: Gradle Build로 생성된 jar 파일로 Docker 이미지를 빌드 및 푸시한 뒤, Kubernetes 매니페스트를 통해 ServiceAccount, Deployment, ClusterRoleBinding, ClusterRole을 배포하여 Operator를 구동하고 최종 동작을 확인합니다.
#Architecture#BackEnd#Infra
지마켓
지마켓

지마켓 Engineering Team

기술 인사이트를 전달하는 공식 채널

You might also like

View all
토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

토스 피플 : 새로운 길을 만들 땐 내 선택을 믿는다

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기

"이 버튼 왜 안 눌려요?" 물류 현장의 목소리로 PDA 시스템 완성하기