minikube で kind を動かす

趣旨

  • k8s のマルチノードクラスタを試してみたくなった
  • kind を使ってみる
    • ただし minikube で作った k8s クラスタ(の docker) を再利用する
  • デプロイは完了するけど外からアクセスできない
    • 公開される IP アドレスが 127.0.0.1 に固定されてる
    • 公開されるポート番号がランダム
  • kind の実装眺めてたら設定ファイルで制御できそうなことがわかった
  • できた 👍

kind の設定ファイル

kind creaet cluster に次のような設定ファイルを指定するといい感じになります。

kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha4
networking:
  apiServerPort: 11734
  apiServerAddress: 192.168.0.123
nodes:
- role: control-plane

networking についてはソースコードのこの辺に書いてありました。

kind/types.go at master · kubernetes-sigs/kind · GitHub

クラスタの作成

kind は引数で設定項目の一部を上書きできるようにはなっておらず、完成している設定ファイルを渡す必要があります。

設定ファイルのテンプレートを用意して envsubst するのが無難な感じです。

$ kind --version
kind version v0.5.1

$ lsb_release  -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

$ sudo apt install -y gettext-base

$ which envsubst
/usr/bin/envsubst

$ cat config.tmpl
kind: Cluster
apiVersion: kind.sigs.k8s.io/v1alpha3
networking:
  apiServerPort: $PORT
  apiServerAddress: $ADDRESS
nodes:
- role: control-plane

$ PORT=11374 ADDRESS=$(minikube ip) envsubst < config.tmpl > config.yaml && kind create cluster --config=./config.yaml --wait=10m
Creating cluster "kind" ...
 ✓ Ensuring node image (kindest/node:v1.15.3) �
 ✓ Preparing nodes �
 ✓ Creating kubeadm config �
 ✓ Starting control-plane �️
 ✓ Installing CNI �
 ✓ Installing StorageClass �
 ✓ Waiting ≤ 10m0s for control-plane = Ready ⏳
 • Ready after 24s �
Cluster creation complete. You can now use the cluster with:

export KUBECONFIG="$(kind get kubeconfig-path --name="kind")"
kubectl cluster-info

$ kubectl --kubeconfig="$(kind get kubeconfig-path --name="kind")" cluster-info
Kubernetes master is running at https://192.168.0.123:11374
KubeDNS is running at https://192.168.0.123:11374/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

参考リンク