STEP 1: 파드
파드를 수동으로 만들어볼 것. 하지만 보통 파드는 하나하나 만들지 않으므로, "이렇게 만들 수도 있다"라는 것을 간단하게 배우고 넘어가는 정도의 의미를 갖습니다.
sebcontents/cozserver:1.0 이미지를 바탕으로 파드를 만들어봅시다.
cozserver-pod.yaml
cozserver-pod.yaml 파일 적용
생성한 pods 확인
STEP 2: 디플로이먼트를 이용한 1.0 배포
앞서 개별 파드를 pod.yaml로 작성된 명세를 통해 생성했습니다. 그러나, 파드는 확장성을 바탕으로 가용성을 위해 언제든 대체될 수 있습니다.
> 따라서 디플로이먼트로 CozServer를 구성하는 것이 바람직합니다.
1.0 이미지를 바탕으로 파드를 디플로이먼트를 생성해 봅시다.
cozserver-deployment-v1.yaml
cozserver-deployment-v1.yaml 적용
생성한 deployment 확인
STEP 3: 서비스
클러스터 내에 파드를 만든다 해도, 노출시키지 않으면 소용이 없습니다. 서비스 리소스를 만들어서 파드를 외부로 노출시켜줘야 합니다.
이때 서비스 리소스의 타입은
LoadBalancer
를 사용할 것입니다. 앞서 안내한 대로, 컨테이너 포트는 8080을 사용합니다.
cozserver-service.yaml 에 서비스 명세를 적고, kubectl에 의해 실행되어야 합니다.
cozserver-service.yaml
> 로컬 환경에서 테스트하기 위해서는 터널이 필요합니다. minikube tunnel 명령을 이용해 터널을 뚫어줍시다.
STEP 4: 2.0 배포, 롤아웃
- 기존의 cozserver-deployment-v1.yaml를 그대로 복사해서 cozserver-deployment-v2.yaml라는 이름으로 새로 생성합시다.
> 1.0 대신 새로운 파일을 이용해 기존의 CozServer 1.0 버전이 아닌, 2.0 버전을 롤링 업데이트를 통해 배포해야 할 것입니다
> sebcontents/cozserver:2.0 이미지를 사용합니다.
cozserver-deployment-v2.yaml
결과
롤아웃 히스토리 확인
STEP 5: 3.0 배포와 2.0으로의 롤백
3.0 배포를 위해서 cozserver-deployment-v3.yaml 에 3.0 버전을 이용한 디플로이먼트 명세를 적고, kubectl을 통해 배포를 시도합시다.
cozserver-deployment-v3.yaml
kubectl get all
결과
> 그러나, 요청을 여러 번(정확히는 파드 당 다섯 번) 이상 보내면 파드에서 HTTP 500 에러를 내뱉습니다.
: 현업에서도 비슷한 경우가 매우 많습니다. 배포를 하고 나면, 처음에는 그럴싸하게 잘 된 것 같아 보이지만, 사용하다 보면 버그로 인해 internal 에러를 마주치게 되는 경우가 허다합니다.
> 이처럼 새 버전에 무언가 문제가 발생한다면, 이전 버전으로 롤백을 해야 합니다.
> 롤아웃 히스토리에 따르면, 2번 리비전까지는 정상적으로 작동했습니다. 2번으로 롤백을 시도해야 합니다.
kubectl rollout undo deployment/<deployment 이름>
> 최근 deployment가 롤백됨
결과
kubectl rollout history deployment/replica1
'DevOps BootCamp > 쿠버네티스' 카테고리의 다른 글
HealthCheck (0) | 2023.05.22 |
---|---|
볼륨과 스테이트풀셋 (0) | 2023.05.22 |
쿠버네티스-선언적 접근 (0) | 2023.05.20 |
쿠버네티스 service 타입의 비교 (0) | 2023.05.18 |
쿠버네티스와 컨테이너 오케스트레이션 (0) | 2023.05.17 |