본문 바로가기

IT 엔지니어/CLOUD

k8S - REPLICASET

 

 

 

 

해당 노드 배포된 파드 삭제 시 
해당 노드 네트워크 통신 불가 경우
삭제 불가

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가 없는 노드에만 파드가 스케줄링됨

 

 


Replicaset 삭제 시 pod 동시 삭제

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

 

 

--cascade-orphan 입력 시 replicaset만 삭제

해당 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