개요
- managedFields
- 매니지드 필드
- k8s 오브젝트의 메타데이터에 포함되는 필드로, 각 매니저(manager)가 어떤 필드를 언제 마지막으로 수정했는지를 추적한다.
- Server-Side Apply(SSA)의 핵심 요소로, 3-way 병합을 구현하기 위해 사용된다.
- 오브젝트의
metadata.managedFields에 배열 형태로 저장된다.
동작
- API 서버는 각 리소스에 대해 필드 단위 변경 내역을 기록한다.
- 기록 항목에는 매니저 이름, API 버전, 운영 방식(apply/patch 등), 필드 경로 등이 포함된다.
- 여러 클라이언트(kubectl, 컨트롤러, 오퍼레이터 등)가 동시에 같은 오브젝트를 수정하더라도, SSA는 managedFields를 기반으로 변경 충돌을 감지하고 병합할 수 있다.
구조 예시
apiVersion: v1
kind: ConfigMap
metadata:
name: example
managedFields:
- manager: kubectl-client-side-apply
operation: Update
apiVersion: v1
time: "2024-09-07T12:34:56Z"
fieldsType: FieldsV1
fieldsV1:
f:data:
.: {}
f:KEY: {}
manager: 변경을 가한 주체 이름 (예: kubectl, controller)operation: 변경 방식 (Apply, Update, Patch 등)fieldsType: 필드 추적 방식 (현재는 주로FieldsV1)fieldsV1: 실제 필드 경로 트리 구조
활용
- SSA에서 3-way diff의 base 역할을 담당한다.
- 컨트롤러와 사용자가 같은 오브젝트를 관리할 때, 어떤 필드를 누가 소유하는지 추적할 수 있다.
- 충돌(conflict)이 발생하면 kubectl이나 API 서버가 이를 알려주고, 사용자가 명시적으로 해결해야 한다.