operator
-
Operator의 spec과 status 필드 역할Kubernetes 2025. 3. 26. 20:40
spec은 사용자가 의도한 목표 상태이고, status는 현재 실제 시스템의 상태입니다.Operator는 이 둘을 비교해 Reconciliation을 수행하고, 이를 통해 시스템이 항상 원하는 상태를 유지하도록 합니다. 정리: spec과 status의 용도필드용도작성 주체spec사용자가 원하는 목표 상태 (Desired State)를 정의사용자 / Controller 외부 입력status실제 시스템의 현재 상태 (Observed State)를 반영Operator / Controller (자동 갱신)자세한 설명spec – "사용자가 원하는 상태"사용자가 어떻게 동작하길 원하는지를 정의합니다.예를 들어, 파드 개수, 이미지 버전, 리소스 제한, 설정 값 등이 여기에 들어갑니다.Controller는 이 spe..
-
Operator에서 idempotency(멱등성)를 보장하는 방법Kubernetes 2025. 3. 26. 20:36
“Operator는 Kubernetes의 Reconciliation Loop 기반으로 동작하기 때문에, 같은 이벤트가 반복적으로 들어오더라도 결과가 동일해야 하는 멱등성(idempotency) 이 매우 중요합니다.이를 보장하기 위해 저는 다음과 같은 전략을 사용합니다:현재 상태와 Desired 상태를 비교한 후 필요한 작업만 수행합니다. 예를 들어, 리소스를 항상 다시 생성하는 것이 아니라, 이미 존재하고 원하는 상태와 같다면 아무 작업도 하지 않습니다.Status 필드를 적극 활용합니다. 작업이 완료된 경우 해당 상태를 기록하고, 이후 동일한 작업이 재요청되더라도 다시 실행하지 않도록 합니다.생성 시에는 항상 CreateOrUpdate 패턴을 사용하고, 삭제나 업데이트 시에도 리소스가 실제 존재하고 변..
-
CRD를 생성하면 벌어지는 일들Kubernetes 2025. 3. 25. 10:19
kubectl로 CRD(CustomResourceDefinition)를 생성하면 Kubernetes API 서버에 새로운 “Custom API”가 등록됩니다.즉, kubectl create -f mycrd.yaml 같은 명령어로 CRD를 적용하면, Kubernetes는 해당 리소스를 공식 리소스처럼 인식하게 돼요. CRD를 생성하면 무슨 일이 벌어질까? 1. apiextensions.k8s.io/v1의 CRD 오브젝트가 etcd에 저장됨 2. Kubernetes API 서버가 동적으로 해당 CRD를 감지 3. 지정된 group, version, kind에 따라 새로운 RESTful API endpoint가 자동으로 생성됨 • 예: myresources.mygroup.example.com/v1 4. kub..
-
Kubernetes Operator의 RequeueAfter 개념Kubernetes 2025. 3. 22. 18:17
Kubernetes Operator를 만들 때 Reconcile 루프를 일정 시간 후 다시 실행하도록 예약하는 메커니즘입니다.Kubernetes의 controller-runtime 라이브러리에서 주로 사용되고, 특히 외부 상태 동기화, 실패 재시도, 일정 주기 polling이 필요할 때 유용해요. 기본 개념: RequeueAfterreturn ctrl.Result{RequeueAfter: 30 * time.Second}, nil 이 코드는 다음과 같은 의미예요:"현재 리소스에 대해 30초 후에 다시 Reconcile을 호출해줘."즉, Reconcile을 강제로 예약해서 재호출하도록 만드는 기능입니다. 왜 필요할까?Reconcile() 함수는 일반적으로 리소스에 이벤트가 발생했을 때만 호출됩니다.하지만 다..
-
K8S Operator의 Custom Resource 상태 정보를 외부 DB나 외부 API 호출을 통해서 업데이트 해야하는 경우Kubernetes 2025. 3. 22. 17:58
Kubernetes Operator에서 Custom Resource(CR)의 상태 정보를 외부 DB나 외부 API 호출을 통해 업데이트해야 하는 경우, reconcile 루프에서 무조건 호출하는 건 anti-pattern 입니다. 목표: "상태 변화가 있을 때만 외부 상태를 조회하고 .status를 업데이트한다 [패턴 1] 조건부 외부 API 호출 (Reconcile 루프 내 최소 호출)CR의 .spec 또는 .status에 변화가 있을 때만 외부 API/DB를 조회.외부 상태를 조회해 .status를 업데이트.구현 예시:if hasMeaningfulChange(myResource.Spec, myResource.Status) { externalStatus := queryExternalAPI(myRe..
-
Kubernetes Operator를 작성할 때 피해야 할 Anti-patternsKubernetes 2025. 3. 22. 17:37
🔁 1. Reconciliation Loop 남용 / 비효율적인 처리문제: Reconcile 루프에서 너무 많은 로직을 처리하거나, 상태가 바뀌지 않아도 리소스를 계속 업데이트하거나, 외부 API를 호출하는 경우.예시:매번 Deployment를 업데이트하여 rollout이 반복됨외부 DB나 API를 reconcile 루프마다 계속 호출해결: 상태 변화가 있을 때만 필요한 작업을 수행하고, idempotent하게 구현.📦 2. Status 필드 미사용 또는 오용문제: CR의 .status 필드를 사용하지 않거나, 너무 많은 정보를 넣어서 상태 추적이 어려운 경우.해결: 적절한 정보를 넣어 관찰 가능한 상태를 만들고, 컨트롤러는 이 상태를 기준으로 동작해야 함.🧠 3. 컨트롤러가 너무 많은 책임을 가짐..
-
Kubernetes Controller 작성의 핵심 개념Kubernetes 2025. 3. 2. 22:43
Kubernetes 컨트롤러는 특정 리소스의 원하는 상태(Desired State) 와 현재 상태(Current State) 를 비교하고,이를 동기화(Sync)하는 역할을 합니다. 1️⃣ Kubernetes 컨트롤러의 기본 개념컨트롤러는 반복적으로 현재 상태를 확인하고, 원하는 상태로 변경하는 작업을 수행하는 과정입니다.기본 컨트롤러 루프for { desired := getDesiredState() // 원하는 상태 가져오기 current := getCurrentState() // 현재 상태 가져오기 makeChanges(desired, current) // 현재 상태를 원하는 상태로 변경} Kubernetes 컨트롤러는 실시간으로 이벤트를 감지하여 상태를 조정하는 역할을 합니다.Info..
-
Kubernetes Operator 구현에 Watcher 사용Kubernetes 2025. 3. 2. 10:39
Watcher를 사용한 Kubernetes 리소스 감시 예제Watcher는 Kubernetes API 서버와 직접 연결하여 실시간 이벤트를 감지하는 방식입니다.하지만 API 서버 부하가 커질 수 있고, 연결이 끊기면 다시 연결해야 하는 단점이 있습니다. Watcher 기반 Deployment 감시 예제아래 코드는 Watcher를 사용하여 Kubernetes의 Deployment 리소스를 실시간으로 감시합니다.package mainimport ( "context" "fmt" "log" v1 "k8s.io/api/apps/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" ..