전체 글
Kubernetes QoS(Qualitu Of Service)와 Pod Eviction의 상관 관계
QoS(Qualitu Of Service) 클래스 타입 Kubernetes는 노드에 리소스가 부족할 때 Pod의 우선순위에 따라서 Pod를 Eviction 한다. 이때 Pod의 우선순위는 QoS 클래스 타입에 따라 정해진다. QoS 클래스 타입에는 아래 3가지가 있다. Guaranteed: Resources 항목에서 Request와 Limit의 값이 완전히 동일한 경우 Burstable: Guaranteed, BestEffort에 속하지 않는 모든 경우 ( e.g. Resources 항목에서 Limit이 Request보다 클 경우) BestEffort: Resources 항목을 아예 사용하지 않을 경우 노드에 리소스가 부족해지면 우선순위가 가장 낮은 Pod나 프로세스가 먼저 종료된다. 우선순위는 Guar..
[K8S] 쿠버네티스를 사용해야하는 이유
Kubernetes 개념 Kubernetes는 컨테이너 오케스트레이션 플랫폼으로, 컨테이너화된 애플리케이션을 배포, 확장 및 관리하는 데 사용됩니다. Kubernetes는 Google에서 개발되었으며, 현재는 Cloud Native Computing Foundation(CNCF)에서 관리하고 있습니다. Kubernetes는 애플리케이션을 여러 개의 컨테이너로 분할하고, 이를 여러 대의 호스트에 배치하며, 컨테이너들이 서로 통신할 수 있도록 네트워크 구성을 자동으로 수행합니다. 또한, 컨테이너의 스케일링, 롤링 업데이트, 로드 밸런싱, 자가 치유 등의 기능을 제공하여, 애플리케이션 운영 및 관리를 보다 쉽게 할 수 있도록 돕습니다. Kubernetes는 클라우드 서비스 제공자들의 지원을 받아서, 대부분의 ..
Terraform Associate (002) 자격증 합격 후기
자격증 쿨이 돌아서 시험 칠 만한 게 뭐가 있을까 하다가 Terraform Associate 시험을 봤습니다. 5월에 003으로 바뀌고 002를 칠 수 없다길래 레퍼런스가 많을 때 빨리 시험을 치자고 생각했습니다. 시험 준비물 1. Github 계정 하시코프도 PSI로 시험을 보더군요. AWS 시험을 보면서 PSI로 자주 시험을 봤어서 익숙했습니다. 그런데 하시코프 시험은 Github 계정으로 연동되어서 인증을 한다는 게 좀 특이했던 거 같습니다. 2. 영문 신분증(e.g. 여권, 국제운전면허증) 시험 준비물은 PSI 계정의 이름과 신분증의 이름이 동일해야 하기 때문에 영문 신분증이 필요합니다. 예전에는 PSI 시험을 볼때 여권이 없으면 주민등록증이랑 신용카드로 시험을 쳤다는 후기를 들었지만 이제는 절대..
[GCP] GKE 클러스터 생성 및 기능 정리
개요 GCP GKE를 생성해 보고 AWS EKS와 비교해 보겠습니다. Standard로 생성합니다. 클러스터 기본사항 위치 유형 영역: 컨트롤 플레인이 해당 한 개의 영역에만 설치된다. 리전: 컨트롤 플레인이 해당 리전에 여러 개의 영역에 설치된다. 제어 영역 버전 (마스터 버전) 출시 채널(Release channel): 새 버전이 나올 때마다 GKE 자동 업그레이드 된다. 각 채널 별로 업그레이드 버전 출시 속도가 다르므로 각 채널 특징을 확인하여 원하는 채널을 선택한다. https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels 정적 버전(Static channel): GKE 자동 업그레이드를 사용하지 않는다. 수동으로 업그레..
[Terraform] for Expressions
개요 Terraform For문은 다른 언어랑 다소 다른 점이 있습니다. 테라폼 공식문서 설명도 잘 이해가 안 되고 예제도 자세하지 않아서 정리하는 글입니다. 아래 공식문서를 해석하고 예제를 돌립니다. https://developer.hashicorp.com/terraform/language/expressions/for For Expressions - Configuration Language | Terraform | HashiCorp Developer For expressions transform complex input values into complex output values. Learn how to filter inputs and how to group results. developer.hashi..
[GCP] VPC Network 통신 테스트 및 정리
개요 약 2년 동안 AWS만 사용했는데 이번에 저희 팀에서 GCP를 사용해 보기로 했습니다. GCP Network를 대충 보니 AWS와 많이 다른 거 같았습니다. 비교해 보면서 정리해 보겠습니다. 공부하면서 적는것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 댓글로 알려주시면 감사하겠습니다. VPC Network 범위는 Project > VPC > Region > Subnet 입니다. (AWS의 범위는 Region > Zone > VPC > Subnet ) GCP VPC는 Global이기 때문에 VPC 내부에 Region이 있습니다. 같은 VPC에 위치한 서로 다른 리전끼리 VPC Routing을 통해 프라이빗 IP로 서로 통신이 가능합니다. 위의 내용을 테스트해보겠습니다. Firewall에서 ssh..
[EKS] Karpenter + KEDA를 사용해서 특정 시간에 Auto Scaling 하는 방법
개요 Karpenter + KEDA를 사용해서 이벤트 시간 전에 Node Scale Out 하고 일정 시간 지난 후 Scale In 되도록 테스트를 해보겠습니다. Karpenter가 Node를 프로비저닝 할 때 1~2분 정도 시간이 걸립니다. 이벤트 시간 전에 특정 개수의 노드 여유분을 확정적으로 늘려놓고 싶을 때 사용합니다. 아래 영상을 보고 내용을 정리했습니다. https://www.youtube.com/watch?v=FPlCVVrCD64 Karpenter 사용 팁 Karpenter는 CA와 마찬가지로 Pod Request를 기준으로 노드를 증설하기 때문에 사용량 최대치를 Request로 잡거나 Limit과 차이를 적게 하는 것을 추천한다. 노드 타입을 작은 것으로 정의하는 것이 항상 유리한 것은 아..
[EKS] Karpenter - Groupless Node AutoScaling 사용법
K8S Auto Scaling Pod 기반 Kubernetes Event-driven Autoscaling - 이벤트 기반 파드 오토스케일링을 지원합니다. Horizontal Pod Autoscaler - 필요에 따라 배포에 더 많은 파드를 추가하거나 제거합니다. Vertical Pod Autoscaler - 파드의 CPU 및 메모리 요청 크기를 조정하고 부하에 맞게 제한합니다. Node 기반 Karpenter (현재는 AWS EKS만 가능) Cluster Autoscaler Karpenter 개요 Karpenter는 AWS로 구축된 유연한 오픈 소스의 고성능 Kubernetes 클러스터 오토스케일러입니다. 애플리케이션 로드의 변화에 대응하여 적절한 크기의 컴퓨팅 리소스를 신속하게 실행함으로써 애플리케이..
nodejs에서 AWS S3에 파일 업로드 (multer-s3)
AWS 1. IAM 사용자 생성 - 서버에서 S3에 접근하려면 Access Key, Secret Key가 필요합니다. IAM > 사용자 > 사용자 추가 nodejs 어플리케이션에 적용시킬 엑세스키를 발급해야 합니다. 정책 생성을 클릭합니다. { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject" ], "Resource": "arn:aws:s3:::{YOUR_S3_BUCKET}/*" } ] } json으로 정책을 넣습니다. Resource 필드에 자신의 S3 bucket arn/*을 넣습니다. 버킷의 모든 객체에 대해 권한을 주기 ..
K8S에서 Kong API Gateway 사용하기
개요 Kong Ingress Controller는 k8s 리소스를 kong 리소스로 변환시키는 역할을 합니다. 아래 그림처럼 K8S Ingress는 Kong Route로 매핑이 되는데, 이를 이용하여 Express 어플리케이션을 Kong API Gateway을 사용해서 외부로 노출 시키겠습니다. 참고: https://docs.konghq.com/kubernetes-ingress-controller/latest/concepts/design/#translation pod, service 확인 Express 어플리케이션의 pod, service를 올렸습니다. port-forward 어플리케이션 화면을 확인하기 위해 포트 포워딩을 하겠습니다. $ kubectl port-forward svc/web 3000:30..