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.