Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- chrony
- 도커프라이빗레지스트리
- 쿠버네티스 구조
- 인그래스
- 노드포트
- k8s
- 여러 레지스트리를 하나의 시크릿으로 묶고
- ingresscontroller
- ingress
- clustermanagement
- kubectl
- 포트추적
- servertimesync
- createvsapply
- 쿠버네티스
- kubernetes
- 인그래스컨트롤러
- networktimeprotocol
- ingressrules
- nodeport
- servicemesh
- 컨테이너런타임 재시작
- 인증서설치후 런타임 재시작
- apply
- 이미지풀시크릿생성
- 프라이빗레지스트리
- ingressservice
- timesynchronization
- 원격서버지원
- 쿠버네티스 인그래스 컨트롤러 구성 예시
Archives
- Today
- Total
madebychung
kubectl apply로 리소스를 업데이트할 때 실제로 어떤 정보가 어떻게 바뀌는가?(apply, patch) 본문
📌 kubectl apply로 리소스를 업데이트할 때 실제로 어떤 정보가 어떻게 바뀌는가?
kubectl apply는 사용자가 마지막으로 적용한 YAML의 내용을 쿠버네티스 리소스 메타데이터에 저장해두고, 클러스터 상태와 비교하여 변경된 부분만 반영하는 방식입니다.
📌 핵심 동작 원리
apply는 리소스 메타데이터에kubectl.kubernetes.io/last-applied-configuration주석을 저장함- 새로운 YAML이 들어오면 이 주석과 현재 클러스터 상태를 비교함
- 변경된 필드만 Kubernetes 리소스를 업데이트함
🔍 예시
kubectl apply -f deployment.yaml
spec:
replicas: 3
만약 이전에 replicas: 2였다면, apply는 이 필드만 변경합니다.
✅ 요약
- 전체를 덮어쓰는 것이 아니라, 이전에 저장한 구성과 비교하여 변경된 필드만 업데이트
kubectl create는 비교 없이 리소스를 새로 만들지만,apply는 상태 추적 기반으로 동작함
📌 이미 수동으로 수정한 리소스를 apply 하면 충돌이 생길 수 있는데, 그 해결법은?
kubectl apply는 이전에 적용했던 YAML을 기준으로 변경점을 계산합니다.
하지만 사용자가 kubectl edit이나 API로 직접 리소스를 수정하면 기준과 실제 상태가 달라져 충돌이 발생할 수 있습니다.
⚠️ 충돌 시나리오
- 사용자가
kubectl edit으로 직접 리소스를 변경 - 이후 기존 YAML을
apply하면, 수동 변경 사항이 덮어씌워짐
🔧 해결 방법
- YAML 파일을 Git에서 관리하고 직접 수정하지 않기
kubectl apply view-last-applied로 마지막 적용된 구성 확인- 현재 상태를 기준으로 YAML 추출:
kubectl get deployment nginx -o yaml > latest.yaml - 수동 변경 후엔 꼭 YAML도 반영해서 apply 해야 함
✅ 요약
apply는 YAML 중심의 선언적 관리 방식이므로, 수동 변경은 위험- 일관성을 위해 모든 변경을 YAML로 통합 관리해야 안전함
📌 kubectl patch는 apply와 어떤 차이가 있고, 언제 쓰면 좋을까?
kubectl patch는 전체 YAML이 아닌 일부 필드만 빠르게 수정하고 싶을 때 사용됩니다.
🔄 주요 차이점
| 항목 | kubectl apply | kubectl patch |
|---|---|---|
| 방식 | 선언적 (전체 YAML) | 명령적 (필드 단일 변경) |
| 추적 정보 | last-applied 저장 | 없음 |
| 대상 | 전체 리소스 구조 | 특정 필드만 변경 |
| 사용 예 | GitOps, 버전관리 | 긴급 설정 변경, 스크립트용 |
💡 patch 예시
kubectl patch deployment nginx -p '{"spec":{"replicas":2}}'
→ nginx 배포의 replica 수를 2로 변경
📌 언제 patch를 써야 하나?
- 간단한 값만 변경할 때 (replica, image, env 등)
- CI/CD 스크립트에서 빠르게 조정할 때
- 실시간 설정 반영이 필요할 때 (긴급 대응)
✅ 요약
apply는 전체 YAML을 기준으로 상태를 관리하는 방식patch는 짧고 빠르게 한두 필드만 바꿔야 할 때 유용함
'K8s' 카테고리의 다른 글
| 쿠버네티스 Ingress 완전 정리 (Ingress / Ingress Controller / Ingress Service 헷갈림 끝!) (0) | 2025.04.08 |
|---|---|
| 📌 kubectl describe로 리소스 상태 추적하는 방법 (0) | 2025.04.08 |
| 📌 kubectl apply vs create 차이점 정복 (0) | 2025.04.08 |
| 🧩 쿠버네티스 구조: kubectl 명령어가 처리되는 전체 흐름도 + 구성 요소 역할 (0) | 2025.04.07 |
| Kubernetes Ingress Controller 설정 및 확인 방법 (0) | 2024.12.11 |