4. 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등
• 그 외 다수
5. 4
Kubernetes Anywhere
Public cloud (AWS등)와 Private Cloud (OpenStack, VMWare등), 그리고 Baremetal 노드 등의 다양한
환경에 Kubernetes cluster 배포 è 다음 세션에서 Kubernetes cluster-API 관련 내용 소개
Decapod
TKS
6. 5
Everything on Kubernetes
LMA, Service Mesh, OpenStack 등의 Pre-defined Application Group부터 그 외 사용자가 원하는
다양한 워크로드들을 배포 가능 è 후반부 데모 진행
LMA
SERVICE
MESH
portal
Decapod
TKS
7. 6
Challenge
Kubernetes에 원하는 Application을 배포하는데 겪었던 대표적인 어려움과 니즈
• Configuration 관리
• 다수의 환경에 다수의 application(chart)을 어떻게 쉽게 배포할 수 있을까? ( # of apps X # of site = ?? )
• 공통 설정 수정하려면 다수의 파일을 반복적으로 수정하는 불편함
• 자체적으로 documentation tool 만들어썼으나 사용성/확장성의 한계
Monitoring
Logging
Site A Site B
Site C
8. 7
Challenge
• Deployment
• 배포 과정을 좀더 가시적으로 확인할 수 없을까??
• Application 간의 dependency 등을 효율적으로
관리하고 싶은데...
• 실패시 retry 도 쉽게 가능했으면…
Kubernetes에 원하는 Application을 배포하는데 겪었던 대표적인 어려움과 니즈
9. 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
10. 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 간의 배포 순서 등을 컨트롤
11. 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
21. 20
Deployment
• Argo CD application 생성 방법
• Argo CD CLI
• Decapod’s main approach
• Argo Workflows를 통해 순차적으로 app을 생성함으로써, app별 의존성을 고려한 조직화된 배포 가능
• Declarative manifest
• Yaml 형식의 manifest 파일로 App 생성
• 후반부 bootstrap 페이지에서 설명
22. 21
Deployment > Argo-workflow UI
LMA AppGroup 배포 workflow 실행
Argo CD CLI 호출
App 간의 의존성을 고려한 배포 가능
Eck-operator
(step)
25. 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
26. 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
27. 26
Decapod 설치 > Argo CD initial config
• Argo CD helm chart용 value-override file
• Argo CD 설치 직후 bootstrap을 위한 프로젝트
및 (meta) application들이 자동 생성됨
28. 27
Decapod 설치 > meta-apps
• Argo CD에 최초로 meta-application 들이 생성된 모습
29. 28
Decapod 설치 > application manifest
• Postgresql app을 생성하기 위한 manifest 파일
• Decapod-apps 디렉토리에 위치
30. 29
l Argo CD 에 모든 decapod components 가 생성된 모습
decapod application
Meta application
Decapod 설치 > application 생성
31. } 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