kindというのは,Kubernetesクラスタを簡単に作れるツール。kindは、Kubernetes IN Dockerの略。つまり、KubernetesクラスタがDockerコンテナ上で動作するということになる。
ローカル環境でKubernetesを利用できるツールとしてはminikubeやmicrok8sと同様のもの。但し,kindにはマルチノードクラスタを作れるという他のツールには無い大きな特長がある。
また、kindはKubernetesの公式ツールでもある。つまり、Kubernetesの挙動を確認したい場合やCI(Continuous Integration)環境で新しいビルドとリリースプロセスをテストしたいという場合にはkindが適している。
multipassにkindをインストールする。但し、このインストールの前にkubectlのインストールをしておく必要がある。
ubuntu@DEV:/home$ sudo curl -Lo ./kind https://kind.sigs.k8s.io/dl/latest/kind-linux-amd64
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 86 100 86 0 0 117 0 --:--:-- --:--:-- --:--:-- 120
100 9697k 100 9697k 0 0 3242k 0 0:00:02 0:00:02 --:--:-- 7121k
ubuntu@DEV:/home$ chmod +x ./kind
ubuntu@DEV:sudo mv ./kind /usr/local/bin/kind
ubuntu@DEV:/home$ kind --version
kind version 0.26.0-alpha+74acdf744a3566
一行目のコマンドで、kindのバイナリをダウンロードしている。次に、ダウンロードしたバイナリに実行権限を付与。そして、ダウンロードしたバイナリを /usr/local/bin/kind ディレクトリに移動。
これで、問題なく、kindがインストールされている。
続いて、いよいよ、クラスターを作成してみる。クラスターを構成するマシン(ノード)のベースとなるイメージは、kindest/node:v1.29.、つまり、Docker Hubのkindest/nodeで公開されているKubernetes バージョン 1.29.0と指定。プロジェクトや本番環境が「Kubernetes v1.29」で動いている場合、自分のPCも全く同じバージョンに揃えないと、動くはずのプログラムがエラーを起こす原因になるために指定。
なお、kind create cluster コマンドをそのまま実行した場合、自動的に kind-kind という名前になる。kind でクラスターを作ると、接続先の名前(コンテキスト名)は自動的に kind-[クラスター名] という法則で命名される。
ubuntu@DEV:kind create cluster --image=kindest/node:v1.29.0
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.29.0)
✓ Preparing nodes
✓ Writing configuration
✓ Starting control-plane
✓ Installing CNI
✓ Installing StorageClass
Set kubectl context to "kind-kind"
クラスターが作成されているかを確認する。
ubuntu@DEV:~$ sudo kubectl cluster-info --context kind-kind
Kubernetes control plane is running at https://127.0.0.1:46537
CoreDNS is running at https://127.0.0.1:46537/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
コントロールプレーンノード(control-plane)はクラスターの管理と制御を担当する特別なノード。APIサーバー、コントローラーマネージャー、スケジューラー等のクラスターを管理するためのコアコンポーネントである。これに対して、アプリケーションコンテナが配置され、実行されるノードはワーカーノードと呼ばれ、このワーカーノードにクラスター内のアプリケーションがデプロイされる。kindではノードをDockerコンテナとして起動される。Dockerコンテナとしてのノードが起動される。その内部でcontainerdが初期化が行われる。そして、KubernetesのAPIサーバーからの要求に応じてPodの実行や管理を行う。コンテナ間でのネットワーク機能はCNI[Container Network Interface]が担う。
また、CoreDNSはKubernetesクラスターのDNSとして機能するDNSサーバーである。
コンテキスト[context]というのは、kubectlがどのKubernetesクラスタと通信するかを示すもの。
kindを用いると、新しいコンテキストが自動設定される。
127.0.0.1はネットワークにおいて自分自身のコンピューターに割り当てられたIPアドレス。すなわち、ループバックアドレスの一つ。127.0.0.1を表すホスト名はlocalhostとなる。
なお、IPv4では上記の通り、127.0.0.1が最も一般的に使用されるループバックアドレスとなるが、127.0.0.0から127.255.255.255の全範囲がループバック用として予約されている。また、IPv6では::1[0:0:0:0:0:0:0:1]が使用される。
ローカルKubernetes構築ツールとしては、kind以外にminikubeが定番とされている。
| 項目 | kind(Kubernetes in Docker) | minikube |
|---|---|---|
| 仕組み | Dockerコンテナの中にKubernetesを作る | 仮想マシン(VM)やDockerの中にKubernetesを作る |
| 最大の特徴 | とにかく爆速で軽量。複数マシンの構成(マルチノード)が簡単に作れる | 機能が非常に豊富。アドオン(プラグイン)でさまざまな機能をON/OFFできる |
| 起動スピード | 圧倒的に速い(数秒〜数十秒) | やや遅い(VMの起動を待つため) |
| PCへの負荷 | 軽い | 重い(特に仮想マシンを使う場合) |
| 主な用途 | CI/CD(自動テスト)での使い捨て環境、軽量な開発 | 本番環境に近い本格的な機能テスト、学習用 |
kind や minikube 以外にも、用途に合わせていくつかのツールが存在する。
Mathematics is the language with which God has written the universe.