본문 바로가기

전체 글

(148)
Kubernetes - LimitRange 쿠버네티스 환경을 구축 및 운영하다 보면, 실수로 누군가 리소스를 많이 먹는 파드를 생성하여 해당 노드의 리소스를 많이 잡아먹기 시작하여서, 같은 노드에 띄워진 다른 파드 서비스에 문제를 일으킬 수도 있습니다. 따라서 Pod의 Resource Limit을 따로 정하지 않았거나, 혹은 기존에 정한 기준 이상으로 부여하는 것을 방지 할 필요가 있습니다. 이러한 부분을 통제하는 것이 LimitRagne입니다. Namespace 단위로 조절할 수 있으며 리소스 타입을 Pod or Container로 주어서 파드 전체의 리소스 리밋이나 컨테이너 리소스에 대한 Default 값이나 Min, Max를 정할 수 있습니다. 기본적으로 아래 다큐를 참고하셔서 보셔도 충분합니다. https://kubernetes.io/ko..
Python 부하테스트기 - Locust 부하테스트를 위해서 많은 리소스들이 있지만, 가장 쉽게 테스트 해 볼 수 있는건, Locust였습니다. 순차적으로 API를 콜 할 수도 있으며, 랜덤하게 작성한 API를 무작위로 콜할수도 있습니다. 랜덤하게 콜하는 부분에 대해서만 테스트를 해보았습니다. AWS EC2에 설치하는 방법은 아래와 같습니다. sudo yum install -y python3-devel sudo yum install -y libevent-devel sudo yum install -y gcc sudo python3 -m pip install locust 보통은 pip install locust만 하여도 되지만, EC2에는 설치되지 않는게 많아서 다 깔아주셔야 합니다. (안그러면 에러남) 저는 Spring Boot Pod LifeC..
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..
Linux Bash- Linux ADD User (조건에 맞는 텍스트 아래에 원하는 텍스트 삽입하기) 기본적으로 Sed명령어를 통해 원하는 파일에 스트링을 입력하거나 지울 수 있다. 예시를 통해 알아보도록 하자. sed -i 옵션을 주면 해당파일에 수정된 내역을 반영하겠다는 뜻으로 Linux User를 만들때, 아래와 같은 스크립트를 통해 유저를 쉽게 추가할 수 있다. #!/bin/bash check_expect=$(rpm -qa | grep expect) if [ -z "$check_expect" ]; then sudo yum install -y expect fi root_pw=$1 id=$2 pw=$3 sudo userdel $id sudo adduser $id expect