Kubernetes
-
서비스 접속 테스트용 curl 이미지 설치 및 사용Kubernetes 2025. 3. 10. 08:49
Curl Image 구동 - curl.yaml 내용################################################################################################### Curl service##################################################################################################apiVersion: v1kind: ServiceAccountmetadata: name: curl---apiVersion: v1kind: Servicemetadata: name: curl labels: app: curl service: curlspec: ports:..
-
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..
-
CRD와 CR만 정의하는 경우 활용 사례Kubernetes 2025. 3. 2. 12:05
✅ Controller 없이 CRD와 CR만 정의하는 경우의 유즈케이스Kubernetes에서 CRD(Custom Resource Definition) 와 CR(Custom Resource) 만 정의하고, 컨트롤러를 작성하지 않는 경우에도 몇 가지 유용한 활용 사례가 있습니다. 이러한 경우 주로 데이터 저장, 구성 관리, API 확장 등의 목적으로 사용됩니다. 1️⃣ 선언적 설정 저장소 (Declarative Configuration Storage)CRD를 데이터 저장소로 사용하여 특정 애플리케이션이나 시스템의 설정 값을 Kubernetes 클러스터에 저장할 수 있음.애플리케이션이 Kubernetes API를 통해 CR을 읽어가며 설정을 가져올 수 있음.컨트롤러가 필요 없음 → 애플리케이션이 직접 API ..
-
client-go under the hoodKubernetes 2025. 3. 2. 11:48
아래 내용에 대한 한글 버전:https://github.com/kubernetes/sample-controller/blob/master/docs/controller-client-go.md client-go 라이브러리는 커스텀 컨트롤러(Custom Controller)를 개발할 때 사용할 수 있는 다양한 메커니즘을 제공합니다.이러한 메커니즘은 client-go 라이브러리의 tools/cache 패키지 내에서 정의되어 있습니다.아래 그림은 client-go 라이브러리의 다양한 구성 요소들이 어떻게 동작하는지, 그리고 우리가 작성하는 커스텀 컨트롤러 코드와 어떻게 상호 작용하는지를 나타냅니다. 🔹 client-go 주요 구성 요소1️⃣ Reflectorcache 패키지 내의 Reflector 타입으로 정..
-
client-go의 Reflector와 Watcher의 차이?Kubernetes 2025. 3. 2. 11:41
Kubernetes client-go 라이브러리에서 Reflector와 Watcher는 둘 다 Kubernetes API 서버에서 데이터를 감시(watch)하는 역할을 하지만, 동작 방식과 목적이 다릅니다. Watcher는 저수준 API, Reflector는 캐싱을 지원하는 고수준 API! 1️⃣ Watcher: API 서버의 watch 스트림을 직접 관리🔹 개념Watcher는 API 서버의 watch 엔드포인트를 직접 호출하여 리소스 변경 사항을 실시간으로 감지하는 저수준(LOW-level) 인터페이스입니다.client-go에서 ListerWatcher 인터페이스를 사용하여 직접 구현할 수 있습니다.🔹 동작 방식Kubernetes API 서버의 watch 엔드포인트를 호출하여 변경 사항을 실시간으로..
-
go-client Informer 사용시 Indexer는 선택적으로 사용되는건가?Kubernetes 2025. 3. 2. 11:34
Informer를 사용할 때 Indexer는 필수 요소가 아니며, 필요할 경우 선택적으로 추가할 수 있습니다. 1️⃣ Indexer 없이 Informer만 사용할 경우기본적으로 SharedInformer는 내부적으로 Reflector를 사용하여 데이터를 가져오고, 단순한 캐시(Store) 에 저장합니다.이 경우, 데이터를 가져올 때는 전체 목록을 순회하면서 원하는 데이터를 찾아야 하기 때문에 검색 성능이 낮을 수 있습니다.📌 Indexer 없이 Informer만 사용하는 예제package mainimport ( "fmt" "time" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" ..
-
Informer을 하게 되면 reflector는 자동으로 생성되는가?Kubernetes 2025. 3. 2. 11:30
Informer를 생성하면 내부적으로 Reflector가 자동으로 생성됩니다. 1️⃣ Informer와 Reflector의 관계client-go 라이브러리에서 Informer는 Reflector를 포함하는 구조로 동작합니다.즉, Informer를 사용하면 Reflector가 자동으로 생성되며, 이를 통해 Kubernetes API 서버의 변경 사항을 감지합니다.📌 구조적으로 보면 다음과 같은 관계를 가집니다:Informer → Reflector → ListWatcher → API 서버 Informer: Reflector를 사용하여 API 서버와 동기화하며, 변경 이벤트를 캐시 및 핸들러에 전달.Reflector: ListWatcher를 이용해 API 서버의 데이터를 가져오고 Store(캐시)에 저장.L..
-
client-go library의 Reflector, Informer, Indexer 역할Kubernetes 2025. 3. 2. 11:15
client-go 라이브러리는 Kubernetes API와 상호 작용하기 위한 Go 라이브러리이며, 클라이언트 애플리케이션이 Kubernetes 리소스를 효율적으로 관리할 수 있도록 도와줍니다.이 중에서 Reflector, Informer, Indexer는 Kubernetes API 데이터를 효율적으로 캐싱하고 동기화하는 핵심 컴포넌트입니다. 1️⃣ Reflector🔹 개념Reflector는 Kubernetes API 서버에서 특정 리소스를 감시하고, 변경 사항을 감지하여 로컬 캐시(Store)에 데이터를 동기화하는 역할을 합니다.API 서버의 watch 기능을 사용하여 새로운 리소스, 수정된 리소스, 삭제된 리소스를 감지합니다.🔹 동작 방식API 서버에 LIST 요청을 보내 기존 리소스를 가져옵니다..