はじめに
以前にもKubernetesの記事を投稿してはいたのですが、それらすべてがDockerDesktopを使用して動作していたものなので、
今回はMinikubeとKindを使用してローカルKubernetesの環境を構築していこうと思います。
※#18は修正箇所が多かったので削除しました。
構築環境
OS:
- Windows 11
- WSL2 (ubuntu)
事前のWSLの準備
# PowerShell
$ wsl --install -d Ubuntu
$ wsl.exe -d Ubuntu
ユーザー名とパスワードを入力してユーザーを作成します。
Minikube実行まで
$ sudo vi /etc/resolve.conf
nameserver 8.8.8.8に変更
ubuntu
だとsnap
が使用できるので以下のコマンドでkubectl
のインストール
$ sudo snap install kubectl --classic
リソース不足で起動できないことがあるため、必要に応じてC:\Users\PC_User\.wslconfig
の設定変更をします。
公式ドキュメントから抜粋
What you’ll need
・2 CPUs or more
・2GB of free memory
・20GB of free disk space
・Internet connection
・Container or virtual machine manager, such as: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation
私の場合は以下のように設定しました。
[wsl2]
memory=4GB # メモリ使用量を4GBに制限
processors=4 # 使用可能なCPUコアを4に制限
swap=2GB # スワップ領域を2GBに設定
localhostForwarding=true # ローカルホストへのフォワーディングを有効化
公式ドキュメントはこちら:
- Minikubeのインストール
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
$ sudo dpkg -i minikube_latest_amd64.deb
Dockerのインストール
- Ðocker関連のパッケージのアンインストール(競合回避)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
- gpgキーの追加
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
- リポジトリの作成
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Dockerインストール
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
-
Minikube実行
※root権限では使用できないので一般ユーザで実行します
$ sudo usermod -aG docker $USER && newgrp docker
$ minikube start --driver=docker
- 各コンポーネント確認
kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
default hello-minikube-8696bfd944-djtck 1/1 Running 1 (10h ago) 10h
kube-system coredns-668d6bf9bc-zc8b5 1/1 Running 1 (10h ago) 10h
kube-system etcd-minikube 1/1 Running 1 (10h ago) 10h
kube-system kube-apiserver-minikube 1/1 Running 1 (10h ago) 10h
kube-system kube-controller-manager-minikube 1/1 Running 1 (10h ago) 10h
kube-system kube-proxy-g75zz 1/1 Running 1 (10h ago) 10h
kube-system kube-scheduler-minikube 1/1 Running 1 (10h ago) 10h
kube-system storage-provisioner 1/1 Running 3 (53s ago) 10h
- ノードの確認
kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 10h v1.32.0
Kind実行まで
- Kindインストール
$ [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-amd64
$ sudo mv ./kind /usr/local/bin/kind
$ kind version
- クラスターの作成
$ kind create cluster --image=kindest/node:v1.32.2@sha256:f226345927d7e348497136874b6d207e0b32cc52154ad8323129352923a3142f
最新のイメージファイルは以下のリンクから
- ノードの確認
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 49s v1.32.2
-
マルチノードクラスターの作成
Kindを使用しているのでマルチノードクラスタの作成もしてみます。
$ kind delete cluster
先ほど作成したクラスターを削除
- yamlファイルに定義
$ vi Multi-node-clusters.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
image: kindest/node:v1.32.2@sha256:f226345927d7e348497136874b6d207e0b32cc52154ad8323129352923a3142f
- role: worker
image: kindest/node:v1.32.2@sha256:f226345927d7e348497136874b6d207e0b32cc52154ad8323129352923a3142f
- role: worker
image: kindest/node:v1.31.6@sha256:28b7cbb993dfe093c76641a0c95807637213c9109b761f1d422c2400e22b8e87
- マルチノードクラスターの作成
kind create cluster --config Multi-node-clusters.yaml
- 各コンポーネント確認
$ kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-668d6bf9bc-7l7qm 1/1 Running 0 26s
kube-system coredns-668d6bf9bc-lk898 1/1 Running 0 26s
kube-system etcd-kind-control-plane 1/1 Running 0 34s
kube-system kindnet-bfdn9 1/1 Running 0 24s
kube-system kindnet-k6ghx 1/1 Running 0 23s
kube-system kindnet-tmz5p 1/1 Running 0 26s
kube-system kube-apiserver-kind-control-plane 1/1 Running 0 33s
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 33s
kube-system kube-proxy-cd4tj 1/1 Running 0 24s
kube-system kube-proxy-rw2kx 1/1 Running 0 23s
kube-system kube-proxy-sjz42 1/1 Running 0 26s
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 34s
local-path-storage local-path-provisioner-7dc846544d-rlm5v 1/1 Running 0 26s
- ノードの確認
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane 10m v1.32.2
kind-worker Ready <none> 9m55s v1.32.2
kind-worker2 Ready <none> 9m54s v1.31.6
まとめ
感想になるのですがこれらの動作を確認する中で、気になることが次々と増えました。
WSLはVMの扱いなのか?そもそも
WSLはどのように環境を分離しているのか?`といった疑問が生まれました。
改めて確認して、時間があれば記事にまとめようと思います。
一つのことを調べると芋づる式に疑問が増えていくのは面白いですね。
参考リンク