본문 바로가기

EKS/Kubernetes Intro

(5)
Kubernetes - LimitRange 쿠버네티스 환경을 구축 및 운영하다 보면, 실수로 누군가 리소스를 많이 먹는 파드를 생성하여 해당 노드의 리소스를 많이 잡아먹기 시작하여서, 같은 노드에 띄워진 다른 파드 서비스에 문제를 일으킬 수도 있습니다. 따라서 Pod의 Resource Limit을 따로 정하지 않았거나, 혹은 기존에 정한 기준 이상으로 부여하는 것을 방지 할 필요가 있습니다. 이러한 부분을 통제하는 것이 LimitRagne입니다. Namespace 단위로 조절할 수 있으며 리소스 타입을 Pod or Container로 주어서 파드 전체의 리소스 리밋이나 컨테이너 리소스에 대한 Default 값이나 Min, Max를 정할 수 있습니다. 기본적으로 아래 다큐를 참고하셔서 보셔도 충분합니다. https://kubernetes.io/ko..
Kubernetes - Spring Boot & PodLifeCycle - 1. Source Code 반드시 Intro글을 보시고 어떻게 구성되고 작동하는 지 이해하시고 진행하시기 바랍니다. 관련 예시 코드를 아래 깃허브 Repo에 업로드하였습니다. Frontend : github.com/Camouflage129/phh-fo Backend: github.com/Camouflage129/phh-bo 두 코드 README.md에 간략하게 사용하는 방법을 서술하였지만, 단순한 글로는 이해 및 구성이 어려울 것이라 생각합니다. AWS 인프라, EKS, CICD등이 사실 모두 세팅되고 어플리케이션만 구성 테스트를 하는 상태가 되어야 하기 때문입니다. 따라서 Terraform으로 EKS에 대한 부분을 모두 세팅한 후, 위의 소스를 가지고 테스트해보는 게시글 시리즈를 작성할 예정입니다. 현재, 프로젝트 중이어서 시리..
Kubernetes - Pod LifeCycle 개념 (Spring Boot) 제가 쿠버네티스에서 가장 중요하게 생각하는 부분입니다. 바로 Pod LifeCycle에 대해 알아보도록 하겠습니다. Kubernetes에서 Pod Lifecycle을 직접 관리해주어야 어플리케이션의 배포나, HPA 혹은 부하가 넘칠 때, 파드를 죽게 만들지 않고 서비스를 운영할 수 있습니다. 이러한 부분들이 제대로 설정되지 않을 경우 Zombie 파드들이 생길 수 있고 서비스장애로 이어질 수 있습니다. Pod LifeCycle에 대해서는 참고하기 좋은 블로그들이 아래와 같이 있습니다. 개인적으로는 카카오의 글은 꼭 읽어보시기를 권유드립니다. https://blog.risingstack.com/graceful-shutdown-node-js-kubernetes/ Graceful shutdown with No..
Kubernetes - Affinity & NodeSelector 사용하기 클러스터를 운영하다 보면 노드의 부하, Zombie Pod 이슈등 많은 이유로 인해 노드가 뻗을 수 있습니다. 이때, 뻗은 노드에 어떤 서비스들이 올라가 있는지 파악되지 않아 대처에 오토스케일링만을 기다리다가는 트러블 슈팅의 시간이 너무 오래걸릴 수 도 있으며, 리소스를 너무 많이 잡아먹거나 특별하게 따로 관리해야 하는 서비스인 경우 노드를 선택하여 파드를 띄울 필요성이 있습니다. 이러한 부분을 해결하기 위한 것이 NodeSelector와 Affinity입니다. NodeSelector는 차후 사용되지 않을 예정이기 때문에, Affinity를 사용하여 진행해 주셔야합니다. 쿠버네티스 Docs는 상당히 정리가 잘 되어있기 때문에, Docs링크를 먼저 공유드립니다. kubernetes.io/ko/docs/ta..
Kubernetes - ConfigMap & Secret / Spring Boot 연동 우리나라는 그래도 자바공화국이니 Spring Boot를 기준으로 ConfigMap, Secret을 활용하는 법을 알아보겠습니다. Kubernetes의 ConfigMap과 Secret은 컨테이너 환경 변수를 통해 어플리케이션에 Key Value 형태로 데이터를 매핑하여 사용할 수 있습니다. 가장 쉬운 예로 Database URL / User / Password 같은 값들을 변경하거나 직접 코드에 입력하는 것이 보안상의 이유로 불가능 하거나, 이러한 설정값을 변경을 한 후 배포하게 되어 수 많은 CICD Pipeline을 타야 할 경우 상당히 번거로울 수 있습니다. 따라서 코드에 작성할 부분들과, 쿠버네티스에서 관리할 수 있는 부분들을 나눠 운영하게 되면 서비스 운영에 효율성을 높일 수 있습니다. 먼저 Co..