LoginSignup
0
0

Tiltをセットアップしてサンプルを動かす

Last updated at Posted at 2024-02-20

はじめに

Kubernetes上でデプロイするコンテナイメージの開発にTiltが便利と聞き、とりあえずサンプルを動かしてみました。その記録です。

公式サイトからの言葉を借りると、「Tiltは、コード変更から新しいプロセスへの全てのステップ(ファイルの監視、コンテナイメージの構築、環境の最新化)を自動化する」ツールです。

事前準備

Installを参考にして記載します。macOS, Linux, Windowsで動作可能のようですが、筆者はmacOS, Linuxでセットアップできることを確認しました。

必要なツール

  • Docker
    • Linuxの場合はroot以外のユーザでセットアップが必要
  • kubectl
  • ctlptl
    • Kind、k3d、Minikube等の「ローカルKubernetesクラスター」を作ってくれるツール
    • Tiltで使うコンテナレジストリを作ってくれる機能もあり
    • おそらくはLinuxを使う場合に必須で、macOSやWindowsでは必須ではない
  • tilt
    • コンテナイメージのビルド、プッシュ、K8sリソースのデプロイを全てやってくれるツール

ctlptlのインストール

macOS, Windowsの場合はこの手順は(おそらく)不要です。

ctlptl Installation Appendixを参考にインストールします。

いくつかのインストールのバリエーションが書かれていますが、おそらくはCommand-lineに記載のcurlコマンドでインストールする方法が一番楽です。

※ 筆者はgo installコマンドでGoのパッケージとしてインストールしてしまいました。この場合、環境によってはGoのセットアップが必要となり手数が増えます。

Tiltで使うコンテナレジストリの作成

macOS, Windowsの場合はこの手順は(おそらく)不要です。

ケース1 : ローカルで使えるKubernetesクラスターがない場合

次のコマンドでローカルマシン内にKubernetesクラスターを作成しつつ、Tilt用のコンテナレジストリを作成します。

ctlptl create cluster kind --registry=ctlptl-registry

上記はkindでローカルクラスターを作る例ですが、k3dminikubeも指定可能です。

ケース2 : 既にローカルKubernetesクラスターがある場合

ローカルKubernetesクラスターがあってそれをそのまま使いたい場合は、以下のコマンドでTilt用のコンテナレジストリのみを作成します。

ctlptl create registry ctlptl-registry

ケース1またはケース2のコマンドが成功すれば、Tilt用のコンテナレジストリが以下のように作成されます。

$ docker ps -f name=ctlptl-registry
CONTAINER ID   IMAGE        COMMAND                   CREATED      STATUS      PORTS                       NAMES
f80cd832b671   registry:2   "/entrypoint.sh /etc…"   4 days ago   Up 4 days   127.0.0.1:45841->5000/tcp   ctlptl-registry

Tiltのインストール

InstallにしたがってTiltをインストールします。

curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash

ちなみにmacOSの場合はbrewでもインストールできました。

brew install tilt

サンプルを動作させる

tilt-example-goのデプロイ

GitHubにあるGoのサンプルを動かしてみます。

$ git clone https://github.com/tilt-dev/tilt-example-go.git
$ cd tilt-example-go/0-base

ディレクトリの中身を見てみましょう。

$ tree .
.
├── Tiltfile
├── build.bat
├── deployments
│   ├── Dockerfile
│   └── kubernetes.yaml
├── go.mod
├── go.sum
├── main.go
└── web
    ├── index.html
    └── pets.png

Webアプリケーション、コンテナ、K8sリソースを作成するためのソースがall-in-oneで入っているのが何となくわかります。
これらのソースを使ってどのようにK8s上にリソースをデプロイするかは、Tiltfileに以下のように書かれています。

Tiltfile
# -*- mode: Python -*-

docker_build('example-go-image', '.', dockerfile='deployments/Dockerfile')
k8s_yaml('deployments/kubernetes.yaml')
k8s_resource('example-go', port_forwards=8000)

諸々確認できたので、tilt upコマンドを実行してみましょう。

$ tilt up
Tilt started on http://localhost:10350/
v0.33.11, built 2024-02-15

(space) to open the browser
(s) to stream logs (--stream=true)
(t) to open legacy terminal mode (--legacy=true)
(ctrl-c) to exit

コマンドを実行後、Webブラウザ上で http://localhost:10350/ にアクセスすると、以下のようにTiltのWebUIを見ることができます。

screenshot 118.png

上のリストで1行目の(Tiltfile)や2行目のexample-go等をクリックすると実行ログが出てきて、Tiltfileの内容をもとに以下を一気通貫で実行していることがわかります。

  • Goアプリケーションのコンテナイメージをビルド
  • ビルドしたイメージをコンテナレジストリにプッシュ(※1)
  • K8sのマニフェストにしたがって、ローカルK8sにリソースがデプロイされる(※2)

※1 Linuxの場合、事前に作成したctlptl-registryのコンテナレジストリにpushされます。macOSのDocker Desktop for Macだと、既にイメージをbuildした時点でローカルK8s環境からコンテナイメージをpullできる状態になっているようです。

※2 以下のように、ローカルK8s環境にGoアプリケーションのリソースが出来ているのを確認できます。

$ kubectl get deploy -n default
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
example-go       1/1     1            1           11m
$ kubectl get pod -n default
NAME                              READY   STATUS    RESTARTS   AGE
example-go-649479f666-7kwr8       1/1     Running   0          11m

example-goのWebアプリケーションには http://localhost:8000/ でアクセスでき、以下のような画像と文字が表示されます。

ソースを編集してみる

ここで、web/index.htmlに記載されたHello cats!というテキストを、Hello CATs!に変更してみましょう。
Tiltが変更を検知し、変更を反映するために必要な作業(コンテナビルド、プッシュ、K8sへのデプロイ)を自動で実行してくれます。TiltのWebUIで見ると、下のようにexample-goのリソースがUpdatingの状態になることを確認できます。

screenshot 121のコピー.png

Update完了後に再び http://localhost:8000/ にアクセスすると、確かに文字列の変更が反映されています。素晴らしい!

この辺の動きは、以下の動画の2:50~3:40あたりを見ていただくとより理解できると思います。

おわりに

これまではアプリの変更内容をコンテナやK8sで確認するのに、手動でコンテナのビルドやプッシュ等の作業を行う必要がありましたが、それを自動化してくれるのがTiltであることを理解できたかと思います。
筆者はまだサンプルでしか試せていないので、これから自分で作っているコンテナやK8s環境にも適用していこうと思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0