はじめに
3-shakeのSreake事業部に所属する早川(@bells17)です。第6回目の今回は、ローカル環境で柔軟なKubernetesクラスターを構築できる「kind」について紹介します。
普段からKubernetesを使用したインフラ開発を行っていたり、Kubernetes Operatorの開発を行っている方であれば使い慣れたツールかとは思いますが、それ以外の方は意外とkindを使ったことが無い方も多いように感じているため取り上げようと思います。
kindとローカルKubernetes環境
皆さんはローカルでKubernetes環境を構築する際はどのツールを利用するでしょうか。Docker DesktopやRancher Desktop、OrbStackに付属するKubernetseクラスターを利用している人が一番多そうな気がします。他にもminikubeやk3sを利用してる人もいるかもしれません。
kindもこういったローカル環境でのKubernetesクラスターの構築を行うツールの1つです。kindの一番の特徴はKubernetes IN Docker(kind)という名前の通り、Dockerを使用したコンテナ内でKubernetesクラスターを構築するという点になります。この特徴により、下記のようなことが簡単に実現可能となっています。
- スピーディーなクラスターの構築や削除
- マルチノードを使用したクラスター構築
- 複数のKubernetesクラスターの構築や切り替え
これが、ローカルKubernetes環境においてkindの利用をオススメするポイントです。
kindの基本的な使い方
それでは、実際にkindでKubernetesクラスターを構築してみましょう。ここではkind v0.23.0を利用した手順を紹介します。まずは、こちらのページの方法に従ってkindをインストールしてください。筆者の環境はARMのMac環境であるため、下記の方法でインストールを行います(インストール方法は自身の環境に応じて切り替えて実行してください)。
3 | sudo mv ./kind /some-dir-in-your-PATH/kind |
インストールが完了したら、続いて実際にKubernetesクラスターを構築してみましょう。まずはシンプルに1台のノードだけでクラスターを構築したいのでkind create cluster
コマンドを実行しましょう。
実行してから少し経つと下記のように表示され、Kubernetesクラスターの構築が完了したことが分かります。
02 | Creating cluster "kind" ... |
03 | ✓ Ensuring node image (kindest/node:v1.30.0) 🖼 |
05 | ✓ Writing configuration 📜 |
06 | ✓ Starting control-plane 🕹 |
08 | ✓ Installing StorageClass 💾 |
09 | Set kubectl context to "kind-kind" |
10 | You can now use your cluster with: |
12 | kubectl cluster-info --context kind-kind |
次にkind get clusters
コマンドを実行すると、下記のように構築したクラスター情報を確認できます。
構築したクラスターを確認してみましょう。kubectl cluster-info
やkubectl get node
を実行すると、下記のように構築したクラスター情報を確認することが可能です。
5 | To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'. |
8 | NAME STATUS ROLES AGE VERSION |
9 | kind-control-plane Ready control-plane 6m5s v1.30.0 |
これでkindを使ったKubernetesクラスターの構築方法が確認できたので、削除方法も見ておきましょう。クラスターを削除するにはkind delete cluster
コマンドを実行します。
2 | Deleting cluster "kind" ... |
実行すると、上記のようにすぐにクラスターを削除できます。このように、kindを使うと簡単にクラスターの構築や削除が行えます。
kindを使って様々な環境を構築してみる
上記の手順では1台構成のクラスターの構築や削除を試しましたが、今度は複数ノード台でクラスターを構成してみましょう。kindで様々な設定のクラスターを構築するには、KubernetesのManifestsファイルのようなフォーマットで設定を記述する必要があります。
例えば、下記のファイルをkind-cluster.yaml
という名前で保存してください。
1 | apiVersion: kind.x-k8s.io/v1alpha4 |
この設定では、下記の構成でKubernetesクラスターを構築できます。
- control-planeノード: 1台
- workerノード: 2台
それでは、下記のコマンドを実行して上記の設定に沿ったクラスターを構築してみましょう。
1 | kind create cluster --config kind-cluster.yaml --name multi-node-cluster |
クラスターが構築された後kubectl get node
を実行すると、下記のように3台でクラスターが構築されていることが分かります。
2 | NAME STATUS ROLES AGE VERSION |
3 | multi-node-cluster-control-plane Ready control-plane 46s v1.30.0 |
4 | multi-node-cluster-worker Ready <none> 22s v1.30.0 |
5 | multi-node-cluster-worker2 Ready <none> 22s v1.30.0 |
今回は--config
と--name
という2つのオプションを設定して実行しましたが、それぞれ下記のような内容となります。
- --config: 利用する設定ファイルを指定
- --name: 構築するクラスター名を指定
上記のkubectl get node
の結果どおり、--name
で指定したクラスター名が構築するノードのプレフィックスとなります。
また--name
でクラスター名を設定しているので、クラスターを削除する際は下記のようにクラスター名を指定する必要があります。
1 | kind delete clusters multi-node-cluster |
kind v0.23.0で標準で利用されるKubernetesバージョンはv1.30.0のようですが、これを変更したい場合はどのようにすれば良いでしょうか。実はkindの環境構築に使われるのはkindest/nodeというコンテナイメージで、Docker Hubから利用可能なバージョンを確認できます。
次の設定ファイルを利用すると、v1.30.2のKubernetesを利用することが可能です。
2 | apiVersion: kind.x-k8s.io/v1alpha4 |
5 | image: kindest/node:v1.30.2@sha256:0b334ec376f6fd4adaec67cc99cb880a289b6024d3ef4de48b3e55a2c2686c30 |
7 | image: kindest/node:v1.30.2@sha256:0b334ec376f6fd4adaec67cc99cb880a289b6024d3ef4de48b3e55a2c2686c30 |
上記のように、設定ファイルのnodes[].image
に利用したいKubernetesバージョンのイメージを設定することで、目的のKubernetesバージョンを使用したクラスター構築が可能となります。
それでは、下記のコマンドでクラスターを構築してみましょう。
1 | kind create cluster --config kind-cluster.yaml --name v1.30.2-cluster |
構築されたクラスターを確認してみると、下記のようにv1.30.2のものが使用されていることが確認できました。
2 | NAME STATUS ROLES AGE VERSION |
3 | v1.30.2-cluster-control-plane Ready control-plane 25s v1.30.2 |
4 | v1.30.2-cluster-worker Ready <none> 5s v1.30.2 |
このように、kindでは設定ファイルを利用して様々なKubernetesクラスターを構築し、検証などを行うことができます。
おわりに
今回は、kindを利用してローカル環境にKubernetesクラスターを構築する方法を解説しました。なお、今回で紹介した以外にも、下記のような様々なカスタマイズをして、Kubernetesの検証を行うことが可能です。
kindを使用するとKubernetesを使用した様々な検証の多くを1台のマシンで行うことが可能になるので、ぜひ積極的に利用してみてください。