EKS Baseline App Upgrade
aws-ebs-csi-driver
AWS EBS ๋ณผ๋ฅจ์ Kubernetes ์์ ๋์ ์ผ๋ก ํ๋ก๋น์ ๋ํ๊ณ ํ๋ ๋ผ์ดํ์ฌ์ดํด์ ๋ง์ถฐ attach/detach ๋ฅผ ์๋ํํ๋ CSI ๋๋ผ์ด๋ฒ๋ค. StorageClass ์ PVC ๋ฅผ ํตํด ํ์ํ ํฌ๊ธฐ ๋ฐ ํ์ (gp3, io2 ๋ฑ) AZ ์ ์ฝ ๋ฑ์ ์ ์ธ์ ์ผ๋ก ์ ์ํ ์ ์์ผ๋ฉฐ, ๋ ธ๋ ์ฅ์ ์ ์ฌ์ค์ผ์ค๋ ํ๋์ ๋ณผ๋ฅจ์ ์ฌ๋ถ์ฐฉํด ๊ฐ์ฉ์ฑ์ ๋์ธ๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: aws-ebs-csi-driver
namespace: argocd
spec:
project: default
source:
repoURL: https://kubernetes-sigs.github.io/aws-ebs-csi-driver
chart: aws-ebs-csi-driver
targetRevision: X.Y.Z # ์ฐจํธ ๋ฒ์ ๊ณ ์
helm:
values: |
controller:
serviceAccount:
create: true
# annotations:
# eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>
destination:
server: https://kubernetes.default.svc
namespace: kube-system
syncPolicy:
automated:
prune: true
selfHeal: true
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ์๋ก์ด ๋ฒ์ ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ค๋ฉด targetRevision ์ ์ ์ฐจํธ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ณ Sync, ๋กค๋ฐฑ์ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฐ ํ Sync.
aws-efs-csi-driver
EFS ํ์ผ ์์คํ ์ Kubernetes ํ๋์ ๊ณต์ ์คํ ๋ฆฌ์ง๋ก ์ ๊ณตํ๋ CSI ๋๋ผ์ด๋ฒ๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: aws-efs-csi-driver
namespace: argocd
spec:
project: default
source:
repoURL: https://kubernetes-sigs.github.io/aws-efs-csi-driver
chart: aws-efs-csi-driver
targetRevision: X.Y.Z
helm:
values: |
controller:
serviceAccount:
create: true
# annotations:
# eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>
destination:
server: https://kubernetes.default.svc
namespace: kube-system
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ์๋ก์ด ๋ฒ์ ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ค๋ฉด targetRevision ์ ์ ์ฐจํธ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ณ Sync, ๋กค๋ฐฑ์ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฐ ํ Sync.
aws-load-balancer-controller
Ingress ์ Service ๋ฆฌ์์ค๋ฅผ ๊ด์ฐฐํ์ฌ ALB/NLB ๋ฑ AWS ๋ก๋๋ฐธ๋ฐ์๋ฅผ ์ ์ธ์ ์ผ๋ก ๊ด๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ๋ค. ALB Ingress ์ ๊ฒฝ์ฐ ๋ฆฌ์ค๋ ๊ท์น/ํ๊น๊ทธ๋ฃน/๋ณด์๊ทธ๋ฃน/์๋ธ๋ท ํ๊น ์๊ฑด ๋ฑ์ ์ด๋ ธํ ์ด์ ์ผ๋ก ์ ์ดํ๊ณ , NLB๋ L4 ์์ค์ ๊ณ ์ฑ๋ฅ ํธ๋ํฝ ๋ถ์ฐ์ ์ ๊ณตํ๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: aws-load-balancer-controller
namespace: argocd
spec:
project: default
source:
repoURL: https://aws.github.io/eks-charts
chart: aws-load-balancer-controller
targetRevision: X.Y.Z
helm:
values: |
clusterName: <EKS_CLUSTER_NAME>
serviceAccount:
create: true
# annotations:
# eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>
destination:
server: https://kubernetes.default.svc
namespace: kube-system
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ์๋ก์ด ๋ฒ์ ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ค๋ฉด targetRevision ์ ์ ์ฐจํธ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ณ Sync, ๋กค๋ฐฑ์ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฐ ํ Sync.
coredns
ํด๋ฌ์คํฐ ๋ด๋ถ ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๋ DNS ์๋ฒ๋ก, ํ๋์์์ DNS ์ฟผ๋ฆฌ๋ฅผ kube-dns/CoreDNS ๋ก ๋ผ์ฐํ ํ์ฌ ์๋น์ค ์ด๋ฆ์ IP ๋ก ํด์ํ๋ค. EKS ์์๋ ๊ด๋ฆฌํ ์ ๋์จ์ผ๋ก ์ด์ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ฉฐ, ์ง์ Helm ์ผ๋ก ๋ฐฐํฌํ ๊ฒฝ์ฐ kube-system ๋ค์์คํ์ด์ค ๋ด ๊ธฐ์กด ๊ตฌ์ฑ๊ณผ ์ถฉ๋ํ์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: coredns
namespace: argocd
spec:
project: default
source:
repoURL: https://coredns.github.io/helm
chart: coredns
targetRevision: X.Y.Z
helm:
values: |
replicaCount: 2
destination:
server: https://kubernetes.default.svc
namespace: kube-system
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ๊ด๋ฆฌํ ์ ๋์จ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ค๋ณต ๋ฐฐํฌ๋ฅผ ํผํ๊ณ , ์ ๊ทธ๋ ์ด๋ ์์๋ targetRevision ๋ง ์ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฐ ๋ค Sync ํ์.
datadog-agent
ํด๋ฌ์คํฐ/๋ ธ๋/ํ๋ ์์ค์ ๋ฉํธ๋ฆญ, ๋ก๊ทธ, ํธ๋ ์ด์ค๋ฅผ ์์งํด Datadog ์ผ๋ก ์ ์กํ๋ ์์ด์ ํธ ํจํค์ง๋ค. DaemonSet ์์ด์ ํธ(์ธํ๋ผ/๋ก๊ทธ)์ APM(Trace) ์์ด์ ํธ๋ฅผ ์กฐํฉํด ๋ฐฐํฌํ๋ฉฐ, kube-state-metrics, cluster-agent ๋ฑ๊ณผ์ ํตํฉ์ผ๋ก ์ปจํธ๋กคํ๋ ์ธ/์ค๋ธ์ ํธ ์ํ ๋ฉํธ๋ฆญ๊น์ง ์์งํ ์ ์๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: datadog-agent
namespace: argocd
spec:
project: default
source:
repoURL: https://helm.datadoghq.com
chart: datadog
targetRevision: X.Y.Z
helm:
values: |
datadog:
site: datadoghq.com
apiKeyExistingSecret: datadog-secret
logs:
enabled: true
apm:
enabled: true
destination:
server: https://kubernetes.default.svc
namespace: datadog
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ์๋ก์ด ๋ฒ์ ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ค๋ฉด targetRevision ์ ์ ์ฐจํธ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ณ Sync, ํ์ ์ ์ด๋ฏธ์ง ํ๊ทธ๋ฅผ values ๋ก ์ค๋ฒ๋ผ์ด๋ํ๋ฉฐ, ๋กค๋ฐฑ์ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฐ ํ Sync.
external-dns
Ingress, Service, Gateway ๋ฑ์ ๋ณ๊ฒฝ์ ๊ฐ์ํด Route53 ๊ฐ์ DNS ์ ๊ณต์์ A/AAAA/CNAME/TXT ๋ ์ฝ๋๋ฅผ ์๋์ผ๋ก ์์ฑ, ๊ฐฑ์ , ์ ๋ฆฌํ๋ ์ปจํธ๋กค๋ฌ๋ค. ์ฌ๋ฌ ํด๋ฌ์คํฐ๋ฅผ ๋์ผํ ๋๋ฉ์ธ์ ์ฐ๊ฒฐํ ๋๋ txtOwnerId ์ domainFilters ๋ฅผ ํตํด ์์ ๊ถ ์ถฉ๋๊ณผ ์ค์๋์ ๋ฐฉ์งํ๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: external-dns
namespace: argocd
spec:
project: default
source:
repoURL: https://kubernetes-sigs.github.io/external-dns/
chart: external-dns
targetRevision: X.Y.Z
helm:
values: |
provider: aws
policy: upsert-only
txtOwnerId: <CLUSTER_NAME>
# domainFilters:
# - example.com
serviceAccount:
annotations:
# IRSA ์์
# eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<ROLE_NAME>
destination:
server: https://kubernetes.default.svc
namespace: external-dns
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ์๋ก์ด ๋ฒ์ ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ค๋ฉด targetRevision ์ ์ ์ฐจํธ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ณ Sync, ๋กค๋ฐฑ์ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฐ ํ Sync.
istio
์๋น์ค ๋ฉ์ ์๋ฃจ์ ์ผ๋ก, ํธ๋ํฝ ๋ผ์ฐํ (๊ฐ์ค์น/์นด๋๋ฆฌ/๋ฏธ๋ฌ๋ง), ๋ณด์(mTLS/์ ์ฑ ), ๊ด์ฐฐ์ฑ(๋ฉํธ๋ฆญ/๋ก๊ทธ/ํธ๋ ์ด์ค)์ ์ ๊ณตํ๋ค. ์ค์น๋ ๋ณดํต CRD ๋ฅผ ํฌํจํ base โ ์ปจํธ๋กคํ๋ ์ธ(istiod) โ ๋ฐ์ดํฐํ๋ ์ธ(gateway) ์์ผ๋ก ์งํํ๋ฉฐ, ๋ค์์คํ์ด์ค ์๋ ์ฌ์ด๋์นด ์ฃผ์ ์ค์ ๊ณผ ๋ฆฌ์์ค ์์ฒญ/์ ํ ์กฐ์ ์ด ์ด๊ธฐ ์์ ์ฑ์ ์ค์ํ๋ค. ์ ๊ทธ๋ ์ด๋๋ ์ปจํธ๋กคํ๋ ์ธ์ ๋จผ์ ์ฌ๋ฆฐ ๋ค ์ํฌ๋ก๋ ์ฌ์ด๋์นด๋ฅผ ์ ์ง์ ์ผ๋ก ๋กค๋งํ๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: istio-base
namespace: argocd
spec:
project: default
source:
repoURL: https://istio-release.storage.googleapis.com/charts
chart: istio-base
targetRevision: X.Y.Z
destination:
server: https://kubernetes.default.svc
namespace: istio-system
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: istiod
namespace: argocd
spec:
project: default
source:
repoURL: https://istio-release.storage.googleapis.com/charts
chart: istiod
targetRevision: X.Y.Z
destination:
server: https://kubernetes.default.svc
namespace: istio-system
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ์ ๊ทธ๋ ์ด๋๋ baseโistiodโgateway ์์๋ก targetRevision ์ ์ฌ๋ฆฐ ๋ค Sync ํ๋ฉฐ, ๋ฐ์ดํฐํ๋ ์ธ ์ฌ์ด๋์นด ๋กค๋ง์ ๋ณํํ๋ค.
kong-ingress-controller
Kong API ๊ฒ์ดํธ์จ์ด๋ฅผ Kubernetes Ingress/Gateway ์ปจํธ๋กค๋ฌ๋ก ํตํฉํด L7 ๋ผ์ฐํ ๊ณผ ์ธ์ฆ, ์๋์ ํ, ๊ด์ธก ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ ์ ์๊ฒ ํ๋ค.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kong-ingress-controller
namespace: argocd
spec:
project: default
source:
repoURL: https://charts.konghq.com
chart: kong
targetRevision: X.Y.Z
helm:
values: |
ingressController:
enabled: true
destination:
server: https://kubernetes.default.svc
namespace: kong
ArgoCD ์ Helm Chart ๋ก Kubernetes Cluster ์ ๊ฐํธํ๊ฒ ์ค์นํ ์ ์๋ค. ์๋ก์ด ๋ฒ์ ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์ค๋ฉด targetRevision ์ ์ ์ฐจํธ ๋ฒ์ ์ผ๋ก ์ฌ๋ฆฌ๊ณ Sync, ๋กค๋ฐฑ์ ์ด์ ๋ฒ์ ์ผ๋ก ๋๋๋ฆฐ ํ Sync.