본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

쿠버네티스 컨트롤러 구성

원문 보기 위키 갱신

쿠버네티스 컨트롤러 구성 (Kubernetes controllers configuration)

Calico 쿠버네티스 컨트롤러 구성 리소스(KubeControllersConfiguration)는 Calico 쿠버네티스 컨트롤러의 구성 옵션을 나타내요. 이 리소스로 kube-controllers 컴포넌트가 어떻게 동작할지 제어할 수 있어요. 이 문서에서는 리소스의 구조와 각 필드의 의미를 하나씩 살펴봐요.

출처: 문서

본문

이 문서에서는 KubeControllersConfiguration 리소스의 샘플 YAML과 필드별 정의를 차례로 살펴봐요.

샘플 YAML

apiVersion: projectcalico.org/v3
kind: KubeControllersConfiguration
metadata:
  name: default
spec:
  logSeverityScreen: Info
  healthChecks: Enabled
  etcdV3CompactionPeriod: 10m
  prometheusMetricsPort: 9094
  controllers:
    node:
      reconcilerPeriod: 5m
      leakGracePeriod: 15m
      syncLabels: Enabled
      hostEndpoint:
        autoCreate: Disabled
        createDefaultHostEndpoint: Enabled
        templates:
          - generateName: custom-host-endpoint
            interfaceCIDRs:
              - 1.2.3.0/24
            interfacePattern: "eth0|eth1"
            nodeSelector: "has(my-label)"
            labels:
              key: value
            annotations:
              key: value
    policy:
      reconcilerPeriod: 5m
    workloadEndpoint:
      reconcilerPeriod: 5m
    serviceAccount:
      reconcilerPeriod: 5m
    namespace:
      reconcilerPeriod: 5m
    loadbalancer:
      assignIPs: AllServices

쿠버네티스 컨트롤러 구성 정의

메타데이터 (Metadata)

필드 설명 허용 값 스키마
name 이 리소스 인스턴스를 설명하는 고유 이름이에요. 반드시 지정해야 해요. default여야 해요 string
  • Calico가 구성 설정을 담은 default라는 이름의 리소스를 자동으로 만들어 줘요. default라는 이름만 사용되고 이 타입의 객체는 하나만 허용돼요. calicoctl로 이 설정을 조회하고 수정할 수 있어요.

스펙 (Spec)

필드 설명 허용 값 스키마 기본값
logSeverityScreen 이 로그 심각도 이상의 로그를 stdout으로 보내요. Debug, Info, Warning, Error, Fatal string Info
healthChecks 헬스 체크 지원을 활성화해요. Enabled, Disabled string Enabled
prometheusMetricsPort Prometheus 메트릭을 서빙할 포트예요. 0으로 설정하면 비활성화, 0보다 크면 활성화 TCP 포트 9094
etcdV3CompactionPeriod etcdv3 compaction 요청 사이의 주기예요. Calico 데이터스토어로 etcd를 사용할 때만 적용돼요. 0으로 설정하면 비활성화, 0보다 크면 활성화 Duration string 10m
controllers 활성화된 컨트롤러와 그 설정이에요. Controllers

컨트롤러 (Controllers)

필드 설명 스키마
node node 컨트롤러를 활성화하고 구성해요. 비활성화하려면 생략, 또는 NodeController
policy network policy 컨트롤러를 활성화하고 구성해요. 비활성화하려면 생략, 또는 PolicyController
workloadEndpoint workload endpoint 컨트롤러를 활성화하고 구성해요. 비활성화하려면 생략, 또는 WorkloadEndpointController
serviceAccount service account 컨트롤러를 활성화하고 구성해요. 비활성화하려면 생략, 또는 ServiceAccountController
namespace namespace 컨트롤러를 활성화하고 구성해요. 비활성화하려면 생략, 또는 NamespaceController

NodeController

node 컨트롤러는 더 이상 존재하지 않는 노드의 구성을 자동으로 정리해요. 선택적으로 모든 쿠버네티스 노드에 호스트 엔드포인트를 만들 수도 있어요.

