diff --git a/apps/dev-application.yaml b/apps/dev-application.yaml new file mode 100644 index 0000000..e57181e --- /dev/null +++ b/apps/dev-application.yaml @@ -0,0 +1,21 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: backend-api-dev + namespace: argocd +spec: + project: default + source: + repoURL: https://github.com/CLD-3rd/final-team2-manifest.git + # targetRevision: dev # dev는 dev 브랜치를 바라보도록 설정 - 쉽게 말해서 dev 브랜치에 어떤 내용이 commit되면 argoCD가 sync할 수 있도록 한다는 의미 + targetRevision: refactor/manifest + path: overlays/dev # 이 Application이 바라볼 Kustomize 경로 + destination: + server: https://kubernetes.default.svc + namespace: backend-dev # 실제 앱이 배포될 네임스페이스 + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true diff --git a/apps/prod-applications.yaml b/apps/prod-applications.yaml new file mode 100644 index 0000000..8127ff1 --- /dev/null +++ b/apps/prod-applications.yaml @@ -0,0 +1,22 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: backend-api-prod + namespace: argocd +spec: + project: default + source: + repoURL: https://github.com/CLD-3rd/final-team2-manifest.git + # targetRevision: main # Prod는 main 브랜치를 바라보도록 설정 - 쉽게 말해서 main 브랜치에 어떤 내용이 commit되면 argoCD가 sync할 수 있도록 한다는 의미 + targetRevision: refactor/manifest + + path: overlays/prod # 이 Application이 바라볼 Kustomize 경로 + destination: + server: https://kubernetes.default.svc + namespace: backend-prod # 실제 앱이 배포될 네임스페이스 + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true diff --git a/base/apps/app-of-apps.yaml b/base/apps/app-of-apps.yaml deleted file mode 100644 index 26bc6b9..0000000 --- a/base/apps/app-of-apps.yaml +++ /dev/null @@ -1,23 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: app-of-apps - namespace: argocd - annotations: - argocd.argoproj.io/sync-wave: "0" -spec: - project: default - source: - repoURL: https://github.com/CLD-3rd/final-team2-manifest.git - targetRevision: dev # 상관X 어차피 overlays 우선 적용됨 - #path: final-team2-manifest/overlays/{{ENVIRONMENT}} - path: final-team2-manifest/overlays/dev - destination: - server: https://kubernetes.default.svc - namespace: argocd - syncPolicy: - automated: - prune: true - selfHeal: true - syncOptions: - - CreateNamespace=true diff --git a/base/apps/kustomization.yaml b/base/apps/kustomization.yaml deleted file mode 100644 index 9652313..0000000 --- a/base/apps/kustomization.yaml +++ /dev/null @@ -1,4 +0,0 @@ -apiVersion: kustomize.config.k8s.io/v1beta1 -kind: Kustomization -resources: -- app-of-apps.yaml diff --git a/base/backend-api.yaml b/base/backend-api.yaml new file mode 100644 index 0000000..c1d95db --- /dev/null +++ b/base/backend-api.yaml @@ -0,0 +1,34 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: backend-api + labels: + app: backend-api +spec: + selector: + matchLabels: + app: backend-api + template: + metadata: + labels: + app: backend-api + spec: + containers: + - name: backend-api + image: backend-api + ports: + - containerPort: 8080 + name: http +--- +apiVersion: v1 +kind: Service +metadata: + name: backend-api-service +spec: + selector: + app: backend-api + ports: + - port: 80 + targetPort: 8080 + protocol: TCP + type: ClusterIP diff --git a/base/kustomization.yaml b/base/kustomization.yaml index ea50af0..8c225f0 100644 --- a/base/kustomization.yaml +++ b/base/kustomization.yaml @@ -1,8 +1,13 @@ +# apiVersion: kustomize.config.k8s.io/v1beta1 +# kind: Kustomization + +# resources: +# - apps/ + +# commonLabels: +# app.kubernetes.io/part-of: argocd-setup + apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization - resources: - - apps/ - -commonLabels: - app.kubernetes.io/part-of: argocd-setup \ No newline at end of file + - backend-api.yaml diff --git a/bootstrap/app-of-apps.yaml b/bootstrap/app-of-apps.yaml new file mode 100644 index 0000000..0999000 --- /dev/null +++ b/bootstrap/app-of-apps.yaml @@ -0,0 +1,30 @@ +# bootstrap/app-of-apps.yaml +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: app-of-apps + namespace: argocd +spec: + project: default + source: + repoURL: https://github.com/CLD-3rd/final-team2-manifest.git + targetRevision: refactor/manifest # 실제로는 dev나 mani으로 설정 + + # dev, prod 애플리케이션 정의 파일이 들어있는 'apps' 디렉토리 참조 + path: apps + + # 디렉토리 내의 모든 yaml 파일을 재귀적으로 찾도록 설정 + directory: + recurse: true + + destination: + # App of Apps 자신은 argocd 네임스페이스에 배포 + server: https://kubernetes.default.svc + namespace: argocd + + syncPolicy: + automated: + prune: true + selfHeal: true + syncOptions: + - CreateNamespace=true diff --git a/overlays/dev/applications/backend-api.yaml b/overlays/dev/deployment-patch.yaml similarity index 58% rename from overlays/dev/applications/backend-api.yaml rename to overlays/dev/deployment-patch.yaml index 5a5218e..c44a6c4 100644 --- a/overlays/dev/applications/backend-api.yaml +++ b/overlays/dev/deployment-patch.yaml @@ -1,33 +1,14 @@ ---- -# Backend API Deployment (Dev 환경) apiVersion: apps/v1 kind: Deployment metadata: - name: backend-api-dev - namespace: backend-dev - labels: - app: backend-api - environment: dev + name: backend-api spec: - replicas: 2 # Dev 환경: 2개만(멀티티서버테스트용) - selector: - matchLabels: - app: backend-api - environment: dev + replicas: 3 # Dev 환경: 3개만(멀티티서버테스트용) template: - metadata: - labels: - app: backend-api - environment: dev spec: containers: - name: backend-api - # Docker Hub 태그 확인 후 수정 필요 - image: cjsqudwns/goteego-server:99f26c4 imagePullPolicy: Always # Dev 환경: 항상 최신 이미지 - ports: - - containerPort: 8080 - name: http env: - name: ENVIRONMENT value: "development" @@ -82,50 +63,3 @@ spec: port: 8080 initialDelaySeconds: 5 periodSeconds: 5 ---- -# Backend API Service (Dev) -apiVersion: v1 -kind: Service -metadata: - name: backend-api-service-dev - namespace: backend-dev -spec: - selector: - app: backend-api - environment: dev - ports: - - port: 80 - targetPort: 8080 - protocol: TCP - type: ClusterIP ---- -# Backend API Ingress (Dev) - AWS Load Balancer Controller 사용 -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: backend-api-ingress-dev - namespace: backend-dev - annotations: - # AWS Load Balancer Controller 사용 - kubernetes.io/ingress.class: alb - alb.ingress.kubernetes.io/scheme: internet-facing - alb.ingress.kubernetes.io/target-type: ip - -spec: - rules: - - host: dev.api.goteego.store - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: backend-api-service-dev - port: - number: 80 ---- -# Namespace -apiVersion: v1 -kind: Namespace -metadata: - name: backend-dev \ No newline at end of file diff --git a/overlays/dev/ingress.yaml b/overlays/dev/ingress.yaml new file mode 100644 index 0000000..b2689b6 --- /dev/null +++ b/overlays/dev/ingress.yaml @@ -0,0 +1,24 @@ +# Backend API Ingress (Dev) - AWS Load Balancer Controller 사용 +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: backend-api-ingress-dev + namespace: backend-dev + annotations: + # AWS Load Balancer Controller 사용 + kubernetes.io/ingress.class: alb + alb.ingress.kubernetes.io/scheme: internet-facing + alb.ingress.kubernetes.io/target-type: ip + +spec: + rules: + - host: dev.api.goteego.store + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: backend-api-service # base의 서비스 이름 + port: + number: 80 diff --git a/overlays/dev/kustomization.yaml b/overlays/dev/kustomization.yaml index c3de58a..674a1e9 100644 --- a/overlays/dev/kustomization.yaml +++ b/overlays/dev/kustomization.yaml @@ -1,25 +1,19 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization +# 이 kustomization이 적용될 리소스들의 기본 네임스페이스 namespace: backend-dev resources: - - ../../base - - applications/backend-api.yaml +- ../../base +- ingress.yaml +# dev 환경에 맞게 base를 수정하는 패치 patches: - - path: patches/app-of-apps-patch.yaml - target: - kind: Application - name: app-of-apps +- path: deployment-patch.yaml -configMapGenerator: - - name: backend-config - literals: - - ENVIRONMENT=dev - - REPO_URL=https://github.com/CLD-3rd/final-team2-manifest.git - - -commonLabels: - environment: dev - app.kubernetes.io/environment: dev \ No newline at end of file +# dev 환경의 Docker 이미지 태그 지정 +# images: +# - name: backend-api +# newName: cjsqudwns/goteego-server +# newTag: "7205637" diff --git a/overlays/dev/patches/app-of-apps-patch.yaml b/overlays/dev/patches/app-of-apps-patch.yaml deleted file mode 100644 index 92dc058..0000000 --- a/overlays/dev/patches/app-of-apps-patch.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: app-of-apps - namespace: argocd-dev -spec: - source: - repoURL: https://github.com/CLD-3rd/final-team2-manifest.git - targetRevision: dev - path: manifest/overlays/dev - destination: - namespace: argocd-dev \ No newline at end of file diff --git a/overlays/prod/applications/backend-api.yaml b/overlays/prod/deployment-patch.yaml similarity index 50% rename from overlays/prod/applications/backend-api.yaml rename to overlays/prod/deployment-patch.yaml index 2cc0824..838840c 100644 --- a/overlays/prod/applications/backend-api.yaml +++ b/overlays/prod/deployment-patch.yaml @@ -1,33 +1,14 @@ ---- -# Backend API Deployment (Prod 환경) apiVersion: apps/v1 kind: Deployment metadata: - name: backend-api-prod - namespace: backend-prod - labels: - app: backend-api - environment: prod + name: backend-api spec: - replicas: 3 # Prod 환경: 3개 (고가용성) - selector: - matchLabels: - app: backend-api - environment: prod + replicas: 5 # Prod 환경: 5개 (고가용성) template: - metadata: - labels: - app: backend-api - environment: prod spec: containers: - name: backend-api - # Production용 Docker 이미지 - image: cjsqudwns/goteego-server:latest imagePullPolicy: IfNotPresent # Prod 환경: 안정성을 위해 변경시에만 - ports: - - containerPort: 8080 - name: http env: - name: ENVIRONMENT value: "production" @@ -82,67 +63,3 @@ spec: port: 8080 initialDelaySeconds: 5 periodSeconds: 5 ---- -# Backend API Service (Prod) -apiVersion: v1 -kind: Service -metadata: - name: backend-api-service-prod - namespace: backend-prod -spec: - selector: - app: backend-api - environment: prod - ports: - - port: 80 - targetPort: 8080 - protocol: TCP - type: ClusterIP ---- -# Backend API Ingress (Prod) - AWS Load Balancer Controller 사용 -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: backend-api-ingress-prod - namespace: backend-prod - annotations: - # AWS Load Balancer Controller 사용 - kubernetes.io/ingress.class: alb - alb.ingress.kubernetes.io/scheme: internet-facing - alb.ingress.kubernetes.io/target-type: ip - # TODO: cert-manager ClusterIssuer 이름 확인 (letsencrypt-prod 권장) - cert-manager.io/cluster-issuer: letsencrypt-staging # Staging 인증서 - # CORS 설정 - alb.ingress.kubernetes.io/actions.ssl-redirect: | - { - "Type": "redirect", - "RedirectConfig": { - "Protocol": "HTTPS", - "Port": "443", - "StatusCode": "HTTP_301" - } - } -spec: - tls: - - hosts: - # TODO: YOUR_DOMAIN을 실제 도메인으로 변경 (예: goteego.store) - - api.goteego.store - secretName: backend-api-prod-tls - rules: - # TODO: YOUR_DOMAIN을 실제 도메인으로 변경 - - host: api.goteego.store - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: backend-api-service-prod - port: - number: 80 ---- -# Namespace -apiVersion: v1 -kind: Namespace -metadata: - name: backend-prod \ No newline at end of file diff --git a/overlays/prod/ingress.yaml b/overlays/prod/ingress.yaml new file mode 100644 index 0000000..17102de --- /dev/null +++ b/overlays/prod/ingress.yaml @@ -0,0 +1,40 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: backend-api-ingress-prod + namespace: backend-prod + annotations: + # AWS Load Balancer Controller 사용 + kubernetes.io/ingress.class: alb + alb.ingress.kubernetes.io/scheme: internet-facing + alb.ingress.kubernetes.io/target-type: ip + # TODO: cert-manager ClusterIssuer 이름 확인 (letsencrypt-prod 권장) + cert-manager.io/cluster-issuer: letsencrypt-staging # Staging 인증서 + # CORS 설정 + alb.ingress.kubernetes.io/actions.ssl-redirect: | + { + "Type": "redirect", + "RedirectConfig": { + "Protocol": "HTTPS", + "Port": "443", + "StatusCode": "HTTP_301" + } + } +spec: + tls: + - hosts: + # TODO: YOUR_DOMAIN을 실제 도메인으로 변경 (예: goteego.store) + - api.goteego.store + secretName: backend-api-prod-tls + rules: + # TODO: YOUR_DOMAIN을 실제 도메인으로 변경 + - host: api.goteego.store + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: backend-api-service # base의 서비스 이름 + port: + number: 80 diff --git a/overlays/prod/kustomization.yaml b/overlays/prod/kustomization.yaml index 8236fb9..41de415 100644 --- a/overlays/prod/kustomization.yaml +++ b/overlays/prod/kustomization.yaml @@ -1,24 +1,20 @@ apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization +# 이 Kustomization으로 생성되는 모든 리소스에 적용될 기본 네임스페이스 namespace: backend-prod +# 1. 공통 설정(base)과 prod 환경 전용 리소스를 포함 resources: - ../../base - - applications/backend-api.yaml + - ingress.yaml # Prod 환경용 Ingress +# 2. base의 내용을 prod 환경에 맞게 수정(patch) patches: - - path: patches/app-of-apps-patch.yaml - target: - kind: Application - name: app-of-apps + - path: deployment-patch.yaml # Prod용 Deployment 수정사항 (replicas, env 등) -configMapGenerator: - - name: backend-config - literals: - - ENVIRONMENT=prod - - REPO_URL=https://github.com/CLD-3rd/final-team2-manifest.git - -commonLabels: - environment: prod - app.kubernetes.io/environment: prod \ No newline at end of file +# 3. Prod 환경에서 사용할 Docker 이미지를 지정 +images: + - name: backend-api # base의 Deployment 이름과 일치 + newName: cjsqudwns/goteego-server # 운영용 이미지 저장소 + newTag: 99f26c4 # prod는 안정된 버전의 태그로 설정해야 함 (플젝 끝나갈 때 쯤 다시한번 수정해야 함) [confirm] diff --git a/overlays/prod/patches/app-of-apps-patch.yaml b/overlays/prod/patches/app-of-apps-patch.yaml deleted file mode 100644 index bf6df7f..0000000 --- a/overlays/prod/patches/app-of-apps-patch.yaml +++ /dev/null @@ -1,12 +0,0 @@ -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: app-of-apps - namespace: argocd-prod -spec: - source: - repoURL: https://github.com/CLD-3rd/final-team2-manifest.git - targetRevision: HEAD - path: manifest/overlays/prod - destination: - namespace: argocd-prod \ No newline at end of file