Container Orchestration/Kubernetes

2. Kustomize + ArgoCD ApplicationSet

Somaz 2023. 10. 14. 01:01
728x90
반응형

Overview

지난번에는 Kustomize에 대해서 알아보았다.

2023.10.12 - [Container Orchestration/Kubernetes] - 1. Kustomize란?

 

Kustomize와 ArgoCD를 연동해서 사용하는 방법에 대해서 알아보려고 한다.

 

출처 : https://mrdevops.medium.com/github-action-kustomize-argocd-94e5abfcf6bd

 

ArgoCD에 대해서 잘 모르신다면 아래의 글을 참조하면 된다.

2023.05.17 - [IaC/CI CD Tool] - ArgoCD란?

 

ArgoCD란?

Overview 오늘은 ArgoCD에 대해 공부해보려고 한다. ArgoCD란? Argo CD 는 Kubernetes를 위한 선언적 GitOps 지속적 배포 도구이다. 그렇다면 왜 ArgoCD를 사용해야 할까? 애플리케이션 정의, 구성 및 환경은 선

somaz.tistory.com

 


Kustomize + ArgoCD ApplicationSet  

자세한 내용은 아래의 Github를 참조하면 된다. `argocd-applicationset-nginx-deployment` 를 실습해볼 예정이다.

https://github.com/somaz94/kustomize-study

 

GitHub - somaz94/kustomize-study: kustomize-study

kustomize-study. Contribute to somaz94/kustomize-study development by creating an account on GitHub.

github.com

 

 


 

argocd-applicationset-nginx-deployment

ArgoCD Applicationset과 Kustomize을 사용해 배포할 것이다. 환경은 `dev, qa, prod` 이다.

 

 

디렉토리 구조

  • `app/nginx/base` : Nginx 어플리케이션의 기본 리소스가 포함되어 있다.
  • `app/nginx/overlays` : 특정 환경에 맞게 조정된 리소스 구성이 포함된 디렉터리이다. 각 환경 `(dev, qa, prod)` 에 대한 리소스 변형을 정의한다.
  • `appset` : ArgoCD ApplicationSet에 대한 정의가 포함된다.
  • `github-secret` : Github 저장소에 액세스하기 위한 비밀을 정의한다.
.
├── README.md
├── app
│   └── nginx
│       ├── base
│       │   ├── kustomization.yaml
│       │   ├── nginx-deployment.yaml
│       │   ├── nginx-ingress.yaml
│       │   └── nginx-service.yaml
│       └── overlays
│           ├── dev
│           │   ├── ingress.yaml
│           │   ├── kustomization.yaml
│           │   └── replica-count.yaml
│           ├── prod
│           │   ├── ingress.yaml
│           │   ├── kustomization.yaml
│           │   └── replica-count.yaml
│           └── qa
│               ├── ingress.yaml
│               ├── kustomization.yaml
│               └── replica-count.yaml
├── appsets
│   └── nginx-applicationset.yaml
└── github-secret
    └── github-secret.yaml

 

 

Deployment Workflow

  1. ArgoCD에 Github Repo용 Secret 및 Project 생성
  2. 템플릿 작성 및 업로드
  3. ArgoCD에 ApplicationSet 배포

 

 

ArgoCD에 Github Repo용 Secret 및 Project 생성

# github-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: github-secret
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: repository
stringData:
  type: git
  url: git@github.com:somaz94/kustomize-study.git
  sshPrivateKey: |
    # sshPrivateKey Example
    -----BEGIN OPENSSH PRIVATE KEY-----           
    b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
    ...
    0zbXo5J4Yb6oMAAAAUZ2VuaXVzNTcxMUBnbWFpbC5jb20BAgMEBQYH
    -----END OPENSSH PRIVATE KEY-----
    
# secret 배포
kubectl apply -f github-secret.yaml -n argocd

github repo 등록 확인
project 생성

 

 

템플릿 작성 및 업로드

해당 내용은 Github 링크로 대체한다.

 

 

