Tilt の概要と役割
- 公開日
- カテゴリ:Tilt
- タグ:Kubernetes,Tilt,学習メモ

ローカルの Kubernetes(kind など)で自作のアプリを直しながら動かすと、ソースを変えるたびに image を作り直してクラスタに入れ直すことになる。この繰り返しを自動でやってくれるツールに Tilt がある。
contents
Tilt とは
Tilt(ティルト)は、Kubernetes で動かすアプリをローカルの開発環境で開発するためのオープンソースのツール。開発元は Tilt Dev で、ライセンスは Apache-2.0。
Kubernetes for Prod, Tilt for Dev
(本番は Kubernetes、開発は Tilt)Tilt automates all the steps from a code change to a new process: watching files, building container images, and bringing your environment up-to-date. Think "docker build && kubectl apply" or "docker-compose up".
(Tilt は、コードの変更から新しいプロセスが動くまでのすべての手順を自動化する。ファイルの監視、コンテナ image の作成、環境を最新の状態にすること。"docker build && kubectl apply" や "docker-compose up" を思い浮かべてほしい)
つまり、docker build と kubectl apply を人が繰り返す代わりに、ファイルの変更を見て Tilt が繰り返す。tilt up の 1 コマンドで、チームで決めた開発環境をそろえて動かせる、というのが公式が掲げる使い方。
Tilt の機能
Tilt でできることは 5 つ。
- 自動ビルドとデプロイ: ソースの変更を検知して、image の作成・kind への読み込み・YAML の反映・port-forward をやり直す
- Live Update: image を作り直さずに、変更したファイルを動いているコンテナへ直接反映する
- 管理画面: すべてのサービスの状態とログを、ブラウザの 1 画面で見る
- 複数サービスの一括管理: 複数の image と YAML(Kustomize や Helm の出力も可)を 1 つの
Tiltfileにまとめ、依存の順に起動する - ローカルコマンドの実行: テストやコード生成など、クラスタの外で実行するコマンドも同じ
Tiltfileで管理する
Tilt の仕組み
tilt up を実行すると、Tilt は Tiltfile を読み、Docker に image の作成を指示し、できた image を kind の Node に入れ、クラスタの kube-apiserver に YAML の反映を指示する。接続先のクラスタは kubectl と同じ(kubeconfig の current-context)。
図は、tilt up のあとにソースを保存してから Pod が入れ替わるまでの流れ。Tilt はクラスタの中で動くものではなく、kubectl と同じように Docker と kube-apiserver に指示を送る。
本番のクラスタへの実行は止まる
Tilt は kubectl と同じ接続先(kubeconfig の current-context)に反映する。開発者の PC の kubeconfig には、ローカルの kind のほかに本番の EKS などの context も登録されていることがあり、current-context が本番を向いたまま tilt up を実行すると、本番に kubectl apply することになる。
これを防ぐため、Tilt は既定で、kind・Minikube・Docker Desktop・k3d などローカルのクラスタの context 名にだけ反映し、それ以外の context では反映せずにエラーで止まるようになっている。
まとめ
- Tilt は、Kubernetes で動かすアプリをローカルの開発環境で開発するためのツール。ソースを保存するたびに、image の作成からクラスタへの反映までを自動でやり直す
- 機能は、自動ビルドとデプロイ、Live Update、管理画面、複数サービスの一括管理、ローカルコマンドの実行の 5 つ
- Tilt はローカルの開発環境で動き、Docker と、
kubectlと同じ接続先のクラスタに指示を送る - 接続先が本番のクラスタなど、ローカルのクラスタではない context のときは、既定では反映せずに止まる
参考 URL
- [official] Tilt | Kubernetes for Prod, Tilt for Dev
- [official] tilt-dev/tilt: README
- [official] Tilt's Control Loop | Tilt
- [official] Tiltfile Concepts | Tilt
- [official] Live Update Reference | Tilt
- [official] Tilt UI | Tilt
- [official] Setting up Local Commands, Servers, and Tests | Tilt
- [official] Tiltfile API Reference: allow_k8s_contexts | Tilt

