쿠버네티스 교육내용 리뷰 - ReplicaSet, Deployment

shJeong19·2023년 7월 26일

kubernetes

목록 보기
6/10

ReplicaSet

  • Pod는 언제든지 삭제, 생성될 수 있는 리소스.
    레플리카셋으로 파드를 생성하면 레플리카셋에 속해있는 파드가 삭제되도 자동으로 재생성 됨.

  • apache 레플리카셋 생성.

# rep-apache.yml

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: rep-apache
  labels:
    replica: apache
spec:
  replicas: 3
  template:
    metadata:
      name: httpd
      labels:
        app: httpd
    spec:
      containers:
      - name: apache
        image: httpd
        imagePullPolicy: Never
        ports:
        - containerPort: 80
  selector:
    matchLabels:
      app: httpd


# replicas: 레플리카셋에 만들 파드의 갯수. 워커노드에 맞춰 자동으로 분산해서 생성한다.
# selector: template에 입력한 라벨을 입력해서 레플리카셋과 파드간 매칭한다.
  • 생성된 레플리카셋과 파드 조회

  • 여기서 파드를 삭제하고 재생성 과정 확인.

kubectl get pod,rs
kubectl delete pod rep-apache-7d8zn
kubectl get pod,rs
  • rep-apache-7d8zn 파드를 삭제하면 레플리카셋이 자동으로 rep-apache-zmhtr 파드를 생성했다.

  • 레플리카셋을 삭제하려면 레플리카셋 자체를 지워야 한다.

kubectl delete rs rep-apache

Deployment

  • 레플리카셋을 관리하는 상위 개념.
  • 파드, 레플리카셋을 배포하고 관리하는 역할을 담당한다.
    실질적으로는 레플리카셋이나 파드를 따로 만드는것 보다 디플로이먼트 단위로 오브젝트 컨트롤을 할것 같다.
# dep-nginx.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep-nginx
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: webserver
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
  selector:
    matchLabels:
      app: nginx


# 파일의 내용이 레플리카셋과 크게 다르지는 않다. kind만 Deployment로 바뀐것 뿐.
  • 생성한 디플로이먼트, 레플리카셋, 파드를 모두 조회한다.
kubectl get deploy,rs,pod

  • 파드를 삭제했을때는 레플리카셋과 마찬가지로 자동으로 생성되고
    레플리카셋을 삭제했을때도 재생성 되는지 확인.
kubectl delete rs dep-nginx-69cb5cf5b9

kubectl get deploy,rs,pod

  • 레플리카셋을 삭제하면 실제로 레플리카셋과 파드가 모두 재생성 되는걸 확인할 수 있는데 파드명은 변경되지만 레플리카셋의 name은 변경되지 않는다.

디플로이먼트의 장점

  • 파드 내 컨테이너의 변경사항이 있을때 파드를 새로 생성하는 과정에서 롤링업데이트를 진행한다.(무중단배포)
kubectl set image deployment/dep-nginx webserver=nginx:1.16

# kubectl set image deployment/<DEPLOYMENT명> <CONTAINER명>=<업데이트할이미지>
# 실행하고 확인결과 새로운 파드를 먼저 생성하고 이전파드를 삭제하는 롤링업데이트가 정상적으로 진행되었다.
# 레플리카셋도 새로 실행되고 이전 레플리카셋은 리비전 정보로 남겨둔다.

  • 위와같은 업데이트 과정에서 컨테이너할 이미지를 잘못 입력해서 에러가 날 경우 롤링업데이트를 중지하고 그대로 멈춘다.
    하지만 이전 버전의 파드는 계속 유지되고 있어서 서비스의 중단은 일어나지 않는다.
kubectl set image deployment/dep-nginx webserver=nginx:1.2.3

# nginx:1.23으로 업데이트 해야하는걸 1.2.3으로 잘못 입력했을때를 가정한다.

  • 위 그림과 같이 레플리카셋과 파드에 ImagePullBackOff오류가 발생하면서 그대로 중지한다.
    이럴 경우 안정적인 이전버전으로 롤백한다.
kubectl rollout undo deployment/dep-nginx
  • 이전에 실행되고 있던 레플리카셋으로 변경된걸 확인.
  • 디플로이먼트의 롤아웃 히스토리 조회.
    revision이 표시되는걸 확인이 가능하다.
# --to-revision 옵션으로 롤백할 리비젼의 선택이 가능.
kubectl rollout undo deployment/dep-nginx --to-revision=3
profile
Im steady Jeong

0개의 댓글