




해당 노드 배포된 파드 삭제 시
해당 노드 네트워크 통신 불가 경우
삭제 불가
ReplicaSet 의 경우
kubectl edit rs [] 변경 시 미적용
tag 명시 해줘야 추후 편집 시 충돌 없음
Deploy,statefulset 경우
kubectl edit deploy/sts [] 변경 시 자동 재생성
kubectl scale rs my-rs --replicas 3
kubectl scale deploy my-rs --replicas 3
kubectl scale --replicas 5 sts/[set]
[연산자]
연산자
어떤 노드에 파드를 스케줄링 여부 결정 조건
- In : key 와 values 지정 -> key,value 일치 파드 검색
- Notin : key 일치 / value 불일치 파드 검색
- Exsits : 키에 맞 label 파드 검색
-----------------------------------------
In : 해당 값이 포함된 노드만 허용(key,value)
NotIn : 해당 값이 없는 노드만 허용(key 일치 ,value)
Exists : 해당 key가 존재하는 노드 허용 (값은 상관없음)
DoesNotExist : 해당 key가 없는 노드만 허용
Version 존재 { key: version Operator: Exsits}
Version 미존재 { key: version Operator: DoesNotExsits
[라벨 생성 및 삭제]
kubectl label node [] disktype=ssd
kubectl label node [] disktype-
kubectl get node [] -l disktype=ssd
kubecl get all
✅ In
- 설명: 해당 키(key)가 지정된 값들(values) 중 하나와 일치하는 노드만 허용
- key: disktype
operator: In
values: ["ssd"]
→ `disktype = ssd`인 노드에만 파드가 스케줄링됨
✅ NotIn
- 설명: 해당 키가 존재하고, 지정된 값들과 일치하지 않는 노드만 허용
- key: zone
operator: NotIn
values: ["us-west1", "us-east1"]
→ `zone`이라는 key는 있어야 하고,
값이 "us-west1"이나 "us-east1"이 **아닌 노드**만 허용
✅ Exists
- 설명: 해당 키(key)만 존재하면 허용 (값은 상관없음)
- key: gpu
operator: Exists
→ `gpu`라는 라벨 key만 있으면 OK
✅ (보너스) DoesNotExist
- 설명: 해당 key가 없는 노드만 허용
- key: test
operator: DoesNotExist
→ `test`라는 key가 없는 노드에만 파드가 스케줄링됨

kubectl get pod --show-labels
kubectl describe pod | grep labels
kubectl scale rs ng-rs --replicas 3 / 0
kubectl delete rs ng-rs --cascade=orphan

해당 POD 변동 없음 확인 가능
✅ Deployment 롤백하는 방법
0. 롤링 업데이트
kubectl create -f de.yml --record
kubectl rollout history deploy(ment) [deploy]

Deploy 경우
1. kubectl edit deploy [] 변경 시 자동 재생성
2. kubectl set image deploy/[deploy] [con]=nginx:1.15 (--record)
Flag --record has been deprecated, --record will be removed in the future
deployment.apps/deploy image updated
👉 수동 기록 예시:
kubectl annotate deployment mynginx-deploy \\ kubernetes.io/change-cause="nginx 1.21 버전 업데이트"

1. 배포 이력 확인
kubectl rollout history deployment <배포이름>
2. 이전 버전으로 롤백
kubectl rollout ***undo*** deployment <배포이름>
- 가장 최근의 이전 버전으로 자동 롤백됨.

3. 특정 버전으로 롤백
kubectl rollout ***undo*** deployment <배포이름> --to-revision=<숫자>
숫자는 revision 번호
🔍 실수한 kubectl apply에 대한 롤백은?
kubectl apply -f ~로 배포했는데
YAML 내용이 잘못되었다면:
- 기존 YAML 백업본으로 apply 재진행
- 예전 설정을 복원하고 싶다면 kubectl get deploy <이름> -o yaml > backup.yaml
vi mydeploy.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mydeploy
spec:
revisionHistoryLimit: 10 <- history limit
replicas: 4
selector:
matchLabels:
app: webui
template:
metadata:
name: ng-deploy
labels:
app: webui
spec:
containers:
- name: nginx
image: nginx:1.14
[자동 스크립트 추가 실습]
✅ 자동화 스크립트 (Bash 기준)
#!/bin/bash
DEPLOYMENT=mynginx-deploy
CONTAINER=nginx
IMAGE=$1
CAUSE=$2
# 이미지 업데이트
kubectl set image deployment/$DEPLOYMENT $CONTAINER=$IMAGE
# 변경 사유 수동 주석(annotation)
kubectl annotate deployment $DEPLOYMENT kubernetes.io/change-cause="$CAUSE" --overwrite
# 상태 출력
echo "✅ 이미지 업데이트 완료: $CONTAINER → $IMAGE"
echo "📌 변경 사유 기록: $CAUSE"
kubectl rollout status deployment/$DEPLOYMENT
-----------------------------------------
🧪 사용 예시
스크립트를 update-deploy.sh로 저장
실행 권한 부여
chmod +x update-deploy.sh
./update-deploy.sh nginx:1.21($1) "보안 패치 적용을 위한 업데이트"($2)
nginx 이미지를 1.21로 변경
CHANGE-CAUSE에는 "보안 패치 적용을 위한 업데이트" 문구 기록됨

bash -x /test.sh nginx:1.21 "보안 업데이트"
kubectl describe pod -A | grep Image: nginx

apiVersion: apps/v1
kind: Deployment
metadata:
name: mydep
annomations:
kubernetes.io/change-cause: version 1.14
spec:
revisionHistoryLimit: 10 <- history limit
***replicas:*** 3
***selector:***
matchLabels:
app: webui
template:
***metadata:***
labels:
app: webui
***spec:***
containers:
- name: myweb
image: nginx:1.14
kubectl apply -f deployment

'IT 엔지니어 > CLOUD' 카테고리의 다른 글
| K8S - Service (0) | 2025.05.30 |
|---|---|
| K8S - STATEFULSET (0) | 2025.05.29 |
| K8S- daemonset (0) | 2025.05.27 |
| K8S Controller (0) | 2025.05.26 |
| 초기화/인프라 컨테이너 (0) | 2025.05.25 |