ArgoCD에 ApplicationSet 배포

# nginx-applicationset.yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: nginx-appicationset
spec:
  generators:
    - matrix:
        generators:
          - list:
              elements:
                - cluster: master-node.somaz.link
                  url: https:// # ClusterIP or URI or Domain
                  overlay: dev # This new field specifies the overlay to use
                  values:
                    environment: dev
                    project: nginx
                - cluster: master-node.somaz.link
                  url: https:// 
                  overlay: qa
                  values:
                    environment: qa
                    project: nginx
                - cluster: master-node.somaz.link
                  url: https:// 
                  overlay: prod
                  values:
                    environment: prod
                    project: nginx
          - git:
              repoURL: git@github.com:somaz94/kustomize-study.git
              revision: HEAD
              directories:
                - path: argocd-applicationset-nginx-deployment/app/nginx/overlays/{{overlay}} # Use the new overlay field
  template:
    metadata:
      name: '{{values.environment}}-{{values.project}}'
    spec:
      project: '{{values.project}}'
      source:
        repoURL: git@github.com:somaz94/kustomize-study.git
        targetRevision: HEAD
        path: '{{path}}'
        kustomize:
          namePrefix: '{{values.environment}}-'
      destination:
        server: '{{url}}'
        namespace: '{{values.environment}}-{{values.project}}'
      syncPolicy:
        automated:
          prune: true
          selfHeal: true
        syncOptions:
          - CreateNamespace=true
          - ApplyOutOfSyncOnly=true
          
# argocd appcliationset 배포
kubectl apply -f nginx-applicationset -n argocd

ArgoCD 배포 완료된 화면

 

k get po,svc,ingress -n dev-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
pod/dev-nginx-deployment-8d545c96d-2w7sw   1/1     Running   0          88s

NAME                        TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)   AGE
service/dev-nginx-service   ClusterIP   10.233.21.0   <none>        80/TCP    88s

NAME                                          CLASS    HOSTS                        ADDRESS        PORTS   AGE
ingress.networking.k8s.io/dev-nginx-ingress   <none>   dev-nginx.fgn.nerdystar.io   10.10.100.22   80      88s

k get po,svc,ingress -n qa-nginx
NAME                                      READY   STATUS    RESTARTS   AGE
pod/qa-nginx-deployment-8d545c96d-4bd8t   1/1     Running   0          93s
pod/qa-nginx-deployment-8d545c96d-mxchm   1/1     Running   0          93s

NAME                       TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
service/qa-nginx-service   ClusterIP   10.233.62.87   <none>        80/TCP    94s

NAME                                         CLASS    HOSTS                       ADDRESS        PORTS   AGE
ingress.networking.k8s.io/qa-nginx-ingress   <none>   qa-nginx.fgn.nerdystar.io   10.10.100.22   80      93s

k get po,svc,ingress -n prod-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
pod/prod-nginx-deployment-8d545c96d-45z4t   1/1     Running   0          96s
pod/prod-nginx-deployment-8d545c96d-jspm5   1/1     Running   0          96s
pod/prod-nginx-deployment-8d545c96d-qf97w   1/1     Running   0          96s

NAME                         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/prod-nginx-service   ClusterIP   10.233.17.172   <none>        80/TCP    97s

NAME                                           CLASS    HOSTS                         ADDRESS        PORTS   AGE
ingress.networking.k8s.io/prod-nginx-ingress   <none>   prod-nginx.fgn.nerdystar.io   10.10.100.22   80      96s

 

 


Reference

https://github.com/somaz94/kustomize-study

728x90
반응형

'Container Orchestration > Kubernetes' 카테고리의 다른 글

K3s & k3sup 이란?  (2) 2024.01.05
Flux란? / Flux + Kustomize  (2) 2023.10.16
1. Kustomize란?  (0) 2023.10.12
CertManager로 Let's Encrypt 인증서 발급  (2) 2023.10.03
Kubernetes Autoscaling & Karpenter  (0) 2023.05.24