Open16

WSL2でminikubeを動かす

ピン留めされたアイテム
TakumioooTakumiooo

このスクラップは何?

  • 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
TakumioooTakumiooo

PowershellでWSL2のUbuntuをインストールする。

// at powershell
wsl --install -d ubuntu

ダウンロードできたことを確認。
Ubuntuのversion: 2(WSLのバージョン)がダウンロードされていればOK

wsl -l -v
TakumioooTakumiooo

ユーザー名と、パスワードを設定後に、UpdateとUpgradeを行う。

// at WSL2 
sudo apt update && sudo apt -y upgrade
TakumioooTakumiooo

ダウンロードするライブラリ

  • git
  • NeoVim
  • Nodejs
  • Go
  • Docker
  • Kubernetes関連
    • minikube
    • containerd
    • nerdctl
    • BuildKit
TakumioooTakumiooo

git、NeoVim、Nodejs、Goをインストール

sudo apt install git neovim nodejs golang-go

インストールできたことを確認

// git
git --version

// NeoVim
nvim --version

// Nodejs
node --version

// golang
go version
TakumioooTakumiooo

Dockerのインストール

  • Dockerはsystemdで動作するように構築する。

Dockerをインストールする前に、systemdでdockerを起動するため、wslの設定を追加する。

// /etc/wsl.conf
[boot]
systemd=true

Dockerのインストールは公式の通りに行う。
https://docs.docker.com/engine/install/ubuntu/

Dockerの動作確認

sudo systemctl start docker
sudo docker run hello-world
TakumioooTakumiooo

Kubernetes環境構築

  • ローカルでKubernetesを実行するためminikubeをインストールする。
  • minikubeを動作させるため、kvm2をインストールする。
  • コンテナランタイムはcontainerdを使用する。
  • containerdを管理するためnerdctlをインストールする。
  • root以外のユーザーで起動するため、rootlesskitをインストールする。
  • コンテナのビルドには、BuildKitを使う。
  • コンテナネットワークのために、CNI pluginをインストールする。
TakumioooTakumiooo

minikubeのインストール

インストールは公式の手順に沿って行う。
https://minikube.sigs.k8s.io/docs/start/

インストール後に、動作確認を行う。
起動時には、仮想化環境をkvm2で指定して起動する。

minikube start --driver=kvm2

kvm2のインストールは以下のリンクを参考に行う。
https://minikube.sigs.k8s.io/docs/drivers/kvm2/

TakumioooTakumiooo

nerdctlのfullに、minikube(ファイル名はminikubels)が含まれており、以下コマンドで実行できるようになる。
また、上記でダウンロードしたminikubeは、minikubeコマンドで実行できなくなる。

minikubels start --drive=kvm2
TakumioooTakumiooo

毎回minikubelsと打つとややこしいので、minikubeで起動できるよう、aliasを設定した。

alias minikube='minikubels'
TakumioooTakumiooo

nerdctlをインストールする。

nerdctlのリポジトリから、最新のバイナリをダウンロードする。
https://github.com/containerd/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コンテナの設定
https://rootlesscontaine.rs/getting-started/common/

rootlessモードでcontainerdをインストールする。

containerd-rootless-setuptool.sh install

※各ファイルは展開後不要であれば削除

rm -r nerdctl-full-1.0.0-linux-amd64.tar.gz
TakumioooTakumiooo

BuildKitのインストール

https://github.com/moby/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

TakumioooTakumiooo

CNI Pluginのインストール

CNIとは
コンテナ・ネットワーク・インターフェース(CNI)は、実行中のコンテナが使用するネットワークを仮想化する。
The Container Network Interface (CNI) is responsible for virtualizing networks used by running containers.
https://github.com/containernetworking/plugins

// 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内のフォルダ操作で権限がないためパーミッションエラーが発生するため、権限を付与する。


TakumioooTakumiooo

rootlessモード起動のトラブルシューティング

  • containerdのrootlessモードのインストールはできるが、cgroup v2を有効化しないと、rootlessモードでの起動ができない。
  • インストール時に警告が表示される。
  • rootlessモードで起動できないため、nerdctl runしてもimageのダウンロードが進まない。
TakumioooTakumiooo

一通りインストールが終わった段階で、ローカルで動作確認を行う。

// 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