K8s IaC 도구들 뭘 쓸까?

1 minute read

목적

  • 인프라 코드화 관리

  • 인프라 반복생성

  • 공개된 인프라 설정 사용
    helm chart, operator

사용 케이스

개인 서버 설치시

helm차트 traefik, coredns, haproxy, mariadb, postgresql, 등등 각각을 여러번 실행시키는게 귀찮아서

  1. helm차트 하나에 넣어보기도 하고

  2. helmsman, helmfile 등 helm여러개 실행시키는 툴을 써보기도 했는데

결국엔 python으로 helm차트를 받아서 실행시키는 방법을 쓰게 됐다.

요구사항이 복잡하면 어떻게 해도 공개된 라이브러리만으로 해결이 안된다.

  1. helm 차트는 특정 templates만 편집하는 기능이 없어서 차트를 로컬에 –untar로 받은 후 deployment.yaml만 덮어씌운다던가 하는 방법을 썼다.

  2. helm 설치 전 후로 secret이나 volume을 관리 해 줘야 하는 경우가 있는데 수동으로 하려면 복잡하고 늘 실수를 한다.

회사 서비스 DevOps 관리시

회사에서는 단순 설치가 아니라 직접 개발한 애플리케이션을 배포하는거라서 공개된 helm차트를 쓰지 않는다. 보통 두세단계로 분리해서 실행하게 된다.

  1. 미들웨어 설치 istio, traefik, gateway, kafka, redis 등 k8s 클러스터 또는 서버에 직접 설치할 것들
    helm, ansible, bash 스크립트 등 활용
    자주 안 하는거라 기록만 해 놓고 노가다로 처리하는 경우가 많다.
    회사에 따라… 기록을 안 해서 할 때 마다 잘못되는 경우가 더 많다.

  2. deployment, service 정도만 정의 해 놓고 dev,
    helm차트 한개로 만들거나 kustomization, 등등을 쓴다.

용도별

템플릿 관리

  • https://github.com/helm/helm 24.7k

  • https://github.com/kubernetes-sigs/kustomize 9.9k

  • https://github.com/grafana/tanka 2k
    https://tanka.dev

  • https://github.com/kapicorp/kapitan 1.7k
    https://kapitan.dev

  • https://github.com/GoogleContainerTools/kpt 1.5k
    https://kpt.dev

  • https://github.com/kubecfg/kubecfg 160

  • https://github.com/boltops-tools/kubes 81
    https://kubes.guru

  • https://jsonnet.org - erb, mustache, freemarker처럼 그냥 템플릿엔진에 가까워보임

  • kssonet - 멈춰

런타임 관리 Operator

operator는 패턴이다.
kube api와 통신하는 서버를 한개 올려놓는걸로 이해하는게 쉽다.
kube클러스터에 definition이 올라가면 이 설정에 따라 인프라를 실행시켜주는 것

요즘은 operator를 많이 쓴다는 것 같은데…(진실???)
여러개의 인프라를 동적으로 관리할게 아니라면 helm을 쓰는게 나을 것 같다.
대부분의 상황에서 operator를 왜 써야하는지 잘 모르겠다.
definition.yaml만 apply하면 되서 사용자 입장에서는 조금 더 쉽게 받아들여지는걸까
helm에서 values.yaml만 편집하는거랑 다를게 없는데
helm이 너무 주먹구구식으로 만들어져 있는데 비해 operator의 설정파일이 조금 더 이해하기 쉬워서 인기가 좋은 것 같다.
복잡하게 사용하려면 어렵거나 직접 만들어야 하는건 비슷하다.

공식 도큐먼트 Operator 소개
https://kubernetes.io/ko/docs/concepts/extend-kubernetes/operator/

Operator 도구 선택

도구의 순위보다는 각각 특성이 있어서 선택이 더 어렵다.
선택 기준을 먼저 적어보면

  • 단순 설치는 helm으로 할거니까 operator는 커스텀 기능 개발이 쉬울 것

  • 템플릿이 많아서 웬만한거 가져다가 쓸 수 있을 것

kudo 뭔가 그냥 helm차트 비스무리하게 kafka를 설치 해 버리는데… 오퍼레이터를 관리 해 주는 툴인가?
juju도 좀 그런 느낌이다. lxd컨테이너 기술로 미들웨어 쉽게 설치 해 주는… charm이라는 미리 정의된걸 설치

코딩이 되는 툴은

  • java operator sdk

  • py kops <- 제일 간단해 보임

  • go kubebuilder

  • rust ~

  • dotnet ~

~

  • helm차트와 스크립트 언어로 직접 설치코드 만들기

  • operator는 kops