MacBookAir(M1、2020)への ローカルkubernetes環境 セットアップ手順をまとめました。
2022年1月時点ではM1環境への各種セットアップについて情報がまとまってきていますが機械学習系が多い印象で、ローカルk8s環境のセットアップに必要十分な手順を1ページにまとめてみました。
k8sの勉強をM1 MacBookでやりたいという需要はそもそも少ないかもしれませんが、同じような方の参考になればと思います。
前提
M1 MacBookAirを購入したばかりの状態を想定しています。
ローカルk8s環境を利用するための最低限の手順のためコマンドはMac標準のターミナル経由で実行する想定です。
インストール対象ソフトウェア
minikubeおよびkind(Kubernetes in Docker)の環境をセットアップするために以下のインストールを行います。
- Homebrew
- Docker Desktop for Apple silicon
- minikube
- kind(Kubernetes in Docker)
Homebrewはkindをインストールするために導入します。
Homebrewを利用しないkindのインストール手順はkind公式サイトを参照ください。
Docker Desktopはminikubeおよびkindを実行するためのハイパーバイザー環境として利用します。
手順
以下の記事が大変参考になります。神ページ!
VSCodeやPythonの開発環境構築する際はぜひ。
Homebrewインストール
公式サイト のトップページに記載の手順通り、ターミナルで以下を実行します。
% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
インストールが完了すると 「Next steps」 として実行すべきコマンドが表示されます。
==> Next steps:
- Run these two commands in your terminal to add Homebrew to your PATH:
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/******/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
- Run brew help to get started
- Further documentation:
https://docs.brew.sh
表示の通り1つ目のコマンドを実行します。
% echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> /Users/******/.zprofile
次に2つ目のコマンドを実行します。
% eval "$(/opt/homebrew/bin/brew shellenv)"
以上でHomebrewのインストールは完了です。
Docker Desktop for Apple siliconインストール
Docker公式サイトのDocker Desktop for Apple siliconのページ にアクセスします。
System Requirementに記載がある通り、ターミナルで以下のコマンドを実行しRosetta 2をインストールします。
% softwareupdate --install-rosetta
次に公式サイトトップページの「Mac with Apple chip」のダウンロードリンクをクリックします。
Docker.dmg ファイルがダウンロードされるのでダブルクリックで実行し、以下のインストーラーが表示されたら画面に従いドラッグ&ドロップでインストールを行います。
インストール後の初回起動時に利用規約の承諾等を行い、以下画面が表示されればインストールは完了です。
minikubeインストール
公式サイトの手順の通りターミナルで以下コマンドを実行し、minikubeをインストールします。
% curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-arm64
% sudo install minikube-darwin-arm64 /usr/local/bin/minikube
minikubeのインストール手順は以上です。
インストール後、minikubeの起動は以下コマンドを実行します。
% minikube start --driver=docker
コマンド実行後以下の画面が表示されminikubeクラスタが起動します。
% minikube start --driver=docker
😄 Darwin 12.1 (arm64) 上の minikube v1.24.0
✨ ユーザーの設定に基づいて docker ドライバーを使用します
👍 コントロールプレーンのノード minikube を minikube 上で起動しています
🚜 イメージを Pull しています...
🔥 docker container (CPUs=2, Memory=2200MB) を作成しています...
🐳 Docker 20.10.8 で Kubernetes v1.22.3 を準備しています...
▪ 証明書と鍵を作成しています...
▪ Control Plane を起動しています...
▪ RBAC のルールを設定中です...
🔎 Kubernetes コンポーネントを検証しています...
▪ イメージ gcr.io/k8s-minikube/storage-provisioner:v5 を使用しています
🌟 有効なアドオン: storage-provisioner, default-storageclass
🏄 完了しました! kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました
kubectl get nodes
コマンドでminikubeクラスタのノードを確認できます。
minikubeはシングルノードクラスタのため1ノードのみ表示されます。
% kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane,master 9m41s v1.22.3
minikubeクラスタを終了するには minikube delete
コマンドを実行します。
% minikube delete
🔥 docker の「minikube」を削除しています...
🔥 コンテナ "minikube" を削除しています...
🔥 /Users/******/.minikube/machines/minikube を削除しています...
💀 クラスタ "minikube" の全てのトレースを削除しました。
kindインストール
kindはHomebrew経由でインストールできます。
Homebrewを利用しないkindのインストール手順は 公式サイト を参照ください。
ターミナルで以下コマンドを実行し、kindをインストールします。
% brew install kind
kindのインストール手順は以上です。
インストール後、kindでkubernetesクラスタを起動します。
クラスタの定義ファイルを作成して行います。
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
定義ファイルを作成後、以下コマンドを実行してkindクラスタを起動します。
% kind create cluster --config kind.yaml --name kindcluster
コマンド実行後、kindクラスタの起動が行われます。
% kind create cluster --config kind.yaml --name kindcluster
Creating cluster "kindcluster" ...
✓ Ensuring node image (kindest/node:v1.21.1) 🖼
✓ Preparing nodes 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ 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/
起動後、表示されたメッセージのContextをkindに設定しておきます。Contextの設定は以下コマンドで行います。
% kubectl config use-context kind-cluster
minikubeと同様に kubectl get nodes
コマンドでkindクラスタのノードを確認できます。
kind.ymlで定義した通りのノード構成で起動していることを確認します。
% kubectl get nodes
NAME STATUS ROLES AGE VERSION
kindcluster-control-plane Ready control-plane,master 9m29s v1.21.1
kindcluster-worker Ready <none> 8m58s v1.21.1
kindcluster-worker2 Ready <none> 8m58s v1.21.1
kindクラスタを終了するには kind delete cluster
コマンドを実行します。
% kind delete cluster --name kindcluster
Deleting cluster "kindcluster" ...
おわりに
今回はminikubeとkindのセットアップまでまとめました。
とりあえずこの環境でPodの起動は問題なくできていますが、今後環境触っている中でM1固有の問題などが見つかれば別の記事にまとめようと考えています。
最後まで読んでいただきありがとうございます。