M1 MacでDocker Desktopとkind(Kubernetes IN Docker)をインストールし、さてクラスターでも作ってみるか!とサンプルコードでkind create cluster
したら、いきなりエラーが出てがっかりしたことはあるでしょうか?
私はあります。
$ kind create cluster --config kind.yaml --name kindcluster
Creating cluster "kindcluster" ...
✓ Ensuring node image (kindest/node:v1.18.2) 🖼
✗ Preparing nodes 📦 📦 📦 📦 📦 📦
ERROR: failed to create cluster: could not find a log line that matches "Reached target .*Multi-User System.*|detected cgroup v1"
書籍のサンプルコードなどは、M1(arm64)前提で書かれることはほぼないですよね、たぶん。
(最近の書籍だと注釈にM1の対処法が書かれているのを見かけたこともありますが)
kind公式サイトには「amd64アーキテクチャ以外のイメージなんて作ってない(そんな需要ない)から自分でビルドしてね」とか書いてあるし、ちょっとググっても解決方法が見つからないし、なんか面倒そうだな、、、
と思っていたら実はサクッとと解決しました。
結論
docker hubにarm64向けのノードイメージがあるので、それを使いましょう。
kind.yaml
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
image: kindest/node-arm64:v1.25.3
- role: control-plane
image: kindest/node-arm64:v1.25.3
- role: control-plane
image: kindest/node-arm64:v1.25.3
- role: worker
image: kindest/node-arm64:v1.25.3
- role: worker
image: kindest/node-arm64:v1.25.3
- role: worker
image: kindest/node-arm64:v1.25.3
$ kind create cluster --config kind.yaml --name kindcluster
Creating cluster "kindcluster" ...
✓ Ensuring node image (kindest/node-arm64:v1.25.3) 🖼
✓ 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
Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
できました!
動作確認
DaemonSetを起動してみます。
sample-ds.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: sample-ds
spec:
selector:
matchLabels:
app: sample-app
template:
metadata:
labels:
app: sample-app
spec:
containers:
- name: nginx-container
image: nginx:1.16
$ kubectl apply -f sample-ds.yaml
daemonset.apps/sample-ds created
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sample-ds-2ldjg 1/1 Running 0 11m
sample-ds-j84hd 1/1 Running 0 11m
sample-ds-z8bpn 1/1 Running 0 11m
各ノードにポッドが起動しました!
動作環境
- MacBook Pro (2021, M1 Pro)
- Docker Desktop for Mac (Apple silicon) 4.13.0 (89412)
- kind v0.16.0 go1.19.1 darwin/arm64
最後に
docker hubでイメージを見つける前に、自分でノードイメージをビルドして解決することもできました。
色々と試行錯誤があったので、その手順も別記事で書こうかと思います。 → 書きました