はじめに
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環境であるため、下記の方法でインストールを行います(インストール方法は自身の環境に応じて切り替えて実行してください)。
curl -Lo ./kind <https://kind.sigs.k8s.io/dl/v0.23.0/kind-darwin-arm64>
chmod +x ./kind
sudo mv ./kind /some-dir-in-your-PATH/kind
インストールが完了したら、続いて実際にKubernetesクラスターを構築してみましょう。まずはシンプルに1台のノードだけでクラスターを構築したいのでkind create clusterコマンドを実行しましょう。
実行してから少し経つと下記のように表示され、Kubernetesクラスターの構築が完了したことが分かります。
$ kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.30.0) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Not sure what to do next? 😅 Check out <https://kind.sigs.k8s.io/docs/user/quick-start/>
次にkind get clustersコマンドを実行すると、下記のように構築したクラスター情報を確認できます。
$ kind get clusters
kind
構築したクラスターを確認してみましょう。kubectl cluster-infoやkubectl get nodeを実行すると、下記のように構築したクラスター情報を確認することが可能です。
$ kubectl cluster-info
Kubernetes control plane is running at <https://127.0.0.1:55589>
CoreDNS is running at <https://127.0.0.1:55589/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy>
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get node
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 6m5s v1.30.0
これでkindを使ったKubernetesクラスターの構築方法が確認できたので、削除方法も見ておきましょう。クラスターを削除するにはkind delete clusterコマンドを実行します。
$ kind delete cluster
Deleting cluster "kind" ...
実行すると、上記のようにすぐにクラスターを削除できます。このように、kindを使うと簡単にクラスターの構築や削除が行えます。
kindを使って様々な環境を構築してみる
上記の手順では1台構成のクラスターの構築や削除を試しましたが、今度は複数ノード台でクラスターを構成してみましょう。kindで様々な設定のクラスターを構築するには、KubernetesのManifestsファイルのようなフォーマットで設定を記述する必要があります。例えば、下記のファイルをkind-cluster.yamlという名前で保存してください。
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
- role: worker
- role: worker
この設定では、下記の構成でKubernetesクラスターを構築できます。
- control-planeノード: 1台
- workerノード: 2台
それでは、下記のコマンドを実行して上記の設定に沿ったクラスターを構築してみましょう。
kind create cluster --config kind-cluster.yaml --name multi-node-cluster
クラスターが構築された後kubectl get nodeを実行すると、下記のように3台でクラスターが構築されていることが分かります。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
multi-node-cluster-control-plane Ready control-plane 46s v1.30.0
multi-node-cluster-worker Ready <none> 22s v1.30.0
multi-node-cluster-worker2 Ready <none> 22s v1.30.0
今回は--configと--nameという2つのオプションを設定して実行しましたが、それぞれ下記のような内容となります。
- --config: 利用する設定ファイルを指定
- --name: 構築するクラスター名を指定
上記のkubectl get nodeの結果どおり、--nameで指定したクラスター名が構築するノードのプレフィックスとなります。
また--nameでクラスター名を設定しているので、クラスターを削除する際は下記のようにクラスター名を指定する必要があります。
kind delete clusters multi-node-cluster
kind v0.23.0で標準で利用されるKubernetesバージョンはv1.30.0のようですが、これを変更したい場合はどのようにすれば良いでしょうか。実はkindの環境構築に使われるのはkindest/nodeというコンテナイメージで、Docker Hubから利用可能なバージョンを確認できます。
次の設定ファイルを利用すると、v1.30.2のKubernetesを利用することが可能です。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.30.2@sha256:0b334ec376f6fd4adaec67cc99cb880a289b6024d3ef4de48b3e55a2c2686c30
- role: worker
image: kindest/node:v1.30.2@sha256:0b334ec376f6fd4adaec67cc99cb880a289b6024d3ef4de48b3e55a2c2686c30
上記のように、設定ファイルのnodes[].imageに利用したいKubernetesバージョンのイメージを設定することで、目的のKubernetesバージョンを使用したクラスター構築が可能となります。
それでは、下記のコマンドでクラスターを構築してみましょう。
kind create cluster --config kind-cluster.yaml --name v1.30.2-cluster
構築されたクラスターを確認してみると、下記のようにv1.30.2のものが使用されていることが確認できました。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
v1.30.2-cluster-control-plane Ready control-plane 25s v1.30.2
v1.30.2-cluster-worker Ready <none> 5s v1.30.2
このように、kindでは設定ファイルを利用して様々なKubernetesクラスターを構築し、検証などを行うことができます。
おわりに
今回は、kindを利用してローカル環境にKubernetesクラスターを構築する方法を解説しました。なお、今回で紹介した以外にも、下記のような様々なカスタマイズをして、Kubernetesの検証を行うことが可能です。
- 自前でビルドしたkindest/nodeイメージを使用する
- ingressやserviceのtype: LoadBalancerを利用する
- kindがクラスター構築に利用するkubeadmの設定を書き換えて構築する
kindを使用するとKubernetesを使用した様々な検証の多くを1台のマシンで行うことが可能になるので、ぜひ積極的に利用してみてください。
- この記事のキーワード