필드 설명 허용 값 스키마 기본값
reconcilerPeriod Calico 데이터스토어와 재조정(reconciliation)을 수행하는 주기예요. Duration string 5m
syncLabels 활성화하면 쿠버네티스 노드 레이블이 Calico 노드 객체로 복사돼요. Enabled, Disabled string Enabled
hostEndpoint 호스트 엔드포인트 컨트롤러를 구성해요. HostEndpoint
leakGracePeriod 유출(leak)이 의심되는 IP 주소를 가비지 컬렉션할 때 사용하는 유예 기간이에요. Duration string 15m

HostEndpoint

필드 설명 허용 값 스키마 기본값
autoCreate 활성화하면 호스트 엔드포인트를 자동으로 생성해요. Enabled, Disabled string Disabled
createDefaultHostEndpoint 활성화하면 기본 호스트 엔드포인트가 생성돼요. Enabled, Disabled string Enabled
templates 커스텀 호스트 엔드포인트 생성을 제어해요. Template

Template

필드 설명 허용 값 스키마 기본값
generateName 이 템플릿을 기반으로 생성되는 호스트 엔드포인트의 접미사로 쓰이는 고유 이름이에요. 영숫자 문자열 string
nodeSelector 이 템플릿이 호스트 엔드포인트를 생성할 노드를 고르세요. Selector all()
interfaceCIDRs 노드 사양(표준, 터널, WireGuard IP 포함)의 어떤 IP 주소를 생성되는 HostEndpoint에 포함할 수 있는지 정의하는 설정이에요. IP 주소가 지정된 CIDR 범위 안에 있어야 후보가 될 수 있어요. 노드의 어떤 주소도 지정된 CIDR와 맞지 않으면 HostEndpoint 생성은 건너뛰어져요. 유효한 CIDR 목록 List string
interfacePattern 일치하는 인터페이스와 그 IP를 포함시키는 정규식이에요. string string
labels 이 템플릿에 매칭되는 생성된 호스트 엔드포인트에 추가할 레이블이에요. 문자열 키에 문자열 값인 map
annotations 이 템플릿에 매칭되는 생성된 호스트 엔드포인트에 추가할 어노테이션이에요. 문자열 키에 문자열 값인 map

셀렉터 (Selectors)

레이블 셀렉터는 리소스의 레이블을 기준으로 매칭 여부를 판단하는 표현식이에요.

Calico 레이블 셀렉터는 여러 연산자를 지원하고, 불리언 연산자와 괄호를 사용해 더 큰 표현식으로 조합할 수 있어요.

표현식 의미
논리 연산자
( <expression> ) <expression>이 매칭될 때, 그리고 그때만 매칭돼요. (괄호는 표현식을 묶는 용도로 사용해요.)
! <expression> <expression>이 매칭되지 않을 때, 그리고 그때만 매칭돼요. 팁: !는 YAML 문자열의 시작 위치에서는 특수 문자예요. YAML 문자열 시작에 !를 써야 한다면 문자열을 따옴표로 감싸세요.
<expression 1> && <expression 2> "And": <expression 1>과 <expression 2> 둘 다 매칭될 때, 그리고 그때만 매칭돼요
<expression 1> || <expression 2> "Or": <expression 1> 또는 <expression 2>가 매칭될 때, 그리고 그때만 매칭돼요.
매치 연산자
all() 스코프 안의 모든 리소스와 매칭해요. 아무 리소스도 매칭하지 않으려면 !와 조합해 !all()을 만드세요.
global() 네임스페이스에 속하지 않는 모든 리소스와 매칭해요. 글로벌 네트워크 셋 같은 글로벌 리소스를 고르는 namespaceSelector에서 유용해요.
k == 'v' 레이블 'k'와 값 'v'를 가진 리소스와 매칭해요.
k != 'v' 레이블 'k'가 없거나, 레이블 'k'의 값이 v와 같지 않은 리소스와 매칭해요
has(k) 값과 상관없이 레이블 'k'를 가진 리소스와 매칭해요. 레이블 k가 없는 파드를 매칭하려면 !와 조합해 !has(k)를 만드세요
k in { 'v1', 'v2' } 레이블 'k'를 가지고 값이 주어진 집합에 속하는 리소스와 매칭해요
k not in { 'v1', 'v2' } 레이블 'k'가 없거나, 레이블 'k'의 값이 주어진 집합에 속하지 않는 리소스와 매칭해요
k contains 's' 레이블 'k'를 가지고 값이 부분 문자열 's'를 포함하는 리소스와 매칭해요
k starts with 's' 레이블 'k'를 가지고 값이 부분 문자열 's'로 시작하는 리소스와 매칭해요
k ends with 's' 레이블 'k'를 가지고 값이 부분 문자열 's'로 끝나는 리소스와 매칭해요

