kind (kubernetes in docker)
kindは、Dockerコンテナをノードとしたkubernetesクラスタを構築できるツールです。
本記事では、通常どおりDockerコンテナを利用して、kubernetesクラスタを構築するパターンを試した後、Dockerコンテナの代わりに、VMware Fusionのvctlコンテナを利用するパターンを試します。
Dockerコンテナのパターンについてはこちら、vctlコンテナのパターンについてはこちらの記事を参考にさせていただきました。
環境
- macOS Catalina 10.15.7
- zsh v5.7.1
- go v1.15.6
- kind v0.5.1
- VMware Fusion v12.1.0
Dockerコンテナを使うパターン
-
kindを使うには、goのv1.14以上が必要なので、まず、goをインストールします。
$ brew install go または $ brew upgrade go
-
goのPATHを通すため、以下を~/.zshrcに追記しておきます。
export PATH=$PATH:/usr/local/go/bin export PATH=$PATH:$(go env GOPATH)/bin
-
kindをインストールします。
$ GO111MODULE="on" go get sigs.k8s.io/kind@v0.5.1 # インストールの確認 $ kind version v0.5.1
-
シングルノードクラスタを構築してみます。以下のコマンドを実行するだけです。
$ kind create cluster
-
kubectlコマンドを使うには環境変数の設定が必要です。
※デフォルトでkindというクラスタ名になるため、--nameオプションにはkindを指定します。export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
-
クラスタを削除するには以下のコマンドを実行します。
$ kind delete cluster --name kind $ unset KUBECONFIG
-
マルチノードクラスタの構築については、こちらの記事をご参照、ということで割愛します。同様の手順で構築することができました。
vctlコンテナを使うパターン
-
前提条件
構築するクラスタのノード数によって必要な空きメモリが変わります。
1ノードで2GB、2ノードで4GBの空きメモリが必要になる模様。
事前にMacの空きメモリを調べておきましょう。 -
以下のコマンドで、vctlコンテナランタイムを起動します。
$ vctl system start Downloading 3 files... Downloading [kubectl 93.95% kind-darwin-amd64 13.11% crx.vmdk 4.31%] Finished kubectl 100.00% Downloading [kind-darwin-amd64 95.58% crx.vmdk 45.76%] Finished kind-darwin-amd64 100.00% Downloading [crx.vmdk 97.06%] Finished crx.vmdk 100.00% 3 files successfully downloaded. Preparing storage... Container storage has been prepared successfully under /Users/****/.vctl/storage Launching container runtime... Container runtime has been started.
-
以下のコマンドで、vctlベースのkindを利用できるようにします。
$ kind version
を実行すると、先ほどインストールしたkindとは別のバージョンになっているため、vctlベースのものに切り替わったことが分かります。$ vctl kind vctl-based KIND is ready now. KIND will run local Kubernetes clusters by using vctl containers as "nodes" * All Docker commands has been aliased to vctl in the current terminal. Docker commands performed in current window would be executed through vctl. If you need to use regular Docker commands, please use a separate terminal window. # インストールの確認 $ kind version kind v0.9.0 go1.15.2 darwin/amd64
-
クラスタの構築
Dockerコンテナの場合と同様に、以下のコマンドでクラスタを構築します。
以下のように何も引数に指定しない場合は、シングルノードクラスタとなります。$ kind create cluster
構築に失敗する場合は、メモリ不足の可能性があるため、空きメモリを確認してください。
※ノードに割り当てるメモリサイズは、以下のコマンドで変更することができますが、2GBより小さくすることはできません。
$ vctl system config --k8s-mem 2g
以上で、kindを使ったkubernetesクラスタの構築ができました。ローカル環境に、軽量・高速に(シングル・マルチノードの)クラスタを構築できるため、実環境に寄せたテスト環境などとして利用すると便利かと思いました。
ただ、vctlベースのkindでマルチノードのクラスタを構築する場合には、大容量のメモリ(3ノードでも最低6GBの空きメモリが要求されます)とそれなりのマシンスペックが必要になりそうですので、ご注意ください。
追記(2022/5/5)
本記事の執筆当時、筆者のマシンスペック(特にメモリ容量)では、vctlコンテナを用いたマルチノードクラスタの構築は試すことができませんでしたが、当時より高スペックなマシン環境が手に入ったため、マルチノードクラスタの構築も試しました。
環境
- OS: macOS Monterey 12.3.1
- CPU: Intel Core i5-10600
- メモリ: 40GB
構築手順
vctlベースのkindを利用するまでの手順は上記(vctlコンテナを使うパターンの3まで)と同様です。
-
設定ファイルの作成
以下の内容の設定ファイル(multi_k8s.yaml)を作成します。kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane - role: worker - role: worker - role: worker
-
クラスタの構築
以下のコマンドでクラスタを構築します。引数に、作成した設定ファイルを指定します。
※--name引数でクラスタ名を設定できますが、設定しなければデフォルトでkind
という名前になります。$ kind create cluster --config multi_k8s.yaml Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.19.1) 🖼 ✓ Preparing nodes 📦 📦 📦 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜 Set kubectl context to "kind-kind" You can now use your cluster with: kubectl cluster-info --context kind-kind Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
-
確認
無事、マルチノードクラスタが構築できました。$ kubectl get nodes NAME STATUS ROLES AGE VERSION kind-control-plane Ready master 5m48s v1.19.1 kind-worker Ready <none> 5m11s v1.19.1 kind-worker2 Ready <none> 5m11s v1.19.1 kind-worker3 Ready <none> 5m11s v1.19.1 $ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-f9fd979d6-6qhbm 1/1 Running 0 5m45s kube-system coredns-f9fd979d6-kbt67 1/1 Running 0 5m45s kube-system etcd-kind-control-plane 1/1 Running 0 5m48s kube-system kindnet-6tqgx 1/1 Running 0 5m27s kube-system kindnet-7njt7 1/1 Running 0 5m27s kube-system kindnet-h947r 1/1 Running 0 5m45s kube-system kindnet-s6m5c 1/1 Running 0 5m27s kube-system kube-apiserver-kind-control-plane 1/1 Running 0 5m48s kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 5m48s kube-system kube-proxy-bjh9m 1/1 Running 0 5m27s kube-system kube-proxy-dv96k 1/1 Running 0 5m45s kube-system kube-proxy-np5dc 1/1 Running 0 5m27s kube-system kube-proxy-zx748 1/1 Running 0 5m27s kube-system kube-scheduler-kind-control-plane 1/1 Running 0 5m48s local-path-storage local-path-provisioner-78776bfc44-nr5j9 1/1 Running 0 5m45s
-
クラスタの削除
以下のコマンドで後片付けできます。
※クラスタ構築時に--name引数で名前を付けている場合は、削除時にも同様に--name引数で名前を指定します。$ kind delete cluster Deleting cluster "kind" ...
参考にした記事