MacBook Air (M1, 2020) にk8s勉強用の環境を整える
Udemyの「Kubernetes for the Absolute Beginners - Hands-on」を進めていて、
minikubeを使ったdemoを自分でもやってみようと思ったら想像以上に躓いたので自分用メモ。雑。
実行環境
2022/03/19 現在
- MacBook Air (M1, 2020)
- OS: macOS Monterey v12.2.1
※Udemyの講座ではLinux OS上で動かしている
Virtual BoxがM1 Macで使えない
$ brew install --cask virtualbox ==> Caveats virtualbox requires a kernel extension to work. If the installation fails, retry after you enable it in: System Preferences → Security & Privacy → General For more information, refer to vendor documentation or this Apple Technical Note: https://developer.apple.com/library/content/technotes/tn2459/_index.html ==> Downloading https://download.virtualbox.org/virtualbox/6.1.32/VirtualBox-6.1.32-149290-OSX.dmg ######################################################################## 100.0% Error: Cask virtualbox depends on hardware architecture being one of [{:type=>:intel, :bits=>64}], but you are running {:type=>:arm, :bits=>64}.
minikubeのdriverとしてvirtualboxを使う方法がdemoで使われているが、installできない。
→ Driverにdocker
を指定することでminikube start
コマンド自体は実行できた
$ minikube start --driver=docker $ minikube status minikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured
Hello Minikubeで使われているimageがM1 Macで動かない
$ kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 deployment.apps/hello-node created $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE hello-node 0/1 1 0 79s
いつまで経ってもdeploymentがreadyにならない……。
k8s.gcr.io/echoserver:1.4
はM1 Macで動かないらしい。
M1 MacでMinikubeを使ってみる - Hacker Sheet
↑こちらを参考に、違うimageを使ってkubectl create deployment
してみる
$ ubectl create deployment hello-minikube --image=arm64v8/nginx $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE hello-minikube 1/1 1 1 107s
deplyomentがreadyになった!
Service URLにアクセスできない
そもそもURLが発行されない……
$ kubectl expose deployment hello-minikube --type=NodePort --port=80 service/hello-minikube expose $ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-minikube NodePort 10.108.178.165 <none> 80:31639/TCP 2m34s kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26m $ minikube service hello-minikube --url 🏃 Starting tunnel for service hello-minikube. ❗ Because you are using a Docker driver on darwin, the terminal needs to be open to run it. $ minikube service list |-------------|----------------|--------------|-----| | NAMESPACE | NAME | TARGET PORT | URL | |-------------|----------------|--------------|-----| | default | hello-minikube | 80 | | | default | kubernetes | No node port | | kube-system | kube-dns | No node port | |-------------|----------------|--------------|-----|
他にも問題に直面している人を見かけた
うーん、これはM1 Mac特有の問題ではなさそう。
そして「driverをdocker
じゃなくてhyperkit
にしたら動く」というのが解決策になっている……。
そしてM1 Macではhyperkit
が動かない!詰んだ!
対応:microk8sを使う
今回は、minikube
を使うことを諦めてmicrok8s
を使うことにした。
Canonicalの軽量Kubernetes「MicroK8s」がWindowsとMacに対応。インストーラーで簡単に導入可能に - Publickey
これで、いまのところdemo通りのコマンドが使える。
MicroK8sのパッケージインストール
$brew install ubuntu/microk8s/microk8s
MicroK8sのインストール
multipassが入っていないとinstallを促される
$microk8s install Support for 'multipass' needs to be set up. Would you like to do that it now? [y/N]:
MicroK8sとSkaffoldで開発環境を構築した際のメモ(Mac) - Qiita
$ microk8s start Started.
~/.kube/config に設定追加(任意)
追加しない場合はmicroku8s kubectl
というコマンドを使えば良い。
私はこれ以外に切り替えるk8sクラスタはないので、以下のコマンドでconfigに設定を追加した。
$ microk8s config > ~/.kube/config
複数切り替える必要がある場合はmicrok8s config
の結果をうまいこと切り取って~/.kube/config
に追記する必要あり。
Hello Minikube をmicrok8sで再実行!
Hello Minikubeで使われていたコマンドをmicrok8s環境で使ってみる
$ kubectl create deployment hello-microk8s --image=arm64v8/nginx deployment.apps/hello-microk8s created $ kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE hello-microk8s 1/1 1 1 33s $ kubectl expose deployment hello-microk8s --port=80 service/hello-microk8s exposed
これでhttp://localhost
にアクセスすると馴染みのWelcome to nginx!
が見れるはず!
あー、楽しかった。