Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Decapod

 Decapod

Devocean Tech Day
Everything on Kubernetes, Kubernetes Anywhere 기술세션

세션 제목:
(Everything on Kubernetes) GitOps기반의 배포기술 이야기 - Decapod: Deployment Pipeline for Multi-Cluster

세션 내용:
멀티클러스터에 어플리케이션을 배포할 경우 설정 값은 공통된 설정 값과 클러스별 특화된 값으로 구분될 수 있습니다.

SK Telecom에서 만든 오픈소스SW인 Decapod는 이 두가지 값을 구분하여 체계적으로 관리하고, 이를 GitOps 방식으로 지속적으로 클러스터에 배포하여 항상 일정한 상태를 유지하게 해줍니다. 또한 어플리케이션별 의존성을 고려하여 적절한 순서로 어플리케이션 배포가 이루어지게 합니다.

이번 세션을 통해 Decapod를 기반으로 SKT의 컨테이너 솔루션이 어떻게 멀티 클러스터에 어플리케이션을 배포하는지 알아보겠습니다. (Demo: Decapod 를 이용하여 TKS 상에 MSA Application 배포하기)

SKT Container Solution

April 29, 2022
Tweet

More Decks by SKT Container Solution

Other Decks in Technology

Transcript

  1. 01 Overview 02 Decapod Pipeline > Documentation 03 Decapod Pipeline

    > Deployment 04 Decapod 설치 (bootstrap) 05 Demo
  2. 3 Decapod (Declarative Application Orchestration & Delivery) 무엇인가요? • Decapod의

    사전적 의미 • 십각목 : 10개의 다리를 가진 갑각류 à 다수의 다리로 다양한 어플리케이션을 들고 손쉽게 이동 • 다양한 Application들을 서로 연동하여 그룹화하고, 이를 다수의 Kubernetes에 배포, 관리하기 위한 파이프라인 • Kustomize, Argo 등의 오픈소스를 기반으로 SKT에서 자체 개발한 오픈소스SW 어디에, 어떻게 쓰이나요? • SKT Container Platform에서는 Decapod를 기반으로 Cloud Infra Resource, Kubernetes Cluster 및 다양한 서비스들을 GitOps 형태로 배포•관리하고 있으며, 실제 다음 Use Case들에서 활용 중 (사실상 모든 것!!!) • Kubernetes Cluster & Cloud Infra Resource • Logging/Monitoring Prometheus, 다양한 Exporter들, Thanos, Grafana, Loki, Promtail 등 • Service Mesh Istio, Jaeger, Kiali, Elastic Search, Kibana, Service-mesh Portal등 • OpenStack Nova, Neutron, Cinder, Keystone, Horizon등 • 그 외 다수
  3. 4 Kubernetes Anywhere Public cloud (AWS등)와 Private Cloud (OpenStack, VMWare등),

    그리고 Baremetal 노드 등의 다양한 환경에 Kubernetes cluster 배포 è 다음 세션에서 Kubernetes cluster-API 관련 내용 소개 Decapod TKS
  4. 5 Everything on Kubernetes LMA, Service Mesh, OpenStack 등의 Pre-defined

    Application Group부터 그 외 사용자가 원하는 다양한 워크로드들을 배포 가능 è 후반부 데모 진행 LMA SERVICE MESH portal Decapod TKS
  5. 6 Challenge Kubernetes에 원하는 Application을 배포하는데 겪었던 대표적인 어려움과 니즈

    • Configuration 관리 • 다수의 환경에 다수의 application(chart)을 어떻게 쉽게 배포할 수 있을까? ( # of apps X # of site = ?? ) • 공통 설정 수정하려면 다수의 파일을 반복적으로 수정하는 불편함 • 자체적으로 documentation tool 만들어썼으나 사용성/확장성의 한계 Monitoring Logging Site A Site B Site C
  6. 7 Challenge • Deployment • 배포 과정을 좀더 가시적으로 확인할

    수 없을까?? • Application 간의 dependency 등을 효율적으로 관리하고 싶은데... • 실패시 retry 도 쉽게 가능했으면… Kubernetes에 원하는 Application을 배포하는데 겪었던 대표적인 어려움과 니즈
  7. 8 특징 • Documentation • 직관적이고 체계적인 문서 구조화를 통한

    가시성 및 작업 편의성 (생산성) 향상 • Delivery • Argo를 통해 app grouping 및 dependency 지정 등 좀더 조직화된 형태의 배포를 지원 • 배포 과정을 UI 상에서 시각화 • GitOps 방식의 자동화된 배포 • 100% Open Source • https://github.com/openinfradev/decapod-base-yaml :생성될 manifest의 base가 되는 base resource yaml • https://github.com/openinfradev/decapod-site : 환경에 맞게 kustomize를 통해 override할 수 있는 site yaml • https://github.com/openinfradev/decapod-flow : Argo WorkflowTemplate들의 저장소 • https://github.com/openinfradev/decapod-bootstrap : 최초 decapod component들을 설치해주는 프로젝트 • https://openinfradev.github.io/decapod-docs/ : 공식 document
  8. 9 Tool Chain • Kustomize (+ Helm transformer plugin) +

    Helm chart renderer • Kustomize: K8S의 YAML 관리 툴로서, 구조화된 방식으로 문서 관리 • Renderer: Helm chart 내용을 k8s native manifest로 render • Argo CD • Gitops 기반 배포 tool로서, helm charts, k8s manifest 등을 이용해 K8S 상에 app 배포 • Argo Workflows • Workflow engine 으로서 단계적인 task 수행 • Decapod에서 서로 의존성을 가진 다수의 app들을 grouping해서 한번에 배포/ 각 app 간의 배포 순서 등을 컨트롤
  9. 10 Decapod at a glance Container 형태의 다수의 Application들을 선언적인

    방법으로 Kubernetes 상에 효과적으로 배포 선언적 APP 구성 Example LMA (Logging, Monitoring, Alerting) K8S Resource reconcile Decapod (GitOps기반의 workflow control & continuous deployment ) Kubernetes APP 형태로 배포 [App] prom-operator - chart_info - custom_values [App] fluentbit - chart_info - custom_values [App] prometheus - chart_info - custom_values Workflow Decapod YAMLs Prom- operator fluentbit prometheus . . . . . . . . prom-operator fluentbit fluentbit prometheus
  10. 11 Architecture (Pipeline) Manifest를 만드는 documentation 단계, 그리고 App 간의

    의존성을 고려하여 App들을 실제 배포하는 deployment 단계로 구성
  11. 14 Documentation Helm chart value Decapod-base-yaml Decapod-site Helm chart URL

    + 모든 사이트에 적용되는 공통의 설정 & Site별 필수 override 값 각 사이트별 특화된 설정 (필수 override값) 전체 helm values 중에서 검증되고 필요한 값들을 선택하여 base-yaml 구성
  12. 15 Documentation > Base-yaml - Helm chart URL - 모든

    사이트에 적용되는 common한 설정/ 각 site에서 반드시 override되어야 하는 value 값들 포함
  13. 16 Documentation > Site-values • Site-values 는 base 의 특정

    내용을 각 환경에 적절한 값으로 override Site-values (in decapod-site) Decapod-base-yaml
  14. 20 Deployment • Argo CD application 생성 방법 • Argo

    CD CLI • Decapod’s main approach • Argo Workflows를 통해 순차적으로 app을 생성함으로써, app별 의존성을 고려한 조직화된 배포 가능 • Declarative manifest • Yaml 형식의 manifest 파일로 App 생성 • 후반부 bootstrap 페이지에서 설명
  15. 21 Deployment > Argo-workflow UI LMA AppGroup 배포 workflow 실행

    Argo CD CLI 호출 App 간의 의존성을 고려한 배포 가능 Eck-operator (step)
  16. 22 Deployment > Argo-CD UI • Argo CD에 LMA project와

    LMA Application들이 생성되는 모습
  17. 24 Decapod-bootstrap at a glance • App-of-apps 패턴을 사용하여 최초에

    decapod component들을 bootstrap하기 위한 프로젝트 • 최초 decapod가 존재하지 않는 상태에서 decapod component들을 손쉽게 자동으로/원스텝으로 배포하기 위해 개발 • Single helm chart와 git repository 상의 config 파일들로 일관성 있는 배포를 보장 (Run “helm install” -> “All done!”) § Argo CD를 설치하면서 최초의 meta app을 생성하며, 이 meta app이 decapod component들을 설치해주는 구조 § Documentation: decapod-docs
  18. 25 Decapod-bootstrap at a glance • App-of-apps 패턴을 사용하여 최초에

    decapod component들을 bootstrap하기 위한 프로젝트 • 최초 decapod가 존재하지 않는 상태에서 decapod component들을 손쉽게 자동으로/원스텝으로 배포하기 위해 개발 • Single helm chart와 git repository 상의 config 파일들로 일관성 있는 배포를 보장 (Run “helm install” -> “All done!”) § Argo CD를 설치하면서 최초의 meta app을 생성하며, 이 meta app이 decapod component들을 설치해주는 구조 § Documentation: decapod-docs
  19. 26 Decapod 설치 > Argo CD initial config • Argo

    CD helm chart용 value-override file • Argo CD 설치 직후 bootstrap을 위한 프로젝트 및 (meta) application들이 자동 생성됨
  20. 28 Decapod 설치 > application manifest • Postgresql app을 생성하기

    위한 manifest 파일 • Decapod-apps 디렉토리에 위치
  21. 29 l Argo CD 에 모든 decapod components 가 생성된

    모습 decapod application Meta application Decapod 설치 > application 생성
  22. } Cluster-api를 이용한 K8s cluster 설치 및 LMA group 등의

    설치를 모두 decapod로 수행 } Cluster-api 를 ‘helm chart화’한 후 decapod로 wrapping Git repository Decapod-manifests REPO Cluster-api-aws Prometheus Grafana Argo CD Decapod-site REPO (Admin) Kubernetes cluster Decapod-base REPO Argo Workflow Kustomize + plugin … Cluster-api-aws K8s group Prometheus Grafana LMA group Create appgroups Deployment (User) Kubernetes cluster Use Case > SKT Container platform
  23. 32 Demo Scenario LMA 앱그룹을 Decapod을 사용해 쿠버네티스 클러스터에 배포하는

    과정 Documentation Deployment decapod- base-yaml decapod- site kustomize+ decapod- manifests Documentation decapod-flow Argo worflow Argo CD Admin Cluster Deployment manifest exporters LMA App Group
  24. 34

  25. 35 [Demo] Documentation 어플리케이션 배포를 위한 Documentation 준비 Documentation Deployment

    decapod- base-yaml decapod- site kustomize+ decapod- manifests Documentation decapod-flow Argo worflow Argo CD Admin Cluster Deployment manifest exporters LMA App Group
  26. 36

  27. 37 [Demo] Deployment 준비한 Documentation과 Decapod 환경을 통해 LMA App

    group 배포 Documentation Deployment decapod- base-yaml decapod- site kustomize+ decapod- manifests Documentation decapod-flow Argo worflow Argo CD Admin Cluster Deployment manifest exporters LMA App Group
  28. 38

  29. 40 Toward Open Development § Github (github.com/openinfradev) 공간에서 모든 소스

    코드 공개 § DEVOCEAN (SK내 개발자 커뮤니티)을 통한 기술 공유, 이벤트 진행