概要
- kind を一言でいうと、コンテナを k8s ノードと見なしてクラスタを実行させる箱庭的な便利ツール
- kind を試すのに docker 使うのは普通ですが、 ここはやっぱり podman machine でやってみたい
- 仕事で使う macOS で kind が動くところまで検証した
検証した環境
macOS のバージョン
$ sw_vers
ProductName: macOS
ProductVersion: 12.3.1
BuildVersion: 21E258
podman の導入
導入方法は以前書いた以下記事を参照ください
podman machine による QEMU インスタンスをセットアップする
- pod を起動すると、リソースを使うので QEMU には大きめにリソースを割り当てておく
-
podman machine init
コマンドを使用して初期セットアップを行う - podman machin で実行する Fedora CoreOS の仮想マシンイメージ(qcow2)がダウンロードされる
$ podman machine init --cpus 2 --disk-size 20 --memory 8192
作った QEMU インスタンスを起動する
$ podman machine start
正常に起動していることが確認できる
$ podman machine ls
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZE
podman-machine-default* qemu 23 minutes ago Currently running 2 8.59GB 21.47GB
podman machine との接続設定
- podman machine への接続エントリが追加されていることが確認できる
- これらは起動時に自動で追加され、イメージを削除すると自動でエントリも削除される
$ podman system connection list
Name URI Identity Default
podman-machine-default ssh://core@localhost:57656/run/user/1849830061/podman/podman.sock /Users/tigerroll/.ssh/podman-machine-default true
podman-machine-default-root ssh://root@localhost:57656/run/podman/podman.sock /Users/tigerroll/.ssh/podman-machine-default false
docker 互換のツールと接続するためにDOCKER_HOST に socket のパスを設定する
もちろん、この設定を .bash_profile
に追加しても良いだろう
$ export DOCKER_HOST="unix:///Users/${LOGNAME}/.local/share/containers/podman/machine/podman-machine-default/podman.sock"
podman machine のバージョン情報を確認
$ podman version
Client: Podman Engine
Version: 4.0.3
API Version: 4.0.3
Go Version: go1.18
Built: Sat Apr 2 00:28:59 2022
OS/Arch: darwin/amd64
Server: Podman Engine
Version: 4.0.3
API Version: 4.0.3
Go Version: go1.18
Built: Sat Apr 2 03:21:54 2022
OS/Arch: linux/amd64
kind コマンドのインストール
brew でインストールする
$ brew install kind
kind のバージョン確認
$ kind --version
kind version 0.12.0
podman で kind を起動する
kind デフォルトの provider は docker なので、KIND_EXPERIMENTAL_PROVIDER
にて podman を指定する
この設定を .bash_profile
に追加しても良いだろう
$ export KIND_EXPERIMENTAL_PROVIDER=podman
kind の設定ファイルを用意する(4 node 起動する)
$ cat <<'EOF'> kind-1m3w.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
networking:
disableDefaultCNI: false
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
EOF
先程用意したファイルをベースにクラスタを起動する
$ kind create cluster --config kind-1m3w.yaml
using podman due to KIND_EXPERIMENTAL_PROVIDER
enabling experimental podman provider
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.23.4) 🖼
✓ Preparing nodes 📦 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing StorageClass 💾
✓ Joining worker nodes 🚜
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
podman ps
で node の動作を確認すると正常に node が起動されていることが確認できる
$ podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9e3a46da0fb3 docker.io/kindest/node@sha256:0e34f0d0fd448aa2f2819cfd74e99fe5793a6e4938b328f657c8e3f81ee0dfb9 About an hour ago Up About an hour ago kind-worker3
a418ff9339d9 docker.io/kindest/node@sha256:0e34f0d0fd448aa2f2819cfd74e99fe5793a6e4938b328f657c8e3f81ee0dfb9 About an hour ago Up About an hour ago kind-worker
9f188aa52f62 docker.io/kindest/node@sha256:0e34f0d0fd448aa2f2819cfd74e99fe5793a6e4938b328f657c8e3f81ee0dfb9 About an hour ago Up About an hour ago 127.0.0.1:55153->6443/tcp kind-control-plane
e0bbda18d4d5 docker.io/kindest/node@sha256:0e34f0d0fd448aa2f2819cfd74e99fe5793a6e4938b328f657c8e3f81ee0dfb9 About an hour ago Up About an hour ago kind-worker2
以上で cluster の構築は完了
kubectl で cluster を操作する
cluster-info で動作できてることを確認
$ kubectl cluster-info --context kind-kind
Kubernetes control plane is running at https://127.0.0.1:55153
CoreDNS is running at https://127.0.0.1:55153/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
get pods -A で全ての pods の状態を取得する
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-64897985d-gfrdv 0/1 Pending 0 1m
kube-system coredns-64897985d-l7nrf 0/1 Pending 0 1m
kube-system etcd-kind-control-plane 1/1 Running 0 1m
kube-system kube-apiserver-kind-control-plane 1/1 Running 0 1m
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 1m
kube-system kube-proxy-k8hlj 1/1 Running 0 1m
kube-system kube-proxy-qgl4x 1/1 Running 0 1m
kube-system kube-proxy-qp8cj 1/1 Running 0 1m
kube-system kube-proxy-rth6c 1/1 Running 0 1m
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 1m
local-path-storage local-path-provisioner-5ddd94ff66-rq4v7 0/1 Pending 0 1m
kind が動いている
podman machie 環境で kind を動かした感想
- podman machine でも kind ができるのはありがたい 感謝!!
- 脱 Docker を求めてる人には、とても相性が良いと思う
- podman で kind を動かすのは想像よりも簡単だった