Kubernetes - Deployment

sungjin0757·2022년 3월 22일
0

Kubernetes

목록 보기
10/11
post-thumbnail

Deployment - Kubernetes


이 글은 김태민님의 대세는 쿠버네티스 강의를 참고하여 정리하였습니다!

출처 : https://www.inflearn.com/course/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4-%EA%B8%B0%EC%B4%88/dashboard


🔍 테스트해 볼 내용

  1. Recreate 구성

  2. Rolling Update 구성

    도커 이미지는 김태민님께서 만들어두신 이미지를 사용합니다.


    먼저, Deployment Controller를 사용하는 이유를 알아봅시다.

한 서비스가 운영중일 때, 서비스의 버전을 업그레이드시키고 싶을 때 사용하는 Controller입니다.

버전을 업그레이드할 때도 다양한 방법이 있는데, Recreate, Rolling Updaten 방법에 대해서 배워봅시다.

🚀 Recreate

Deployment를 만들게 되면 V1의 Pod들이 만들어지게 됩니다.

업그레이드를 하게되면 먼저 V1의 Pod들을 삭제시킨다음, 순차적으로 V2의 Pod들을 생성하면 됩니다.

단점은, V1의 Pod들을 먼저 삭제시키는 과정이 필요하므로, 서비스에 Down Time이 생길수도 있습니다.

이제 한번 해보도록 합시다!

dp1.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dp-1
spec:
  selector:
    matchLabels:
      type: app
  replicas: 2
  strategy:
    type: Recreate
  revisionHistoryLimit: 1
  template:
    metadata:
      labels:
        type: app
    spec:
      containers:
      - name: container
        image: kubetm/app:v1
      terminationGracePeriodSeconds: 10

이제, Pod및 생성된 ReplicaSet을 확인해보도록 합시다!

이렇게 Pod와 ReplicaSet이 생성된 것을 확인 할 수 있습니다.

이제, Pod들에 접속할 Service를 하나 만들어 봅시다.

svc1.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-1
spec:
  selector:
    type: app
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080

지금 부터 해볼 것은,
Service에 접속하여 무한루프로 Pod의 Version을 출력하는 명령어를 날리도록 하겠습니다.

그 다음, 무한 루프를 돌면서 버전을 업데이트 해보도록 합시다.

while true; do curl 10.109.168.121:8080/version; sleep 1; done

이제 Version을 바꿔보도록 합시다.

kubectl edit deployment dp-1 -o yaml

이렇게 Server가 잠시 끊겼다가 버젼이 업그레이드 되는 것을 볼 수 있습니다!


🚀 Rolling Update

업그레이드를 실행하게 되면 먼저 V2 Pod를 하나 만들어 줍니다.

그 다음 V1 Pod를 하나 삭제하게 됩니다.
이런 과정을 순차적으로 진행하게 됩니다.

이 방식은 배포 중산에 Downtime이 없습니다!

한번 실습해보도록 합시다!

dp2.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name dp-2
spec:
  selector:
    matchLabels:
      type: app2
  replicas: 2
  strategy:
    type: RollingUpdate
  minReadySeconds: 10
  template:
    metadata:
      labels:
        type: app2
    spec:
      containers:
      - name: container
        image: kubetm/app:v1
      terminationGracePeriodSeconds: 0

이제 Service를 만듭시다.

svc2.yaml

apiVersion: v1
kind: Service
metadata:
  name: svc-2
spec:
  selector:
    type: app2
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080

이제,Recreate에서 했던거와 같이 똑같이 실습해보도록 합시다.

while true; do curl 10.102.205.50:8080/version; sleep 1; done

kubectl edit deployment dp-2 -o yaml

이런식으로, V2가 생성 되며 Downtime없이 순차적으로 V1이 삭제되는 것을 볼 수 있습니다!


이상으로 마치겠습니다. 🙋🏻‍♂️

profile
WEB STUDY & etc.. HELLO!

1개의 댓글

comment-user-thumbnail
2022년 3월 23일

👍

답글 달기