쿠버네티스 컨트롤러 구성
쿠버네티스 컨트롤러 구성 (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 자체의 구성 방법은 쿠버네티스 컨트롤러 구성 문서에서 더 볼 수 있어요.