「kind」でローカル環境にKubernetesクラスターを構築する

2024年8月28日(水)
Daiki Hayakawa
第6回の今回は、ローカル環境で柔軟なKubernetesクラスターを構築できる「kind」について紹介します。

はじめに

3-shakeのSreake事業部に所属する早川(@bells17)です。第6回目の今回は、ローカル環境で柔軟なKubernetesクラスターを構築できる「kind」について紹介します。

普段からKubernetesを使用したインフラ開発を行っていたり、Kubernetes Operatorの開発を行っている方であれば使い慣れたツールかとは思いますが、それ以外の方は意外とkindを使ったことが無い方も多いように感じているため取り上げようと思います。

kindとローカルKubernetes環境

皆さんはローカルでKubernetes環境を構築する際はどのツールを利用するでしょうか。Docker DesktopRancher DesktopOrbStackに付属するKubernetseクラスターを利用している人が一番多そうな気がします。他にもminikubek3sを利用してる人もいるかもしれません。

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-infokubectl 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の検証を行うことが可能です。

kindを使用するとKubernetesを使用した様々な検証の多くを1台のマシンで行うことが可能になるので、ぜひ積極的に利用してみてください。

株式会社スリーシェイク Sreake事業部
Webサービスの開発やクラウドインフラの構築・運用、マネージドKubernetesサービスの開発を経てスリーシェイクにJoin。顧客システムへのKubernetes導入支援を中心に、インフラ構築・設計の支援を行っています。著書に「Kubeletから読み解くKubernetesのコンテナ管理の裏側」「Kube API Server ~Kubernetes API Serverの内部実装を見てみよう~」など。
---
スリーシェイクは、ITインフラ領域の技術力に強みをもつテクノロジーカンパニーです。SREコンサルティング事業「Sreake」では、AWS/Google Cloud/Kubernetesに精通したプロフェッショナルが技術戦略から設計・開発・運用を一貫してサポートしています。また、ノーコード型ETLツール「Reckoner」、フリーランスエンジニア特化型人材紹介サービス「Relance」、セキュリティサービス「Securify」を提供しています。
会社HP: https://3-shake.com/

連載バックナンバー

仮想化/コンテナ技術解説
第9回

「K8sGPT」の未来と生成AIを用いたKubernetes運用の最前線

2024/11/14
第9回の今回は、Kubernetesのトラブルシュートを生成AIで補助する「K8sGPT」について紹介します。
仮想化/コンテナ技術解説
第8回

「Kyverno Chainsaw」で宣言的なE2Eテストを実施する

2024/10/29
第8回の今回は、Kubernetes Operatorのエンドツーエンド(E2E)テストツールである「Kyverno Chainsaw」について紹介します。
仮想化/コンテナ技術解説
第7回

「kwok」でKubernetesクラスターをシュミレーションする

2024/9/19
第7回の今回は、大規模なKubernetesクラスターの検証を容易にする「kwok」について紹介します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています