전체 글

전체 글

    [EKS] Karpenter - Groupless Node AutoScaling 사용법

    [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)

    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 사용하기

    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..

    K8S에 Kong API Gateway 설치 하는 방법 (Helm Charts)

    K8S에 Kong API Gateway 설치 하는 방법 (Helm Charts)

    helm charts (v2.8.2) https://github.com/Kong/charts values.yaml 커스터마이징 - 원본 values로 설치하면 에러가 많이 나서 커스터마이징을 했습니다. - Postgres subcharts 설치 --- deployment: kong: enabled: true serviceAccount: create: true env: nginx_worker_processes: "2" anonymous_reports: "off" database: "postgres" admin: enabled: true type: NodePort annotations: {} http: enabled: true tls: enabled: true parameters: [] proxy: enab..

    MAC M1에서 EKS 배포 에러 (CPU ARM/AMD 문제)

    MAC M1에서 EKS 배포 에러 (CPU ARM/AMD 문제)

    개요 MAC M1에서 docker build한 image를 eks에 배포하려고 했을 때, pod내부의 container가 실행되지 못하고 CrashLoopBackOff 가 발생했습니다. local에서 docker run을 했을 때는 정상적으로 작동하던 container가 eks에 올릴 때는 에러가 뜨는게 이상했습니다. 위의 사진과 같이 pod log를 찍어보면 exec /bin/sh: exec format error 가 찍혔습니다. MAC M1는 arm기반 cpu이고, 일반적으로 amazonelinux OS를 사용하는 aws ec2는 amd이기 때문에 m1에서 빌드한 이미지를 ec2에서 사용하려면 --platform linux/amd64 옵션을 사용해야한다고 합니다. docker build -t jwt ..

    Secret Manager를 사용해서 K8S Secret 관리하기

    Secret Manager를 사용해서 K8S Secret 관리하기

    개요 kubernetes secrets은 단순 base64 인코딩 된 값이기 때문에 기밀성을 보장하지 않습니다. 그렇기 때문에 보안을 향상하기 위해서 Secret Manager를 사용했습니다. 대표적으로 AWS Secret Manager는 데이터베이스 자격증명, API 키, 토큰 값 등 민감한 정보를 AWS KMS키로 암호화하여 저장하는 관리형 서비스입니다. Secret Manager에 존재하는 데이터를 kubernetes secrets으로 연동할 수 있는 도구는 대표적으로 External Secret operator(ESO), Kubernetes Secrets Store CSI Driver(SSCSID)두 가지가 있습니다. 두 가지의 차이점과 비교한 것들을 정리하겠습니다. Secret Manager 목..

    [EKS] Kubernetes Ingress 설치 및 옵션 정리

    [EKS] Kubernetes Ingress 설치 및 옵션 정리

    개요AWS EKS 환경에서 ELB를 사용해야 할 때 aws-load-balancer-controller를 설치해야 한다.추가로 ingress-nginx-controller도 많이 사용한다.각각에 대한 사용 용도, 설치 및 사용 방법, 옵션을 정리한다.두 개의 컨트롤러는 모두 헬름 차트로 설치한다. 사전 구성: 서브넷 자동 검색 (옵션)https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/deploy/subnet_discovery/ aws-load-balancer-controller사용 용도Kubernetes Cluster에서 AWS ELB를 사용/관리하기 위해서 필요하다. ALB를 설치하기 위해서는 Kubernet..

    [k8s] Resource  + Autoscaler (CA, HPA) 개념 정리

    [k8s] Resource + Autoscaler (CA, HPA) 개념 정리

    Resource 파드를 지정할 때, 컨테이너에 필요한 각 리소스의 양을 선택적으로 지정한다. 지정할 가장 일반적인 리소스는 CPU와 Memory가 있다. Requests and Limits Requests 스케줄러에서 Pod를 어떤 노드에 위치시킬 판단 근거가 된다. Pod가 Request량을 초과 하여 사용해도 Limit량을 넘지 않으면 문제는 없다. 다만 Node의 자원이 부족할 경우에는 Request량을 초과 한 Pod는 퇴거(Eviction)의 대상이 된다. CA, HPA에서 Pod를 확장 또는 축소시킬 기준 값이 된다. Limits Pod는 limit이상의 자원을 사용할 수 없다. 컨테이너의 프로세스가 허용된 양보다 많은 메모리를 사용하려고 하면, 시스템 커널은 메모리 부족(out of memo..

    [k8s] Graceful Shutdown을 위한 preStop, terminationGracePeriodSeconds 설정

    [k8s] Graceful Shutdown을 위한 preStop, terminationGracePeriodSeconds 설정

    Graceful Shutdown (우아한 종료) 이란? 현재 들어온 요청을 모두 수행하고 우아하게 종료된다는 개념이다. 수행 중이던 요청을 미처 처리하지 못하고 종료되면 리소스가 서버에 좀비처럼 남아있거나 데이터 손실을 일으킬 수 있다. kube-proxy나 Ingress controller 등은 엔드포인트 변경에 대해 알림을 받기까지 다소 시간이 걸립니다. 따라서 트래픽은 종료된 것으로 표시가 되어도 여전히 포드(Pod)로 트래픽이 흐를 수 있습니다. 앱은 새로운 요청 수락을 중지되고 모든 연결이 종료되면 종료돼야 합니다. 이를 위해서 앱 spec에서 'lifecycle.preStop'을 설정하는 것을 고려합니다. Pod가 종료 전 데이터베이스와의 연결을 종료하고 트랜잭션을 완료하여 종료해야 하는 상황..

    Kubernetes Component

    Kubernetes Component

    Kubernetes Component 쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합입니다. 이런 클러스터는 최소 한 개의 worker node 가 존재하고, 그 worker node는 애플리케이션의 구성요소인 pod를 호스트 합니다. control plan은 worker node 와 클러스터 내부의 pod를 관리합니다. 흔히 control plan을 master node라고 부릅니다. master node는 단일 또는 멀티 노드로 구동이 가능하지만 프로덕션 환경에서는 한대가 고장 나도 시스템의 중단 없이 계속 작동할 수 있도록 여러 대의 master node를 두고 운영합니다. 이때, master node의 개수는 정족수를 성립하기 위해서 홀수로 구성해야 합니다..