k8s가 좋은 건 알겠는데, DevOps로서가 아닌 개발자로써 편리한 점은 무엇인지 알아보겠습니다. 개발자로써 장점을 알아보는 이유는 k8s의 도입이 마냥 쉽지는 않지만, 도입했을 때의 장점을 피부로 느끼는 건 개발자이기 때문입니다.
클릭 몇 번으로 새로운 버전의 애플리케이션을 띄울 수 있다는 점
- 자동화된 배포 파이프라인: K8s와 CI/CD 도구를 연동하면 코드 변경이 이루어질 때마다 자동으로 빌드, 테스트, 배포가 가능합니다. 예를 들어, GitLab CI/CD나 Jenkins와 같은 도구를 사용하면 코드가 리포지토리에 푸시될 때마다 자동으로 새로운 버전의 Docker 이미지를 빌드하고, 이를 K8s 클러스터에 배포할 수 있습니다.
중단되지 않는 안전한 배포 가능
- 롤링 업데이트: K8s는 롤링 업데이트 기능을 통해 새로운 버전을 배포할 때 기존의 Pod를 점진적으로 교체합니다. 이를 통해 애플리케이션이 중단되지 않고 지속적으로 서비스될 수 있습니다. 롤링 업데이트는 동시에 많은 Pod를 교체하지 않고, 하나씩 또는 소수씩 교체하여 안정성을 높입니다.
- 헬스 체크 및 준비 상태 검사: K8s는 Pod의 상태를 모니터링하고, 헬스 체크와 준비 상태 검사를 통해 Pod가 정상적으로 실행 중인지 확인합니다. 새로운 버전의 Pod가 준비 상태가 되지 않으면, K8s는 이를 배포하지 않고 롤백하거나 대체할 수 있습니다.
- 자동 롤백: 배포 중 문제가 발생하면, K8s는 자동으로 이전 버전으로 롤백할 수 있습니다. 이를 통해 배포 중단 없이 안정성을 유지할 수 있습니다.
- 다양한 배포 전략: K8s는 롤링 업데이트, 블루-그린 배포, 카나리 배포 등 다양한 배포 전략을 지원합니다. 이를 통해 새로운 버전을 점진적으로 배포하거나, 트래픽의 일부만 새로운 버전으로 라우팅하여 안정성을 높일 수 있습니다.
트래픽에 따라 Pod이 늘어났다, 줄었다 하는 기능들
- 자동 스케일링: K8s는 Horizontal Pod Autoscaler(HPA) 기능을 통해 트래픽 변화에 따라 자동으로 Pod의 수를 조절할 수 있습니다. HPA는 CPU 사용량, 메모리 사용량, 사용자 정의 메트릭 등을 기반으로 Pod 수를 동적으로 조절합니다. 예를 들어, 트래픽이 증가하면 더 많은 Pod를 생성하고, 트래픽이 감소하면 Pod 수를 줄여 자원을 효율적으로 사용합니다.
- 클러스터 오토스케일링: 클러스터 오토스케일링은 K8s 클러스터 내의 노드 수를 자동으로 조절하는 기능입니다. Pod의 리소스 요청이 증가하면 노드를 추가하고, 리소스 사용이 감소하면 노드를 줄여 클러스터 자원을 효율적으로 관리합니다.