포스트

[Azure/Spring] ArgoCD 설정하기

[Azure/Spring] ArgoCD 설정하기

GitOps 경로 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
gitops
  .gitignore
│
└─backend
    ├─base
    │      configmap.yaml
    │      deployment.yaml
    │      kustomization.yaml
    │      secret.yaml
    │      service.yaml
    │
    └─overlays
        └─dev
                deployment-patches.yaml
                kustomization.yaml
                service-patches.yaml
  • 기본이 되는 yaml은 일반적으로 /base 경로에 설정한다.
  • 개발 환경이나 운영 환경은 각각 overlaysdev, prd 형식으로 상속 방식으로 구성을 한다.

Pasted image 20241119142746

deployment.yaml

base/kustomization.yaml

1
2
3
4
5
6
7
8
9
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: journeyjinni

resources:
- secret.yaml
- configmap.yaml
- deployment.yaml
- service.yaml
  • 확장성을 고려해 기본적인 정보만 작성한다.
  • 자세한 정보는 각 환경에 따른 kustomization.yaml 에 작성

overlays/dev/kustomization.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

namespace: journeyjinni

images:
- name: jinnicontainerregistry.azurecr.io/jinni
  newTag: "20241119015211"

resources:
- ../../base

patches:
- path: deployment-patches.yaml
- path: service-patches.yaml
  • basedeprcated 됨, resources를 사용해 부모를 가져옴
  • patches 를 사용해 같은 디렉토리 내의 상세 yaml을 가져온다.
  • images 를 통해 이용할 이미지의 태그를 저장

/base/deployment.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
kind: Deployment
apiVersion: apps/v1
metadata:
  name: journeyjinni-backend
  namespace: journeyjinni
spec:
  selector:
    matchLabels:
      app: journeyjinni-backend
  template:
    metadata:
      labels:
        app: journeyjinni-backend
    spec:
      containers:
      - name: journeyjinni-backend
        image: placeholder-image # 오버레이에서 패치
  • 기본이 되는 deployment.yaml
  • image: placeholder-image는 뒤의 patch.yaml에서 적절한 image로 대체되어진다.

/overlays/dev/kustomization.yaml

1
2
3
images:
- name: jinnicontainerregistry.azurecr.io/jinni
  newTag: "20241119015211"

ACR(Azure Container Registry)에서 이미지의 현재 태그를 지속적으로 갱신

/overlays/dev/deployment-patches.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: apps/v1
kind: Deployment
metadata:
  name: journeyjinni-backend
  namespace: journeyjinni
spec:
  template:
    spec:
      containers:
      - name: journeyjinni-backend
        image: jinnicontainerregistry.azurecr.io/jinni
        ports:
        - containerPort: 8080
  • image 를 미리 설정했기에 deployment에서 태그 값을 설정해줄 필요는 없다.
  • port만 지정하는 방식으로 설정

service.yaml

service-patches.yaml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: v1  # API 버전
kind: Service  # 리소스 유형
metadata:  # 서비스 이름, 네임스페이스, 리소스 식별을 위한 라벨 설정
  name: journeyjinni-backend
  namespace: journeyjinni
  labels:
    app: journeyjinni-backend
    chart: journeyjinni-backend-1.0.0
    release: journeyjinni-backend-dev
spec:  # 서비스의 특성과 동작을 정의
  ports:
    - name: http
      protocol: TCP
      port: 80 # 서비스의 외부 포트
      targetPort: 8080 # 서비스가 연결한 백엔드 파드의 포트
  selector:  # pod를 선택
    app: journeyjinni-backend
    chart: journeyjinni-backend-1.0.0
    release: journeyjinni-backend-dev
  type: LoadBalancer
  sessionAffinity: None
  • port
    • pod 자체가 80포트에서 열려 있고 해당 요청을 8080포트로 연결되어 있는 pod안의 해당 service로 유도를 한다.
  • selector
    • 해당 서비스를 라우팅 하는 pod를 어떤걸 고를지 정함
    • 지정된 레이블(app, chart, release)가 모두 일치 해야 연결됨
  • type
    • 서비스 유형을 LoadBalancer로 설정함으로써, 외부 네트워크에서 접근을 허용함
    • 이걸 해야 EXTERNAL-IP가 활성화 된다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.