AWS
AWS EKS Node 인스턴스 타입의 최대 Pod 개수 (Too many pods 해결 방법)
개요AWS EKS는 AWS VPC CNI 플러그인을 통해 ENI를 EC2 노드에 연결한다.VPC CNI는 pod에게 IP를 할당할 때, 노드가 속한 Subnet IP 대역을 할당한다. EC2 Node의 인스턴스 타입에 따라서 ENI 개수와 각 ENI당 붙을 수 있는 프라이빗 IP의 개수가 다르다.즉, 노드의 인스턴스 타입에 따라서 할당 가능한 Pod의 개수가 다르다.참고: https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/managing-vpc-cni.html 노드 유형 확인 및 Pod 개수 제한 확인 명령어kubectl get nodes -o jsonpath="{range .items[*]}{.metadata.labels['beta\.kubernetes..
AWS EKS 비용 절감 방안 (인스턴스 비용 절감)
개요 EKS를 사용하다 보면 노드의 타입과 개수가 늘어나면서 인스턴스에 대한 비용이 많이 늘어나게 된다. 이때 비용절감을 할 수 있는 방법은 크게 두 가지가 있다. 첫 번째는 모니터링을 통해 리소스(Limit, Request)를 알맞게 조정하는 것이다. 두 번째는 인스턴스를 On-Demand만 사용하지 않고 RI 또는 Spot을 같이 사용하는 것이다. 1. 리소스(Limit, Request) 조정 Kubernetes를 사용하면서 Pod 리소스가 무한정으로 커지지 않고 리소스 용량 관리를 하기 위해서는 리소스(Limit, Request) 설정을 해야 한다. 또한 CA, HPA에서 확장/축소시킬 기준값이 되기 때문에 운영환경에서 리소스 설정은 필수이다. 설정팁은 Request를 무조건 작게 설정하면 조금만 ..
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 ..
[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..
[EKS] ingress-nginx helm chart 에 AWS ACM 등록
개요 https://kubernetes.github.io/ingress-nginx/deploy/#aws 공식문서에서 deploy.yaml 을 다운받아서 acm 설정한 다음 kubectl apply -f deploy.yaml을 했을 때는 https 접속이 정상적으로 됐음 https://github.com/kubernetes/ingress-nginx 그런데 helm chart 로 설치를 했더니 "The plain HTTP request was sent to HTTPS port" 에러가 뜨면서 https 접속이 안됨 해결 방법 helm chart info repo: ingress-nginx repo url: https://kubernetes.github.io/ingress-nginx chart: ingress..
Github, Jenkins, argoCD를 사용하여 CI/CD 구축
프로젝트의 발단은 위 아키텍처를 보고 시작했습니다. 개발자가 도커 이미지를 변경하여 Github에 push 하면 Jenkins에서 도커 이미지를 build 하고, 빌드 번호를 이미지 태그에 붙여 ECR에 push 합니다. 그리고 Github의 deployment.yaml 파일에 이미지 태그의 정보를 업데이트합니다. argoCD에서 EKS Cluster에 Pod를 배포합니다. 처음으로 제대로 된 CICD를 구축해 볼 생각에 즐거웠습니다. 하지만 과정은 그렇게 즐겁지만은 않았죠... 젠킨스 파일 삽질을 꽤 했습니다... 시작해보겠습니다. 작업 순서 1. EKS, ECR 생성 2. Github에 코드 올리기 3. Jenkins 설치 및 설정 4. Jenkinsfile 5. argoCD 설치 6. 확인 1. E..
[EKS] AWS EBS 볼륨을 K8S PV로 사용
Pod 간 공유 가능한 스토리지를 만들어야 했습니다. 그러던 중 PV, PVC 라는 k8s 개념이 있어서 공부한 것을 정리해 보겠습니다. 물리 스토리지를 쿠버네티스 클러스터에 표현한 것이 PV이고, Pod의 볼륨과 PV를 연결하는 관계가 PVC 입니다. EKS 1.23버전 이후부터는 AWS EBS CSI Driver(https://github.com/kubernetes-sigs/aws-ebs-csi-driver)를 설치 하지 않으면 EBS를 PV로 사용할 수 없습니다. 참고: https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/kubernetes-versions.html#kubernetes-1.23 Provisioning PV를 프로비저닝 할 수 있는 방법에..
[EKS] alb-ingress-controller path 기반 라우팅 404 에러
경로에 따라서 라우팅을 할 수 있도록 ALB Ingress를 작성하고 싶었습니다. 하지만 www.example.com/nginx 를 할 때마다 계속 404 에러가 났습니다. (jenkins 포함) 왜 에러가 났는지 포스팅하겠습니다. 해당 Ingress 파일 내용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress namespace: kube-system annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing ..
[AWS] EC2에 EBS 추가하는 방법
EBS 개념 EC2 인스턴스에 사용할 수 있는 블록 수준 스토리지 볼륨을 제공합니다. EBS 볼륨은 형식이 지정되지 않은 원시 블록 디바이스처럼 동작합니다. 이러한 볼륨을 인스턴스에 디바이스로 마운트 할 수 있습니다. 인스턴스에 연결된 EBS 볼륨은 스토리지 볼륨으로 표시되며, 인스턴스 수명에 관계없이 지속됩니다. 즉, 인스턴스가 종료되어도 보관할 수 있습니다. 서버의 스토리지 개념입니다. 주의할 점: 루트볼륨의 용량은 신중하게 생성해야 합니다. 한번 생성하고 나면 용량을 늘릴 수는 있지만 줄이는 것은 불가능합니다. EC2에 EBS 추가하는 방법 1. EC2 > EBS > 볼륨 생성 원하는 용량의 볼륨을 생성합니다 2. EBS Attach 생성한 볼륨이 사용 가능 상태가 되면 해당 볼륨을 선택하고 작업 ..
AWS SAP-C01 온라인시험 합격 후기(PSI)
공부기간: 3주 지식수준: AWS에 대한 기본 지식 있음, SAA 취득함 덤프만 달달 외우면 SAP를 금방 딸 수 있을 줄 알았는데 덤프는 오답 투성이었고, 문제 자체도 쉽지 않았습니다. SAP는 만만한 시험이 아니니 공부를 열심히 하셔야 할 것 같습니다. 공부를 시작한 지 첫 주는 유데미에서 구매한 덤프를 번역하고 구글링 하면서 답을 맞혀보는데 시간을 썼습니다. 문제 전체를 복사하고 구글링 하면서 운이 좋게 examtopics이 나오면 토론 창을 보면서 답을 맞혔습니다. 이런 식으로 첫 주는 덤프를 구글링 하면서 모르는 서비스가 나오면 서비스에 대한 공부를 하였습니다. 그 후로는 2주 동안 덤프를 2~3 회독하였고, 서비스에 대한 공식문서를 보면서 공부했습니다. 다른 분들의 후기를 보니 덤프에 대한 적..