728x90
반응형
Overview
지난번에는 Kustomize에 대해서 알아보았다.
2023.10.12 - [Container Orchestration/Kubernetes] - 1. Kustomize란?
Kustomize와 ArgoCD를 연동해서 사용하는 방법에 대해서 알아보려고 한다.
ArgoCD에 대해서 잘 모르신다면 아래의 글을 참조하면 된다.
2023.05.17 - [IaC/CI CD Tool] - ArgoCD란?
Kustomize + ArgoCD ApplicationSet
자세한 내용은 아래의 Github를 참조하면 된다. `argocd-applicationset-nginx-deployment` 를 실습해볼 예정이다.
https://github.com/somaz94/kustomize-study
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
- ArgoCD에 Github Repo용 Secret 및 Project 생성
- 템플릿 작성 및 업로드
- 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 링크로 대체한다.
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
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
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 |