연산자 우선순위는 다음과 같아요:

  • 가장 높음: 모든 매치 연산자
  • 괄호 ( ... )
  • !를 사용한 부정
  • &&를 사용한 논리곱(conjunction)
  • 가장 낮음: ||를 사용한 논리합(disjunction)

예를 들어 다음 표현식은

! has(my-label) || my-label starts with 'prod' && role in {'frontend','business'}

이렇게 "괄호로 묶여" 있어요:

((!(has(my-label)) || ((my-label starts with 'prod') && (role in {'frontend','business'}))

이 표현식은 다음에 매칭돼요:

  • "my-label" 레이블이 없는 모든 리소스.

  • 다음 두 조건을 모두 만족하는 모든 리소스:

    • my-label 값이 "prod"로 시작하고,
    • role 레이블의 값이 "frontend" 또는 "business" 중 하나인 경우.

PolicyController

policy 컨트롤러는 쿠버네티스 네트워크 정책을 Calico 데이터스토어로 동기화해요. 이 컨트롤러는 Calico 데이터스토어로 etcd를 사용할 때만 유효해요.

필드 설명 스키마 기본값
reconcilerPeriod Calico 데이터스토어와 재조정(reconciliation)을 수행하는 주기예요. Duration string 5m

WorkloadEndpointController

workload endpoint 컨트롤러는 쿠버네티스 파드 레이블 변경을, 해당하는 워크로드 엔드포인트를 알맞게 갱신하는 방식으로 Calico 데이터스토어에 자동으로 동기화해요. 이 컨트롤러는 Calico 데이터스토어로 etcd를 사용할 때만 유효해요.

필드 설명 스키마 기본값
reconcilerPeriod Calico 데이터스토어와 재조정(reconciliation)을 수행하는 주기예요. Duration string 5m

ServiceAccountController

service account 컨트롤러는 쿠버네티스 서비스 어카운트 변경을 Calico 데이터스토어로 동기화해요. 이 컨트롤러는 Calico 데이터스토어로 etcd를 사용할 때만 유효해요.

필드 설명 스키마 기본값
reconcilerPeriod Calico 데이터스토어와 재조정(reconciliation)을 수행하는 주기예요. Duration string 5m

NamespaceController

namespace 컨트롤러는 쿠버네티스 네임스페이스 레이블 변경을 Calico 데이터스토어로 동기화해요. 이 컨트롤러는 Calico 데이터스토어로 etcd를 사용할 때만 유효해요.

필드 설명 스키마 기본값
reconcilerPeriod Calico 데이터스토어와 재조정(reconciliation)을 수행하는 주기예요. Duration string 5m

LoadBalancerController

load balancer 컨트롤러는 LoadBalancer 타입 서비스의 IPAM을 관리해요.

필드 설명 허용 값 스키마 기본값
assignIPs LoadBalancer 컨트롤러가 동작하는 모드예요. AllServices, RequestedServicesOnly String AllServices

더 알아보기 (Learn more)

  • 각 컨트롤러의 reconcilerPeriod를 조절하면 kube-controllers가 데이터스토어와 동기화하는 주기를 튜닝할 수 있어요.
  • policy, workloadEndpoint, serviceAccount, namespace 컨트롤러는 Calico 데이터스토어로 etcd를 쓰는 배포에서만 유효하다는 점을 기억하세요.
  • kube-controllers 자체의 구성 방법은 쿠버네티스 컨트롤러 구성 문서에서 더 볼 수 있어요.