0%

kind(Kubernetes in Docker)

kind(Kubernetes in Docker)

kindの仕組み:

Docker コンテナを複数個起動し、そのコンテナを Kubernetes Node として利用することで、複数台構成の Kubernetes クラスタを構築します。

kindのインストール

1
2
3
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.9.0/kind-linux-amd64
chmod +x ./kind
mv ./kind /usr/local/bin/kind

クラスター構築:

Master3 台・Worker3 台の構成を指定する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
image: kindest/node:v1.18.2
- role: control-plane
image: kindest/node:v1.18.2
- role: control-plane
image: kindest/node:v1.18.2
- role: worker
image: kindest/node:v1.18.2
- role: worker
image: kindest/node:v1.18.2
- role: worker
image: kindest/node:v1.18.2

実際にクラスタを構築するには、先ほどの構成設定ファイルを指定してkind create clusterコマンドを実行します。--configは宣言ファイルの指定。 --nameはクラスター名の指定。

名前は lower case alphanumeric charactersの必要がある

1
kind create cluster --config kind.yaml --name kindcluster
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Creating cluster "kindcluster" ...
✓ Ensuring node image (kindest/node:v1.18.2) 🖼
✓ Preparing nodes 📦 📦 📦 📦 📦 📦
✓ Configuring the external load balancer ⚖️️️️️️️️️️️️️
✓ Writing configuration 📜
✓ Starting control-plane 🕹️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ Joining more control-plane nodes 🎮
✓ Joining worker nodes 🚜
Set kubectl context to "kind-kindcluster"
You can now use your cluster with:

kubectl cluster-info --context kind-kindcluster

Thanks for using kind! 😊

  • 複数の Kubernetes クラスタを利用している場合には、kubectl の Context を切り替えて利用する必要があります
1
2
$ kubectl config use-context kind-kindcluster
Switched to context "kind-kindcluster".
  • ローカルマシンで起動している Docker コンテナが Kubernetes Node として認識されています
1
2
3
4
5
6
7
8
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kindcluster-control-plane Ready master 3h58m v1.18.2
kindcluster-control-plane2 Ready master 3h57m v1.18.2
kindcluster-control-plane3 Ready master 3h57m v1.18.2
kindcluster-worker Ready <none> 3h56m v1.18.2
kindcluster-worker2 Ready <none> 3h56m v1.18.2
kindcluster-worker3 Ready <none> 3h56m v1.18.2
  • Docker コンテナを確認してみると、ノードの台数分コンテナが確認できます。

  • Kubernetes Master の冗長構成のために使われている HAProxy も確認できます

1
2
3
4
5
6
7
8
9
10
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
758a3b2dbb76 kindest/haproxy:v20200708-548e36db "/docker-entrypoint.…" 4 hours ago Up 4 hours 127.0.0.1:42909->6443/tcp kindcluster-external-load-balancer
6e0965c46027 kindest/node:v1.18.2 "/usr/local/bin/entr…" 4 hours ago Up 4 hours 127.0.0.1:39285->6443/tcp kindcluster-control-plane3
d60c91ca4926 kindest/node:v1.18.2 "/usr/local/bin/entr…" 4 hours ago Up 4 hours kindcluster-worker2
74df5e7b84cc kindest/node:v1.18.2 "/usr/local/bin/entr…" 4 hours ago Up 4 hours kindcluster-worker
3bcd661140e3 kindest/node:v1.18.2 "/usr/local/bin/entr…" 4 hours ago Up 4 hours 127.0.0.1:46389->6443/tcp kindcluster-control-plane
6396d431ea32 kindest/node:v1.18.2 "/usr/local/bin/entr…" 4 hours ago Up 4 hours kindcluster-worker3
b32b5615b46f kindest/node:v1.18.2 "/usr/local/bin/entr…" 4 hours ago Up 4 hours 127.0.0.1:40325->6443/tcp kindcluster-control-plane2

  • クラスターを取得する
1
kind get clusters 
  • kindclusterを削除する
1
kind delete cluster --name kindcluster

kindの内部:

kind は内部で kubeadmという構築ツールを利用しており、構築時の設定ファイルに対してパッチを当てるkubeadmConfigPatcheskubeadmConfigPatchesJson6902などを利用することで様々なクラスタが構築できます。

ローカルマシンから内部のコンテナへの疎通性を確保するためのextraPortMappingなどの設定もよく利用する。