🍎

【WSL2 Ubuntu】kindをインストールしてクイックスタートしてみた

2023/11/02に公開

はじめに

そろそろローカルの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 のインストール

公式ドキュメントはこちら
https://kind.sigs.k8s.io/

Bing Copilot くんに訊いてみました。ゲットするURLとかは古いと思うので、公式ドキュメントも確認しながらやっていきます。
https://kind.sigs.k8s.io/docs/user/quick-start/#installation

手順

  1. 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
  1. 実行権限の付与:ダウンロードしたバイナリに実行権限を付与します。以下のコマンドを実行します
$ chmod +x ./kind
  1. バイナリの移動:バイナリを/usr/local/binディレクトリに移動します。以下のコマンドを実行します
$ sudo mv ./kind /usr/local/bin/kind

kindのインストールはこれで終わりです。
簡単ですね。

kubectl のインストール

ドキュメント読むと、kind は kubectl は必須じゃないけど、入れておいた方がいいよーとのことなので、kubectlをインストールします。
これも公式ドキュメント通り。
https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/

  • バイナリダウンロード
$ 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

クラスターの作成

https://kind.sigs.k8s.io/docs/user/quick-start/#creating-a-cluster
動作確認も兼ねて、事前に構築されたノードイメージを作ります。

$ 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