DevOps
![[EKS] ingress-nginx helm chart 에 AWS ACM 등록](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGIAYK%2FbtrOgSf85MC%2FKgPJOguwOqJJoKn95YHOp1%2Fimg.png)
[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..

Argocd를 사용하여 helm chart 배포 및 주의사항
1. helm repo 사용 Application CRD # applications.yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: tomcat namespace: argocd finalizers: - resources-finalizer.argocd.argoproj.io spec: project: apps source: repoURL: https://charts.bitnami.com/bitnami chart: tomcat targetRevision: "10.1.21" destination: namespace: tomcat server: "https://kubernetes.default.svc" syncPolicy: autom..
![[EKS] eksctl create cluster yaml file 생성](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwjxam%2FbtrOlC4yFuK%2FB0yEE6aTkUXp2Jj0dJSp20%2Fimg.png)
[EKS] eksctl create cluster yaml file 생성
사전 환경 VPC 1개 Private Subnet 2개 Public Subnet 에 IGW, NAT 생성 keypair 생성 클러스터 적용 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: eks-demo region: ap-northeast-2 version: "1.21" iam: withOIDC: true vpc: subnets: private: ap-northeast-2a: { id: subnet-xxxxxxxxxxxxxxxxx } ap-northeast-2c: { id: subnet-xxxxxxxxxxxxxxxxx } cs metadata 에 cluster 의..

argoCD App of Apps 패턴을 사용한 서비스 배포
개요 GitOps로 app 을 일괄적으로 관리하고 new app 이 추가되어도 구조가 바뀌지 않도록 하기 위한 방법을 생각해봤습니다. 그래서 하나의 폴더에 child application 을 생성하도록 하는 App of Apps 패턴을 사용하게 되었습니다. 이를 사용하면 배포 및 구성할 수 있는 apps 들을 선언적으로 관리 할 수 있습니다. https://argo-cd.readthedocs.io/en/stable/operator-manual/cluster-bootstrapping/ 디렉터리(GitOps) 구조 ├── application.yaml ├── apps │ ├── app-apache.yaml │ ├── app-kustomize-guestbook.yaml │ └── app-helm-nginx.y..

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

Jenkins Pipeline Github Private Token 사용하여 연동
보안을 위해서 Github Private Repo 를 생성하였습니다. 프라이빗 저장소를 Jenkins와 연동하는 방법에는 1. ssh private, public key 사용 2. token 사용 두가지 방법이 있습니다. 저는 이번에 두번째 방법을 사용하겠습니다. 참고로 token을 발급받은 이후에는 git bash에서 git clone, push 등을 할 때 pw를 물어보면 token을 입력해야 합니다. (github 주소에서 로그인할때는 제외인것 같네요) 1. Github Personal Access Token 생성 깃헙에 로그인한 후, 계정이미지를 클릭하여 Settings를 클릭하세요. Developer settings > Personal access tokens > 생성 클릭 위의 두개를 선택하고..
![[EKS] AWS EBS 볼륨을 K8S PV로 사용](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTlS2P%2FbtrOmU4mBPB%2FoK0dSrjWk3ksILgpVkeXY1%2Fimg.png)
[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 에러](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjwVOv%2FbtrOmVPI7EP%2FKjFRvxmc46ETwsxKBn7wo0%2Fimg.png)
[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 ..

Jenkins, Codedeploy 사용하여 CICD 환경 구축
구축 환경 CI: GitHub, Jenkins CD: Codedeploy Language: Go CI/CD 흐름 1. 개발자가 Git Push를 하게 되면 GitHub에서 Jenkins 서버로 webhook을 발생시킵니다 2. Jenkins가 Push 이벤트가 발생했음을 인지합니다 3. Jenkins가 빌드 및 테스트를 실행합니다 4. build가 성공적으로 마무리되면 애플리케이션 파일과 appspec.yml 파일을 zip으로 압축하여 S3에 업로드합니다 5. Jenkins가 CodeDeploy에게 배포를 요청합니다 6. CodeDeploy는 appspec.yml에 따라서 배포를 수행하며, 배포할 서버내에서 쉘 스크립트를 수행합니다. 구축 순서 1. github repository에 스크립트 파일을 올립..
![[ECS] Fargate 사용해보기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcbw0Ii%2Fbtrd1ycUC5A%2FbokUMr7DLDt5C7gHpUnGQk%2Fimg.png)
[ECS] Fargate 사용해보기
사전 설치 aws cli docker Fargate 실행 순서 ECR 레포지터리 생성하고 애플리케이션 이미지 Push 합니다 ECS에서 작업 정의를 합니다 클러스터를 구성합니다 1. ECR 레포지터리 생성하고 이미지 Push 먼저 이미지를 올릴 레포지터리를 생성합니다. 레포지터리 이름 형식은 / 이며, 소문자만 가능합니다. 사용자가 Docker 컨테이너 이미지를 손쉽게 저장, 관리 및 배포할 수 있게 해주는 완전관리형 Docker 컨테이너 레지스트리입니다. 쉽게 얘기하면 Fargate를 포함한 아마존의 컨테이너 서비스에서 사용하기 위한 도커 이미지 저장소입니다. ※ 레포지터리를 퍼블릭으로 생성하니까 접속하는 과정에서 자꾸 아래와 같은 에러가 발생했습니다. 그래서 프라이빗으로 다시 생성했습니다 ;; 이유는..