概要
Kubernetes環境をDocker desktopからWSL+minikubeに移行したくて
minikubeのインストールする方法を調べた際のメモ
環境
- WSL2(WSL バージョン: 1.2.5.0)
- Window10(10.0.19045.3448)
前提
- WSL2 インストール済み
- Docker desktop アンインストール済み
minikubeについて
Minikubeとは、Kubernetes公式コミュニティで開発・運用されており
小規模なKubernetes環境を作成するために作られたパッケージみたい
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/
ホストマシン(Nodes)にコンテナかVMで構築が選択できるみたいです
簡単に設定できるDockerを使ってみます
手順
docker 設定
WSLにDokcerをインストールする手順は以下ですね
Install Docker Engine on Ubuntu
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/engine/install/ubuntu/#uninstall-docker-engine
- Dokcer アンインストール
手順通り既にインストールしているものを一旦削除
※バージョンが問題ない場合、これは不要
#競合するパッケージをすべてアンインストールします。
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
#アンインストールで削除されないディレクトリの削除
$ sudo rm -rf /var/lib/docker
$ sudo rm -rf /var/lib/containerd
- docker インストール
##Docker の Apt リポジトリをセットアップ ##Add Docker's official GPG key: sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg ##Add the repository to Apt sources: echo \ "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update ##Docker パッケージをインストール sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- docker インストール確認
docker version docker run hello-world sudo docker ps -a
docker 自動起動設定
WSL起動毎にdockerを手動で起動したくないのでsystemdで自動起動を設定
-
手順は以下
https://learn.microsoft.com/ja-jp/windows/wsl/wsl-config#systemd-support -
systemdを有効にする(WSL上作業)
# wsl.confの作成してsystemdを有効にする # ※ファイルがなければ新規作成する vi /etc/wsl.conf cat /etc/wsl.conf [boot] systemd=true
-
wsl再起動(コマンドプロンプト)
wsl --shutdown
-
docker の自動起動設定(WSL上作業)
## dockerを自動起動を設定 systemctl enable docker # 自動起動設定の確認 systemctl is-enabled docker # dokcerが起動しているか確認 # 「 Active: active (running)」ならOK systemctl status docker # 起動していなければ以下で起動 systemctl start docker
minikube 設定
minikubeのインストールはとても簡単でした
公式サイトで自分の環境にあった項目を選択すると
インストールに必要なコマンドが表示されるので
それを実行するだけ
minikube start
https://minikube.sigs.k8s.io/docs/start/
-
minikubeのインストール
## WSL(Debian)以下を実行 curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb sudo dpkg -i minikube_latest_amd64.deb
-
インストール後確認
## バージョンが表示したらOK minikube version
minikube を触ってみる
-
Kubernetes cluster作成
minikube start
-
Pod確認
minikube kubectl -- get po -A
minikube のいろんなコマンド
-
動いている minikube のAdd-On が見れる
minikube addons list
-
minikube クラスター削除
minikube delete
-
minikube クラスター停止
※Status が Stoppedminikube stop
-
起動
※Status が Runningminikube start
補足
kubectlについて
kubectl がインストールしていないくても"minikube kubectl"コマンドを実行すれば
Kubernetesクラスターと同じバージョンのkubectlがインストールされます。
kubectlをインストールして使うことも可能です。
kubectlのインストールは以下で設定できます
-
公式サイトの以下通りに実行すればインストールできます
https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/
※気がついたらURLが変わってました
https://kubernetes.io/ja/docs/tasks/tools/install-kubectl-linux/ -
インストール
sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2 curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubectl
-
確認
kubectl version
kubectlインストール後すること
コマンド補完があった方が便利なので以下で設定
kubectl Cheat Sheet
https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/
- 設定
source <(kubectl completion bash) # echo "source <(kubectl completion bash)" >> ~/.bashrc
参考サイト
https://minikube.sigs.k8s.io/docs/start/
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/
補足(追記)
PCが壊れ再作成した際に、以下エラーメッセージが表示されたが、メッセージ内の対処を行うことで解決した。
- エラー
$ minikube start -p test 😄 [test] minikube v1.32.0 on Ubuntu 22.04 (amd64) 👎 Unable to pick a default driver. Here is what was considered, in preference order: ▪ docker: Not healthy: "docker version --format {{.Server.Os}}-{{.Server.Version}}:{{.Server.Platform.Name}}" exit status 1: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied ▪ docker: Suggestion: Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker' <https://docs.docker.com/engine/install/linux-postinstall/> 💡 Alternatively you could install one of these drivers: ▪ kvm2: Not installed: exec: "virsh": executable file not found in $PATH ▪ podman: Not installed: exec: "podman": executable file not found in $PATH ▪ qemu2: Not installed: exec: "qemu-system-x86_64": executable file not found in $PATH ▪ virtualbox: Not installed: unable to find VBoxManage in $PATH ❌ Exiting due to DRV_NOT_HEALTHY: Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers. $
- 対処
$ sudo usermod -aG docker $USER && newgrp docker
- 対処後
$ minikube start -p test 😄 [test] minikube v1.32.0 on Ubuntu 22.04 (amd64) ✨ Automatically selected the docker driver. Other choices: ssh, none 📌 Using Docker driver with root privileges 👍 Starting control plane node test in cluster test 🚜 Pulling base image ... 💾 Downloading Kubernetes v1.28.3 preload ... > preloaded-images-k8s-v18-v1...: 403.35 MiB / 403.35 MiB 100.00% 3.90 Mi > gcr.io/k8s-minikube/kicbase...: 453.86 MiB / 453.90 MiB 99.99% 4.35 MiB 🔥 Creating docker container (CPUs=2, Memory=3900MB) ... 🐳 Preparing Kubernetes v1.28.3 on Docker 24.0.7 ... ▪ Generating certificates and keys ... ▪ Booting up control plane ... ▪ Configuring RBAC rules ... 🔗 Configuring bridge CNI (Container Networking Interface) ... ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 🔎 Verifying Kubernetes components... 🌟 Enabled addons: storage-provisioner, default-storageclass 🏄 Done! kubectl is now configured to use "test" cluster and "default" namespace by default $