Kubernetes 확장 메커니즘 퀴즈
원문의 20개 문제 주제를 현재 API·동작에 맞춰 검토했습니다.
1. CRD의 목적은 무엇인가요?
정답 보기
Kubernetes API에 사용자 리소스 타입과 입력 schema를 등록합니다. 자체로 workload 동작을 구현하지 않습니다.
2. reconciliation loop는 무엇을 하나요?
정답 보기
관찰된 상태와 원하는 상태의 차이를 조정합니다. 반복·중복 이벤트, 재시작과 conflict에도 일관되게 처리하고 상태가 같으면 불필요한 update를 줄입니다.
3. Operator의 핵심 구성과 한계는 무엇인가요?
정답 보기
사용자 API와 controller에 도메인 운영 지식을 구현하는 패턴입니다. CRD/controller를 만들었다는 이유만으로 안전한 backup·failover·upgrade가 완성되지는 않습니다.
4. mutating webhook은 무엇을 반환하나요?
정답 보기
AdmissionReview 응답으로 허용·거절과 선택적인 JSONPatch를 반환합니다. request UID와 version을 맞추며 patch byte는 Base64로 전달합니다.
5. Filter plugin의 역할은 무엇인가요?
정답 보기
Pod 조건을 충족하지 못하는 node를 후보에서 제외합니다. filter가 성공했다고 실제 binding이나 실행이 완료된 것은 아닙니다.
6. aggregation과 CRD는 어떻게 다른가요?
정답 보기
CRD는 기존 API server의 사용자 리소스 저장·검증 기능을 사용합니다. aggregation은 별도 API server로 요청을 위임하므로 TLS·인증·인가·discovery·storage 운영이 필요합니다.
7. finalizer는 무엇을 보장하나요?
정답 보기
삭제 완료 전에 controller가 정리할 기회를 제공합니다. finalizer 문자열 자체가 정리 작업을 실행하지는 않으며, 원인 확인 없이 제거하면 외부 리소스를 남길 수 있습니다.
8. PostBind는 언제 실행되나요?
정답 보기
성공적인 binding 뒤의 정보성 단계입니다. 모든 작업 정리에 사용되는 보편적 오류 복구 hook이 아니며 Reserve 실패/취소에는 Unreserve 같은 해당 경로를 구현합니다.
9. 현재 Istio Pod별 주입 제어는 어디에 설정하나요?
정답 보기
Pod 또는 workload의 Pod template labels에 sidecar.istio.io/inject를 설정합니다. namespace의 istio-injection/revision label과 우선순위도 확인하며 이전 annotation을 새 기본값으로 쓰지 않습니다.
10. Score는 어떻게 사용되나요?
정답 보기
적합한 node의 점수를 정하고 NormalizeScore와 plugin weight를 반영해 결합합니다. 동률 선택과 실패 처리도 scheduler 동작의 일부입니다.
11. CRD의 schema와 required는 어디에 두나요?
정답 보기
spec.versions[].schema.openAPIV3Schema 아래에 정의합니다. 최상위 required: [spec]과 spec 내부 required: [image]는 서로 다른 조건입니다.
12. ownerReference는 무엇을 확인해야 하나요?
정답 보기
owner UID와 namespace/scope, 기존 controller 소유권을 확인합니다. GC는 propagation/finalizer 영향을 받으며 이름만 같다고 다른 workload를 가져오지 않습니다.
13. VAP와 validating webhook은 어떻게 다른가요?
정답 보기
ValidatingAdmissionPolicy는 1.30부터 stable이며 API server 안에서 CEL을 평가합니다. webhook은 외부 호출과 TLS·가용성 관리가 필요합니다. VAP에는 적용 범위와 validationActions를 연결하는 binding도 필요합니다.
14. controller-runtime은 무엇을 제공하나요?
정답 보기
manager, client/cache, reconcile 구성과 leader election 등을 제공합니다. 사용자 API 타입·scheme·RBAC와 도메인 로직을 대신 만들어 주지는 않으며 library/Kubernetes Go module 버전을 맞춥니다.
15. conversion webhook의 역할은 무엇인가요?
정답 보기
같은 CRD의 API version 사이에서 표현을 변환합니다. serving/storage version, storedVersions와 기존 데이터의 의미 보존을 검토합니다. 모든 CRD가 conversion webhook을 필요로 하는 것은 아닙니다.
16. image가 필수이며 replica가 1~5인 WebApp CRD를 작성하세요.
정답 보기
아래 예제는 spec 자체도 필수로 지정하고 status/scale 경로를 분리합니다. controller가 실제 status.replicas와 selector를 채워야 합니다.
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: webapps.apps.example.com
spec:
group: apps.example.com
names:
kind: WebApp
plural: webapps
singular: webapp
shortNames: [wa]
scope: Namespaced
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
required: [spec]
properties:
spec:
type: object
required: [image]
properties:
replicas:
type: integer
default: 1
minimum: 1
maximum: 5
image:
type: string
minLength: 1
port:
type: integer
default: 8080
minimum: 1
maximum: 65535
status:
type: object
properties:
replicas:
type: integer
availableReplicas:
type: integer
selector:
type: string
observedGeneration:
type: integer
format: int64
subresources:
status: {}
scale:
specReplicasPath: .spec.replicas
statusReplicasPath: .status.replicas
labelSelectorPath: .status.selector17. production namespace의 Deployment 검증 webhook을 어떻게 제한하나요?
정답 보기
rules를 apps/v1 deployments의 CREATE/UPDATE로 제한하고 namespaceSelector에 kubernetes.io/metadata.name: production을 사용합니다. 실제 validating server/Service/path, CA bundle, failurePolicy, timeoutSeconds, sideEffects와 admissionReviewVersions를 설정합니다. 본문의 /mutate handler는 Deployment validator가 아니므로 그 경로를 재사용하지 않습니다. replica 범위만 필요하면 본문의 VAP+binding 예제를 사용하고 deployments와 deployments/scale을 모두 매칭해 HPA 및 kubectl scale 갱신도 제한을 검사하도록 합니다.
18. 안전한 reconcile 순서를 설명하세요.
정답 보기
NotFound를 정상 종료하고 삭제 중이면 idempotent cleanup 후 자신의 finalizer만 제거합니다. 외부 자원을 만들기 전 finalizer를 저장하고, 기존 child 소유권을 확인한 뒤 관리 필드만 조정합니다. conflict를 재시도하고 관찰한 상태가 바뀔 때 status를 patch합니다. 의사코드를 완성된 실행 controller로 표시하지 않습니다.
19. 분산 DB Operator를 설계할 때 무엇이 필요한가요?
정답 보기
API/schema와 workload 생성 외에 primary fencing, quorum, replica 동기화, backup/WAL 복구 시험, storage lifecycle, migration 호환성과 실패 상태를 설계합니다. Service/StatefulSet/CronJob을 생성하는 것만으로 데이터 안전성이 검증되지 않습니다.
20. custom scheduler 구현과 검증 절차는 무엇인가요?
정답 보기
정확한 Kubernetes minor의 framework interface로 plugin을 compile·register한 binary를 만듭니다. profile plugin 이름과 Pod schedulerName을 맞추고 Filter/Score 및 Reserve/Unreserve/Permit/binding 실패를 검증합니다. YAML만 추가해서 plugin을 설치할 수 없으며 단순 zone 요구라면 node affinity를 먼저 검토합니다.