부제: 개발 환경을 구축하려고 애쓰다.
Tilt란?
Using k8s with Tilt
Using Helm with Tilt
참고
“value 변경, helm chart 변경이 너무 불편합니다.”
일반적으로 쿠버네티스에 배포하는 것은
코드 작성
도커 이미지 빌드
이미지 레지스트리 푸시
쿠버네티스 팟 생성
을 반복하는 것인데 조금 더 편하게 배포할 수는 없을까요?
tilt up # Tilt Control Loop가 개발 환경을 갱신하게 하는 명령어
을 사용하면
docker 빌드 캐싱
sidecar 패턴의 일종인 Synclet으로 레지스트리 푸시를 스킵하고 기존 팟을 재활용하여 갱신
sidecar: 기본 컨테이너의 변경 없이 보조 컨테이너가 기본 컨테이너와의 공동 작업을 수행하는 패턴
등이 가능합니다.
Second Time, Same as the First
Build in Cloud
k8s와 tilt를 함께 사용하려면 kubernetes 클러스터를 본인의 노트북 로컬에서 바로 접근할 수 있어야 합니다.
# 노트북 로컬
cat "${클러스터IP} kubernetes" | sudo tee -a /etc/hosts
cat << EOD > kubeconfig
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: ${CAD}
server: https://kubernetes:6443
name: dev
contexts:
- context:
cluster: dev
user: kubernetes-admin-dev
name: kubernetes-admin-dev@dev
current-context: kubernetes-admin-dev@dev
kind: Config
preferences: {}
users:
- name: kubernetes-admin-dev
user:
client-certificate-data: ${CCD}
client-key-data: ${CKD}
EOD
그리고 tilt를 설치합니다.
brew install tilt
이제 아래와 같이 사용하실 수 있습니다.
kubectl --kubeconfig=./kubeconfig get ns
이제 Tiltfile을 작성해 봅시다. 그런데 Tiltfile이란 무엇인가요?
Summary
To wrap this up, let’s have a quick recap of Tilt’s control flow:
First, execute the Tiltfile in its entirety, and create resource definitions. Some of these are configured manually, and some Tilt uses heuristics to assemble.
Whenever the Tiltfile changes, re-execute it and update the internal resource definitions.
Next, the engine executes the resources, and if any resources contain Kubernetes objects, these end up deployed to your cluster.
Lastly, resources get updated whenever there’s a triggering event. These can be a definition changing, a relevant file changing, or the user manually triggering the resource.
따라서 아래와 같이 Tiltfile을 작성합니다.
cat << EOD > Tiltfile
allow_k8s_contexts('kubernetes-admin-dev@dev')
yaml = helm(
'path/to/chart/dir',
# The release name, equivalent to helm --name
name='release-name',
# The namespace to install in, equivalent to helm --namespace
namespace='my-namespace',
# The values file to substitute into the chart.
values=['./path/to/chart/dir/values-dev.yaml'],
# Values to set from the command-line
set=['service.port=1234', 'ingress.enabled=true']
)
k8s_yaml(yaml)
EOD
아래 명령어로 결과를 확인할 수 있습니다.
tilt up