Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Study_note

AEWS Study 7 주차 (EKS Automation, ack, flux argo) 본문

Terraform

AEWS Study 7 주차 (EKS Automation, ack, flux argo)

Study_note 2023. 6. 11. 02:49

이어서 7주차 EKS Automation을 정리해본다.

마찬가지로 구축 내용은 스킵하고 그 외 자세한 내용을 정리한다

 

---

AWS Controller for Kubernetes (ACK)

  • ACK : aws 서비스 리소스를 k8s 에서 직접 정의하고 사용 할 수 있음
    • 예시) 사용자는 kubectl (쿠버네티스 api) 를 사용하여 AWS S3 버킷을 생성 할 수 있다
    • 예시) 쿠버네티스 api 는 ack-s3-controller 에 요청을 전달하고, ack-s3-controller(IRSA)이 AWS S3 API 를 통해 버킷을 생성하게 됩니다

 

ACK 가 지원하는 AWS 서비스 : (‘23.5.29일) 현재 17개 서비스는 GA General Availability (정식 출시) 되었고, 10개Preview (평가판) 상태입니다 - 링크

  • Maintenance Phases 관리 단계 : PREVIEW (테스트 단계, 상용 서비스 비권장) , GENERAL AVAILABILITY (상용 서비스 권장), DEPRECATED, NOT SUPPORTED
  • GA 서비스 : ApiGatewayV2, CloudTrail, DynamoDB, EC2, ECR, EKS, IAM, KMS, Lambda, MemoryDB, RDS, S3, SageMaker…
  • Preview 서비스 : ACM, ElastiCache, EventBridge, MQ, Route 53, SNS, SQS…

Permissions : k8s api 와 aws api 의 2개의 RBAC 시스템 확인, 각 서비스 컨트롤러 파드는 AWS 서비스 권한 필요 ← IRSA role for ACK Service Controller

 

ACK S3 Controller 설치 with Helm

 

우선 ACK S3 Controller를 설치하기 위해 helm 차트 다운로드한다.

export RELEASE_VERSION=$(curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4 | cut -c 2-)
helm pull oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION
tar xzvf $SERVICE-chart-$RELEASE_VERSION.tgz

 

다운 받은 s3 helm chart를 확인하면 다음과 같다

 

다운 받은 헬름 차트 기반으로 ack-s3-controller 생성

 

ACK S3 Controller를 설치했으므로 다음으로는 IRSA을 설정한다.

sa 생성 확인

 

ACK S3 Controller과 그에 맞는 irsa를 생성했으니 k8s에서 s3 생성 삭제등 요청을 날려본다.

 

우선 버켓을 생성하기위해 셍성 되어진 Controller을 통하여 버킷 생성

apiVersion: s3.services.k8s.aws/v1alpha1
kind: Bucket
metadata:
  name: $BUCKET_NAME
spec:
  name: $BUCKET_NAME

 

 

bucket 생성 확인 가능하다.

업그레이드도 비슷하게 진행하면 된다 아래와 같이 버킷에 테깅을 설정하고 배포하면 아래처럼 제대로 배포된것을 확인 가능하다.

 

다음으로는  vpc & ec2도 ack controller를 통해 관리해본다.

 

s3와 마찬가지로 helm 통해서 ec2 ack controller를 설치한다.

export RELEASE_VERSION=$(curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4 | cut -c 2-)
helm pull oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION
tar xzvf $SERVICE-chart-$RELEASE_VERSION.tgz

 

ec2 helm chart는 아래와 같다.

이름은 ec2여도 vpc, subnet 등에 대한 crd가 포함되어 있다.

헬름 통해서 생성된 crd들은 다음과 같다.

 

후 s3와 마찬가지로 해당 crd에 대한 irsa를 생성해준다.

 

해당 파일을 apply 하면 아래와 같이 배포되어 생성된것을 확인 가능하다.

 

다음으로는 flux이다.

flux는 하면서도 느끼는데 gui에서 argo보다 지원하지 않는게 많아 좀 불편한감이 없지 않은것 같다.

 

flux 생성과 git 연결은 다음과 같다.

flux cli 생성
curl -s https://fluxcd.io/install.sh | sudo bash
. <(flux completion bash)

git repository와 연결
flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=fleet-infra \
  --branch=main \
  --path=./clusters/my-cluster \
  --personal

 

해당 과정을 통해 여러 리소스들 생성된것을 확인 가능하다.

 

ingress 생성해서 flux에 트래픽을 보낸다

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gitops-ingress
  annotations:
    alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
    alb.ingress.kubernetes.io/group.name: study
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}, {"HTTP":80}]'
    alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/ssl-redirect: "443"
    alb.ingress.kubernetes.io/success-codes: 200-399
    alb.ingress.kubernetes.io/target-type: ip
spec:
  ingressClassName: alb
  rules:
  - host: gitops.$MyDomain
    http:
      paths:
      - backend:
          service:
            name: ww-gitops-weave-gitops
            port:
              number: 9001
        path: /
        pathType: Prefix

 

접속 확인 가능

 

해당 yaml이 있는 repo를 소스로 생성하면 다음과 같다 

apiVersion: v1
kind: Pod
metadata:
  name: nginx-example1
  labels:
    name: nginx-example1
spec:
  containers:
  - name: nginx-example1
    image: nginx:1.25
    resources:
      limits:
        memory: "64Mi"
        cpu: "0.2"
    ports:
      - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-example1
spec:
  selector:
    app: nginx-example1
  ports:
  - port: 80
    targetPort: 80
    
---
GITURL="https://github.com/sungwook-practice/fluxcd-test.git"
flux create source git nginx-example1 --url=$GITURL --branch=main --interval=30s

 

생성한 소스에서 kustomization 명령어 사용해서 application 생성

flux create kustomization nginx-example1 --target-namespace=default --interval=1m --source=nginx-example1 --path="./nginx" --health-check-timeout=2m

 

생성해보긴 했는데 아까 말한거 처럼 먼가 괜찮은듯 불편하다

먼가 노드 내부 흐름? 확인 하기에는 불편한게 크다

 

argocd

argo는 예전에 포스트한글들이 있어 올린다.

https://jiheon95.tistory.com/90

 

[CI/CD] ArgoCD 사용하여 간단한 POD 배포

ArgoCD 단일 진실의 원천(SSOT)을 기반으로 하는 쿠버네티스에서만 사용되는 CD 툴로 오직 진실(결과)이 오직 한가지의 원천(이유)에서 비롯된다는 의미로 사용되며 ArgoCD에서는 원천을 git을 기반으

jiheon95.tistory.com

https://jiheon95.tistory.com/91

 

[CI/CD] ArgoCD sync 설정

ArgoCD sync git에 올라와 있는 파일을 argocd를 통해 클러스터에 동기화 하는 작업을 의미한다 여기서 argocd는 default 설정으로 3분마다 git과 버네티스 클러스터의 현재상태를 비교하며 이 주기를 Period

jiheon95.tistory.com

https://jiheon95.tistory.com/104

 

[CICD] ArgoCD rollout사용한 Bule/Green, Canry 배포

Blue / Green란? 이전 버전에서 새로운 버전으로 한번에 배포하는 방식이며, 이전버전을 Blue, 새로운 버전을 Green 이라고 칭한다. Blue / Green 배포방식은 이전 버전과 새로운 버전을 모두 존재하기에

jiheon95.tistory.com

 

Comments