본문 바로가기

EKS

(38)
EKS - VPC CNI Udpate CNI는 Container Network Interface로 제가 Secondary IP 리밋을 주는 글을 작성했을 때, Docs 링크와 같이 간단하게 설명을 주었습니다. VPC CNI가 1.6.3 / 1.7.5 두개의 버전을 현재 공식적으로 권유하고 있으며 최근 EKS를 생성할 때는 위의 두 버전 중 하나를 골라 구성할 수 있도록 바뀌었습니다. IP 할당에 관한 이슈들이 생겼을때 AWS에서는 VPC CNI1.7.5로의 업데이트도 권유합니다. 먼저 CNI 버전이 낮다면, 각 클러스터 버전에서 가장 맞는 kube-proxy와 coredns 버전을 맞춰주시기 바랍니다. 아래 Docs를 참조하면 가능하며, 간단하게 그 방법을 소개하겠습니다. docs.aws.amazon.com/ko_kr/eks/latest/u..
Kubernetes - LimitRange 쿠버네티스 환경을 구축 및 운영하다 보면, 실수로 누군가 리소스를 많이 먹는 파드를 생성하여 해당 노드의 리소스를 많이 잡아먹기 시작하여서, 같은 노드에 띄워진 다른 파드 서비스에 문제를 일으킬 수도 있습니다. 따라서 Pod의 Resource Limit을 따로 정하지 않았거나, 혹은 기존에 정한 기준 이상으로 부여하는 것을 방지 할 필요가 있습니다. 이러한 부분을 통제하는 것이 LimitRagne입니다. Namespace 단위로 조절할 수 있으며 리소스 타입을 Pod or Container로 주어서 파드 전체의 리소스 리밋이나 컨테이너 리소스에 대한 Default 값이나 Min, Max를 정할 수 있습니다. 기본적으로 아래 다큐를 참고하셔서 보셔도 충분합니다. https://kubernetes.io/ko..
EKS - Secondary IP 제어 하기 EKS를 구성하다보면, Node 당 IP에 대한 개수 제한이 있습니다. 더욱이 파드당 IP를 한개씩 가져가기 때문에 Node를 구축할 때, 많은 IP를 먼저 선점하여 가져가게 합니다. 하지만 Hybrid구조로 구축하여 진행할 경우 IP가 넉넉하지 않을 때가 많습니다. 하지만 타입이 높은 노드가 생성될 때는, IP를 필요 이상으로 과하게 가져가는 경우가 있습니다. WAS를 띄우기 위해 메모리를 2기가로 놓고 파드를 띄운다면 c5.2xlarge에서 띄울 수 있는 파드는 그리 많지 않습니다. 하지만 30여개의 IP를 기본적으로 할당하기 때문에, IP가 낭비되는 것을 볼 수 있습니다. 즉, IP를 노드마다 제한해 줄 필요가 있습니다. 이러한 세팅을 위해서 Pod 수를 제한하거나 Secondary IP에 대해서 ..
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에 대한 부분을 모두 세팅한 후, 위의 소스를 가지고 테스트해보는 게시글 시리즈를 작성할 예정입니다. 현재, 프로젝트 중이어서 시리..
EKS AutoScaling - 2. AutoScaler 파드가 오토스케일링이 되어 꽉 찰 경우, 노드 자체를 오토스케일링 시켜줘야합니다. docs.aws.amazon.com/ko_kr/eks/latest/userguide/cluster-autoscaler.html Cluster Autoscaler - Amazon EKS 필요한 버전에 따라 이전 주소를 gcr.io/google-containers/cluster-autoscaler:v1. 으로 변경해야 할 수도 있습니다. 이미지 주소는 릴리스 페이지에 나와 있습니다. docs.aws.amazon.com 공식다큐가 정말 정리가 잘 되어있어 다를게 없을 게시글이나 조금 더 상세하게 써보도록 하겠습니다. 먼저 적용하고자 하는 노드 그룹 EC2에는 아래와 같은 태그가 적용되어야 합니다. 또한 노드에는 아래와 같은 IA..
EKS AutoScaling - 1. HPA 설정하기 HPA가 어떤 조건에서 움직이는지, 어떠한 옵션이 있는지 아래 링크에서 확인할 수 있습니다. github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/FAQ.md kubernetes/autoscaler Autoscaling components for Kubernetes. Contribute to kubernetes/autoscaler development by creating an account on GitHub. github.com 아래와 같은 준비과정이 필요합니다. 1. Metric Server 구성 각 파드의 리소스 메트릭을 읽을 수 있어야 하기 때문에, Metric Server를 구성하시거나 커스텀 매트릭을 수집하여 세팅하셔야합니다. htt..
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..
EKS LoadBalancer - 4. Nginx Ingress (NLB) Helm을 통해 Nginx Ingress를 설치해보도록 하겠습니다. Helm3를 설치해주시고, nginx-ingress namespace를 만들어주세요 그리고 아래와 같이 values.yaml을 만들어주도록 하겠습니다. 여기서 중요하게 봐야하는 부분이 ingressClass입니다. Nginx Ingress를 하나만 두지 않고 여러개를 두어 통신하게 구성할 수 있는데, 이때 ingressClass로 어떤 nginx ingress에서 트래픽을 받을 것인지 정하기 때문입니다. 저는 일단 외부에서 퍼블릭하게 할 수 있도록 구성할 것인데 ext-nginx-ingress라 칭하겠습니다. 만약 저 처럼, 특정 Node에 배포하실게 아니라면 affinity는 빼주시면 됩니다. controller: ingressClas..