반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- MLflow
- Kubeflow
- opentelemetry
- nginx ingress
- 카오스 엔지니어링
- 오퍼레이터
- Litmus
- serving
- argocd
- Kubernetes 인증
- Pulumi
- gitops
- kubernetes operator
- mlops
- seldon core
- knative
- gitea
- argo rollout
- operator
- keda
- tekton
- Model Serving
- blue/green
- CI/CD
- Continuous Deployment
- CANARY
- Kubernetes
- Argo
- Kopf
- opensearch
Archives
- Today
- Total
Kubernetes 이야기
Argo workflow 를 활용하여 CI/CD 구축하기 (기본설치) 본문
반응형
Argo Workflow
Argo Workflows는 Kubernetes에서 병렬 작업을 오케스트레이션하기 위한 오픈 소스 컨테이너 네이티브 워크플로 엔진입니다. Argo Workflows는 Kubernetes CRD(Custom Resource Definition)로 구현됩니다.
- 워크플로의 각 단계가 컨테이너인 워크플로를 정의합니다.
- 다단계 워크플로를 작업 시퀀스로 모델링하거나 DAG(방향성 비순환 그래프)를 사용하여 작업 간의 종속성을 캡처합니다.
- Kubernetes에서 Argo Workflows를 사용하여 짧은 시간 안에 기계 학습 또는 데이터 처리를 위한 컴퓨팅 집약적인 작업을 쉽게 실행할 수 있습니다.
- 복잡한 소프트웨어 개발 제품을 구성하지 않고도 Kubernetes에서 기본적으로 CI/CD 파이프라인을 실행합ㄴ디ㅏ.
왜 사용하는가?
- 레거시 VM 및 서버 기반 환경의 오버헤드와 제한 없이 처음부터 컨테이너용으로 설계되었습니다.
- 클라우드에 구애받지 않으며 모든 Kubernetes 클러스터에서 실행할 수 있습니다.
- Kubernetes에서 고도로 병렬화된 작업을 쉽게 오케스트레이션합니다.
- Argo Workflows는 클라우드 규모의 슈퍼컴퓨터를 손쉽게 사용할 수 있게 해줍니다!
그럼, 이제 argo workflow를 활용하여 만들 CI/CD 프로세스는 아래와 같다.
1. git : 소스 저장소
2. SonarQube : 소스 취약성 검사
3. Kaniko : Container Image Build
4. Trivy : Container Image 취약성 검사
5. Container Registry : Image 저장소
6. CD ( B/G or Canary ) : Argo rollout 사용
그럼 먼저 argo를 설치해 보자.
설치
설치는 아래와 같이 진행한다.
# kubectl create ns argo
# kubectl apply -n argo -f https://raw.githubusercontent.com/argoproj/argo-workflows/master/manifests/quick-start-postgres.yaml
설치된 내역은 아래와 같다.
# kubectl get all -n argo
NAME READY STATUS RESTARTS AGE
pod/argo-server-5d58f6585d-c5rc5 1/1 Running 1 114s
pod/minio-79566d86cb-rcc7h 1/1 Running 0 114s
pod/postgres-546d9d68b-bjjcj 1/1 Running 0 114s
pod/workflow-controller-649c5c9cb7-wdr72 1/1 Running 0 114s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/argo-server ClusterIP 10.104.197.95 <none> 2746/TCP 114s
service/minio ClusterIP 10.102.251.224 <none> 9000/TCP 114s
service/postgres ClusterIP 10.100.13.178 <none> 5432/TCP 114s
service/workflow-controller-metrics ClusterIP 10.105.6.14 <none> 9090/TCP 114s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/argo-server 1/1 1 1 114s
deployment.apps/minio 1/1 1 1 114s
deployment.apps/postgres 1/1 1 1 114s
deployment.apps/workflow-controller 1/1 1 1 114s
NAME DESIRED CURRENT READY AGE
replicaset.apps/argo-server-5d58f6585d 1 1 1 114s
replicaset.apps/minio-79566d86cb 1 1 1 114s
replicaset.apps/postgres-546d9d68b 1 1 1 114s
replicaset.apps/workflow-controller-649c5c9cb7 1 1 1 114s
argo-server의 service를 nodePort로 변경 후 https:// 로 접근하면 아래와 같이 보인다.
kind를 사용하는 경우는 ingress로 등록하여 접속한다.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: argo-ingress namespace: argo annotations: nginx.ingress.kubernetes.io/backend-protocol: https cert-manager.io/cluster-issuer: selfsigned-cluster-issuer spec: rules: - host: "argo.10.10.100.10.nip.io" http: paths: - path: / pathType: Prefix backend: service: name: argo-server port: number: 2746 tls: - hosts: - argo.10.10.100.10.nip.io secretName: argo-cert
그럼 이제, Pipeline의 첫단계인 git repostiry에서 소스를 받아오는 샘플을 만들어보자.
apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
generateName: input-artifact-git-
spec:
entrypoint: git-clone
templates:
- name: git-clone
inputs:
artifacts:
- name: argo-source
path: /src
git:
repo: git://github.com/kmaster8/kubernertes.git
revision: "main"
container:
image: busybox
command: [sh, -c]
args: ["ls -al"]
workingDir: /src
실행을 하면 아래와 같이 실행결과를 조회할 수 있다.
위의 로그는 argo workflow에서 실행하였던 git clone 결과를 보여주는 것이다.
* Argo 실행 시 Container는 정상 종료되었으나 실패로 표기되는 경우가 있다.
위 에러는 workflow 컨트롤러가 default 계정을 사용하는데 이 default 계정으로는 pod의 로그 조회 등 충분한 권하니 없어서이다.
아래와 같이 ServiceAccount를 생성하고 workflow 실행 시 serviceaccout를 지정하여 준다.
export NAMESPACE=argo kubectl apply -n ${NAMESPACE} -f - <<EOF apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: workflow rules: - apiGroups: - "" resources: - pods verbs: - "*" - apiGroups: - "apps" resources: - deployments verbs: - "*" - apiGroups: - "" resources: - pods/log verbs: - "*" - apiGroups: - machinelearning.seldon.io resources: - "*" verbs: - "*" EOF kubectl create -n ${NAMESPACE} serviceaccount workflow kubectl create rolebinding -n ${NAMESPACE} workflow --role=workflow --serviceaccount=${NAMESPACE}:workflow
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: input-artifact-git- spec: serviceAccountName: workflow entrypoint: git-clone ...
이제 다음 글에 두번째 pipeline 절차인 Sonarqube 연동하는 방법을 테스트해 보겠다.
반응형
'Kubernetes > devops' 카테고리의 다른 글
Kubernetes에서 Gitea 사용하기 (0) | 2022.03.23 |
---|---|
(docker) PMD 사용하기 (0) | 2022.03.22 |
Argo Workflow를 사용한 CI/CD 구성 (Kaniko / Trivy) (2) | 2022.03.03 |
Argo workflow 를 활용하여 CI/CD 구축하기 (SonarQube) (2) | 2022.03.03 |
Argo rollout을 통한 Blue/Green CD (Continuous Deployment) 구축하기 (2) - Blue/Green 배포 (0) | 2022.02.27 |
Comments