WSL2でminikubeを動かす
このスクラップは何?
- WSL2の最初の設定から、ローカルにkubernetesの起動環境構築の設定内容をメモっています。
- 独学で調べながら記載しているため、誤っている情報があるかもしれません。
動作環境
- PC : 11th Gen Intel(R) Core(TM) i7-11700K @ 3.60GHz、3600 Mhz、8 個のコア、16 個のロジカル プロセッサ
- OS:Microsoft Windows 11 Pro
- システムの種類:x64-ベース PC
- WSL2 OS: Ubuntu
PowershellでWSL2のUbuntuをインストールする。
// at powershell
wsl --install -d ubuntu
ダウンロードできたことを確認。
Ubuntuのversion: 2(WSLのバージョン)がダウンロードされていればOK
wsl -l -v
ユーザー名と、パスワードを設定後に、UpdateとUpgradeを行う。
// at WSL2
sudo apt update && sudo apt -y upgrade
ダウンロードするライブラリ
- git
- NeoVim
- Nodejs
- Go
- Docker
- Kubernetes関連
- minikube
- containerd
- nerdctl
- BuildKit
git、NeoVim、Nodejs、Goをインストール
sudo apt install git neovim nodejs golang-go
インストールできたことを確認
// git
git --version
// NeoVim
nvim --version
// Nodejs
node --version
// golang
go version
Dockerのインストール
- Dockerはsystemdで動作するように構築する。
Dockerをインストールする前に、systemdでdockerを起動するため、wslの設定を追加する。
// /etc/wsl.conf
[boot]
systemd=true
Dockerのインストールは公式の通りに行う。
Dockerの動作確認
sudo systemctl start docker
sudo docker run hello-world
Kubernetes環境構築
- ローカルでKubernetesを実行するためminikubeをインストールする。
- minikubeを動作させるため、kvm2をインストールする。
- コンテナランタイムはcontainerdを使用する。
- containerdを管理するためnerdctlをインストールする。
- root以外のユーザーで起動するため、rootlesskitをインストールする。
- コンテナのビルドには、BuildKitを使う。
- コンテナネットワークのために、CNI pluginをインストールする。
minikubeのインストール
インストールは公式の手順に沿って行う。
インストール後に、動作確認を行う。
起動時には、仮想化環境をkvm2で指定して起動する。
minikube start --driver=kvm2
kvm2のインストールは以下のリンクを参考に行う。
nerdctlをインストールする。
nerdctlのリポジトリから、最新のバイナリをダウンロードする。
// example
curl -OL https://github.com/containerd/nerdctl/releases/download/v1.0.0/nerdctl-full-1.0.0-linux-amd64.tar.gz
nerdctlのバイナリを/usr/local/に展開する。
sudo tar Cxzvvf /usr/local nerdctl-full-1.0.0-linux-amd64.tar.gz
rootlessコンテナの設定
rootlessモードでcontainerdをインストールする。
containerd-rootless-setuptool.sh install
※各ファイルは展開後不要であれば削除
rm -r nerdctl-full-1.0.0-linux-amd64.tar.gz
BuildKitのインストール
// BuildKitのバイナリをダウンロード
curl -OL https://github.com/moby/buildkit/releases/download/v0.10.5/buildkit-v0.10.5.linux-amd64.tar.gz
// コピー先のディレクトリを作成
sudo mkdir /usr/local/buildkit
// ディレクトリにコピー
sudo tar Cxzvvf /usr/local/buildkit buildkit-v0.10.5.linux-amd64.tar.gz
// パスを追加
echo "export PATH=$PATH:/usr/local/buildkit/bin" >> ~/.bashrc
source ~/.bashrc
// rootlessモードでインストール
containerd-rootless-setuptool.sh install-buildkit
CNI Pluginのインストール
CNIとは
コンテナ・ネットワーク・インターフェース(CNI)は、実行中のコンテナが使用するネットワークを仮想化する。
The Container Network Interface (CNI) is responsible for virtualizing networks used by running containers.
// CNI pluginのバイナリをダウンロード
curl -OL https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-arm64-v1.1.1.tgz
// コピー先のディレクトリを作成
sudo mkdir -p /opt/cni/bin
// ディレクトリにコピー
sudo tar Cxzvvf /opt/cni/bin cni-plugins-linux-arm64-v1.1.1.tgz
// containerdとbuildkitのrootlessモード起動時に、/etc/cni内のフォルダ操作で権限がないためパーミッションエラーが発生するため、権限を付与する。
rootlessモード起動のトラブルシューティング
- containerdのrootlessモードのインストールはできるが、cgroup v2を有効化しないと、rootlessモードでの起動ができない。
- インストール時に警告が表示される。
- [WARNING] Enabling cgroup v2 is highly recommended, see https://rootlesscontaine.rs/getting-started/common/cgroup2/
- rootlessモードで起動できないため、nerdctl runしてもimageのダウンロードが進まない。
一通りインストールが終わった段階で、ローカルで動作確認を行う。
// kubectlのバージョン確認
kubectl version
// minikubeのバージョン確認
minikube version
// 仮想化環境が - driver: kvm2と表示されることを確認
minikube config view
上記の動作確認ができたら、minikubeを起動する。
起動には少し時間がかかる。
minikube start
// 結果(2022/11/13時点)
// kvm2, containerdなど一通り起動していることが分かる
😄 minikube v1.28.0 on Ubuntu 20.04 (amd64)
🆕 Kubernetes 1.25.3 is now available. If you would like to upgrade, specify: --kubernetes-version=v1.25.3
✨ Using the kvm2 driver based on existing profile
👍 Starting control plane node minikube in cluster minikube
🏃 Updating the running kvm2 "minikube" VM ...
📦 Preparing Kubernetes v1.25.2 on containerd 1.6.8 ...
▪ kubelet.container-runtime=remote
▪ kubelet.container-runtime-endpoint=unix:///run/containerd/containerd.sock
▪ kubelet.image-service-endpoint=unix:///run/containerd/containerd.sock
🔎 Verifying Kubernetes components...
▪ Using image docker.io/kubernetesui/dashboard:v2.7.0
▪ Using image docker.io/kubernetesui/metrics-scraper:v1.0.8
▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
💡 Some dashboard features require the metrics-server addon. To enable all features please run:
minikube addons enable metrics-server
🌟 Enabled addons: storage-provisioner, default-storageclass, dashboard
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
minikubeが起動している状態で、以下コマンドを実行することで、起動しているk8sの状態をブラウザで確認できる。
minikube dashboard