인프런 워밍업 클럽 4기 - DevOps 4주차 발자국

인프런 워밍업 클럽 4기 - DevOps 4주차 발자국

k8s 리소스를 직접 배포하는것 보다 heml Kustomize 등의 배포 패키지 툴을 사용하는게 더 좋다.
헬름은 Chart라는 패키지 형태로 앱을 관리하며, 템플릿 기반 manifest에, values-{stage}.yaml, Chart.yaml, _hepers.tpl, helm command --set option 등을 활용해 동적으로 값을 주입할 수 있다.
반면 Kustomize는 Base 설정에 Overlay 방식으로 특정 환경에 대한 설정들을 덮어서 환경별로 다른 설정을 적용한다.

  • overlay하는 dir에 있는 모든 리소스를 적용하느게 아니라 kustomization.yaml 에 설정된 config에 따라 부분 적용이 가능하다.

배포 파이프라인을 만들면서 드는 고민과 답변들

  1. 배포에 사용되는 여러 툴 인증정보를 어떻게 관리할 것인가 > 배포툴의 Credentials 에 한번 정보를 기입해두고, 각 스테이지 별로 Credential 의 데이터를 가져와 처리하도록 한다. (cicd 서버 디스크에 직접 저장 X)

    1. 젠킨스 Credential, docker-credential-helpers..)

  2. 컨테이너 이미지 용량 관리 > 이미지별 LC를 두고 제거

    1. k8s 는 도커와 달리 이미지를 처리하는 gc 가 존재해, config 에 따로 설정하지 않으면 자동으로 안쓰는 이미지를 제거해준다.

  3. 네임 스페이스 관리 > 특히 여러 서비스가 존재하고 독립적으로 관리된다면, NS 설정은 리소스 배포와 독립적으로 두는게 낫다

  4. 배포 파드가 onService인지 확인 > helm --wait 옵션으로 배포 프로세스중 파드가 잘 뜬 다음 다음 단계로 진행시킬 수 있다.

  5. 배포시 파드가 업데이트 되지 않는 경우들 > deployments 는 내부 template 프로퍼티 하위값들이 바뀌어야 config에 맞춘 파드를 다시 띄운다.

    1. template.spec.metadata에 배포를 위한 값을 넣음으로써, 배포를 강제할 수 있다.

    2. 이를테면 어플리케이션 컨테이너의 변경때 사용가능!

  6. 이미지별 태그 관리

    1. 개발 환경처럼 잦은 배포가 있는 경우 version이 무의미할 수 있다.

      1. 이 때 latest tag + Always pullPolicy 가 적합

    2. 그러나 배포 관리가 필요한 운영환경에는 version이 필수이다.

      1. 이 때 version tag + IfNotPresent pullpoilcy 가 적합

        1. k8s 클러스터 내부에 이미지가 있다면 굳이 허브를 거칠 필요없이 바로 세팅 가능하다.

      2. 비슷하게 개발환경에도 롤백이 필요하다면 버전관리가 필요하고 해당 태그 정책을 가져가면 좋다.

Argo
 k8s 워크플로우 및 배포 관리를 위한 오픈소스 프로젝트 모음으로,  GitOps 방식으로 배포를 관리하며, CNCF 졸업 프로젝트이다.

  • ArgoCD: GitOps 기반 배포관리 툴

    • 깃에 k8s manifest를 저장하고, ArgoCD가 이 레포를 모니터링하면서 diff 감지 및 동기화 (Sync) 해주는 툴

  • ImageUpdater: 도커 허브에서 특정 이미지를 모니터링하면서 diff 감지해 자동 배포하는 툴

  • Argo Wrokflow: Airflow, Kubeflow와 같은 워크플로우 매니지먼트 툴

Argo Events: 카프카와 같은 이벤트 버스 툴

  •  

  • Argo Rollouts: 블루그린, 카나리 배포등을 지원하는 툴

k8s 클러스터에 설치되는 Argo 컴포넌트들은 아래와 같다.

  • Server: API 서버와 대시보드 역할 (웹 UI 및 API(CLI) 서버 역할)

  • Repo Server: 깃 저장소와 연결해 배포할 yaml 가져오고 k8s 배포할 manifest 생성

  • Application Controller: 깃에서 가져온 Desired Manifest 와 k8s 실제 적용된 Manifest를 비교하는 역할 & 필요하면 동기화 작업 수행

  • KubeAPI: k8s 리소스에 명령을 날려주는 역할

  • Redis: argo 시스템내 캐시 처리

  • Dex: 외부 인증 시스템 연동

AgoCD로 배포

  • k8s 클러스터에 argoCD 배포

  • argoCD를 통해 배포 관련 레포를 받아 k8s 클러스터에 배포

    • Application이 배포하는 앱 단위이고, Poeject로 그룹핑 가능

      • Source: 깃헙 소스 정보 / Destination: k8s 클러스터 정보

      • General ~ 그룹명, 앱명, SyncPolicy (배포 정책 ~수동/자동), SyncOption(배포 상세 옵션) / PrunePolicy(리소스 삭제 정책)

      • Desired Manifest ~ diff ~ Live Manifest, 로 Git 소스 중심의 차이점 파악

IamgeUpdater

  • 도커 허브 감지하다가 이미지 업데이트시 ArgoCD에 자동 배포 명령

  • Helm or Kustomize 를 활용해야 사용 가능하며 (내부에서 해당 패키지툴 명령어 사용)

  • argoCD 앱 정보와 도커 허브 연결정보를 IamgeUpdater에 넣어서 감지 및 반영(배포)를 자동화

Argo Rollout

  • ArgoCD 없이 사용 가능하며, CRD를 통해 k8s  Deployments 리소스를 배포와 관련해 확장해 만듦

  • 블루그린 배포시 preview 서비스를 만들고, 자동으로 Service를 붙였다 떼주며.

  • 카나리 배포시 특정 조건에 따라 트래픽량 조정이 가능하며, steps를 통해 트래픽 주기 및 기타 설정을 단계별로 적용하며 배포프로세스를 유연하게 가져갈 수 있음

4주차 학습 후기

  • 헬름 차트, Kustomize, Argo와 안면을 틀 수 있었던, 큰 그림을 이해해볼 수 있었던 시간!

  • 특히 헬름차트와 더욱 친해지고 내것으로 만들기위해 더 노력해야겠다!

  • 마지막 까지 다들 고생하셨습니다! & 좋은 강의 만들어주셔서 감사합니다 강사님!!

댓글을 작성해보세요.

  • 일프로
    일프로

    끝까지 잘 따라와 주셔서 저도 감사드려요^^

채널톡 아이콘