【WSL2 Ubuntu】kindをインストールしてクイックスタートしてみた
はじめに
そろそろローカルのk8s環境入れてみようかなーと思ったところ、minikube、Docker Desktop、kind があるよ!とBing Copilotくんがおすすめしてくれました。
minikube と kind の違いはなに?と聞いたところ、こんな回答を返してくれました。
MinikubeとKinDは、どちらもローカル環境でKubernetesクラスタを構築するためのツールですが、それぞれに特性と利用シーンがあります。
Minikubeは、シングルノードのKubernetesクラスタをローカルマシン上の仮想マシンまたはDockerコンテナ内に作成します²。これにより、Kubernetesの機能を試したり、開発やテストを行うことができます²。しかし、Minikubeでは1台の仮想マシンがMaster NodeとWorker Nodeの両方の役割を担っており、ノード数を増やすことができません。そのため、複数台あるWorker Nodeの内のある特定のWorker Nodeにコンテナをデプロイするということを試すことはできません。
一方、KinD(Kubernetes in Docker) は、Dockerコンテナ内にKubernetesクラスタを作成するツールです。これにより、複数ノードのKubernetesクラスタをローカルマシン上で動作させることが可能です。また、CI(Continuous Integration)環境でのテストなどにも使用されます。
したがって、Kubernetesの挙動を確認したい場合やCI環境でテストを行いたい場合はKinDが適しています。一方、シンプルな開発やテスト環境を求めている場合はMinikubeが適しています。
へぇー。あってるかわからんですけど、複数ノードを立ち上げて検証したりしてみたかったので、今回はkindを入れてみます。
ついでにクイックスタートも少しやってみます。
環境
Ubuntu 22.04.3 LTS
Docker version 24.0.6
kind のインストール
公式ドキュメントはこちら
Bing Copilot くんに訊いてみました。ゲットするURLとかは古いと思うので、公式ドキュメントも確認しながらやっていきます。
手順
- KinDのダウンロード:まず、KinDのバイナリをダウンロードします。以下のコマンドを実行します
$ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 97 100 97 0 0 343 0 --:--:-- --:--:-- --:--:-- 343
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 6304k 100 6304k 0 0 4459k 0 0:00:01 0:00:01 --:--:-- 4459k
- 実行権限の付与:ダウンロードしたバイナリに実行権限を付与します。以下のコマンドを実行します
$ chmod +x ./kind
-
バイナリの移動:バイナリを
/usr/local/bin
ディレクトリに移動します。以下のコマンドを実行します
$ sudo mv ./kind /usr/local/bin/kind
kindのインストールはこれで終わりです。
簡単ですね。
kubectl のインストール
ドキュメント読むと、kind は kubectl は必須じゃないけど、入れておいた方がいいよーとのことなので、kubectlをインストールします。
これも公式ドキュメント通り。
- バイナリダウンロード
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 138 100 138 0 0 666 0 --:--:-- --:--:-- --:--:-- 669
100 47.5M 100 47.5M 0 0 61.3M 0 --:--:-- --:--:-- --:--:-- 61.3M
- (オプション) バイナリの検証
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 138 100 138 0 0 675 0 --:--:-- --:--:-- --:--:-- 676
100 64 100 64 0 0 242 0 --:--:-- --:--:-- --:--:-- 242
$ echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
kubectl: OK
- インストール
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
$ kubectl version --client
Client Version: v1.28.3
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
クラスターの作成
動作確認も兼ねて、事前に構築されたノードイメージを作ります。
$ kind create cluster
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.27.3) 🖼
✓ 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
Thanks for using kind! 😊
"kind" という名前のクラスターができたようです。
クラスターの一覧は以下のコマンドで確認できます。
$ kind get clusters
kind
もう一つクラスターを作ってみます。
$ kind create cluster --name kind-2
Creating cluster "kind-2" ...
✓ Ensuring node image (kindest/node:v1.27.3) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind-2"
You can now use your cluster with:
kubectl cluster-info --context kind-kind-2
Have a nice day! 👋
$ kind get clusters
kind
kind-2
kind-2 のクラスターが増えました。いい感じです。
特定のクラスターと対話するには、kubectlコンテキストにクラスター名を指定します。
$ kubectl cluster-info --context kind-kind
Kubernetes control plane is running at https://127.0.0.1:41721
CoreDNS is running at https://127.0.0.1:41721/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl cluster-info --context kind-kind-2
Kubernetes control plane is running at https://127.0.0.1:45571
CoreDNS is running at https://127.0.0.1:45571/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
kubectl の構成ファイルは先ほどのコマンドで一緒に作ってくれたので、そのまま使えるようになっています。
クラスターの削除
クラスターの削除は簡単です。
$ kind delete cluster --name kind
Deleting cluster "kind" ...
Deleted nodes: ["kind-control-plane"]
$ kind get clusters
kind-2
本当に簡単ですねぇ。気兼ねなく削除できます。
おわりに
kindは思ってより簡単にインストールできて、とてもいい感じでした。
これから実際に検証などで使っていきたいと思います。
Discussion