Study_note
AEWS Study 7 주차 (EKS Automation, ack, flux argo) 본문
이어서 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
https://jiheon95.tistory.com/91
https://jiheon95.tistory.com/104
'Terraform' 카테고리의 다른 글
[1주차] T013 테라폼 스터디 (0) | 2023.09.02 |
---|---|
Kubernetes OpenInfra Community Day 2023 발표 후기 (0) | 2023.07.05 |
AEWS Study 6 주차 (Security, irsa 인증 과정 실습) (1) | 2023.06.03 |
AEWS Study 5 주차 (Autoscailing, hpa, keda, karpenter) (1) | 2023.05.28 |
[Terraform] EKS 및 addon, helm, controller 등 생성 (0) | 2023.05.25 |