WSL Ubuntu で Kubernetes v1.34.2 + Docker 環境を構築する

はじめに

本記事では、WSL2上のUbuntuにKubernetes v1.34.2とDockerを使った開発環境を構築する手順を紹介します。

検証環境

  • OS: WSL2 Ubuntu 22.04.5 LTS
  • Kubernetes: v1.34.2
  • cri-dockerd: v0.3.23
  • Docker: 28.2.2
  • コンテナランタイム: Docker + cri-dockerd

アーキテクチャ概要

Kubernetes v1.24以降、Dockershimが削除されたため、Dockerをコンテナランタイムとして使用する場合はcri-dockerdが必要です。

复制代码
Kubernetes (kubelet) → cri-dockerd → Docker Engine

事前準備:Dockerのインストール

まず、Dockerをインストールします。

bash 复制代码
# システムアップデート
sudo apt-get update

# Docker GPGキーの追加
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

# Dockerリポジトリの追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$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 -y

ステップ1:システム環境の設定

1.1 必要なパッケージのインストール

bash 复制代码
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl apt-transport-https ca-certificates gnupg lsb-release wget

1.2 Swapの無効化

Kubernetesは、パフォーマンスの理由からSwapの無効化を要求します。

bash 复制代码
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 確認(Swapが0になっていることを確認)
free -h

1.3 カーネルモジュールの読み込み

bash 复制代码
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 確認
lsmod | grep -E "overlay|br_netfilter"

1.4 ネットワークパラメータの設定

bash 复制代码
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

ステップ2:cri-dockerd のインストール

cri-dockerdは、KubernetesとDockerの間の橋渡しをするアダプターです。

bash 复制代码
cd /tmp

# 最新版をダウンロード(v0.3.23)
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.23/cri-dockerd_0.3.23.3-0.ubuntu-$(lsb_release -cs)_amd64.deb

# インストール
sudo dpkg -i cri-dockerd_0.3.23.3-0.ubuntu-$(lsb_release -cs)_amd64.deb
sudo apt-get install -f -y

cri-dockerdの設定

公式イメージリポジトリを使用するための設定を行います。

bash 复制代码
sudo mkdir -p /etc/systemd/system/cri-docker.service.d/

cat <<EOF | sudo tee /etc/systemd/system/cri-docker.service.d/override.conf
[Service]
ExecStart=
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.k8s.io/pause:3.10
EOF

# サービスの再起動
sudo systemctl daemon-reload
sudo systemctl enable cri-docker.service
sudo systemctl restart cri-docker.service

# バージョン確認
cri-dockerd --version

ステップ3:Kubernetes v1.34.2 のインストール

3.1 Kubernetes公式リポジトリの追加

bash 复制代码
# GPGキーの追加
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

# リポジトリの追加
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.34/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt update

3.2 Kubernetesコンポーネントのインストール

bash 复制代码
# v1.34.2 をインストール
sudo apt install -y kubelet=1.34.2-1.1 kubeadm=1.34.2-1.1 kubectl=1.34.2-1.1

# バージョンを固定(自動アップデートを防ぐ)
sudo apt-mark hold kubelet kubeadm kubectl

# バージョン確認
kubeadm version
kubectl version --client

ステップ4:Kubernetesクラスタの初期化

4.1 必要なイメージの事前取得

bash 复制代码
# 必要なイメージリストの確認
kubeadm config images list --kubernetes-version=v1.34.2

出力例:

复制代码
registry.k8s.io/kube-apiserver:v1.34.2
registry.k8s.io/kube-controller-manager:v1.34.2
registry.k8s.io/kube-scheduler:v1.34.2
registry.k8s.io/kube-proxy:v1.34.2
registry.k8s.io/coredns/coredns:v1.12.1
registry.k8s.io/pause:3.10.1
registry.k8s.io/etcd:3.6.5-0
bash 复制代码
# イメージの取得
sudo kubeadm config images pull \
  --kubernetes-version=v1.34.2 \
  --cri-socket=unix:///var/run/cri-dockerd.sock

4.2 Masterノードの初期化

bash 复制代码
# WSLのIPアドレスを取得
IP_ADDR=$(hostname -I | awk '{print $1}')

# クラスタの初期化
sudo kubeadm init \
  --apiserver-advertise-address=$IP_ADDR \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --kubernetes-version=v1.34.2 \
  --cri-socket=unix:///var/run/cri-dockerd.sock

:::note info

初期化には数分かかります。成功すると、Worker nodeを追加するためのjoinコマンドが表示されます。

:::

4.3 kubectlの設定

bash 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# クラスタ情報の確認
kubectl cluster-info

出力例:

复制代码
Kubernetes control plane is running at https://172.23.188.81:6443
CoreDNS is running at https://172.23.188.81:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

ステップ5:ネットワークプラグインのインストール

Kubernetesクラスタには、Pod間通信のためにCNI(Container Network Interface)プラグインが必要です。

Flannelのインストール

bash 复制代码
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

:::note warn

Flannelを使用する場合、初期化時に--pod-network-cidr=10.244.0.0/16を指定する必要があります。

:::

ステップ6:シングルノード構成の設定

開発環境では、Masterノードでもアプリケーションポッドを実行できるようにします。

bash 复制代码
# Masterノードのtaintを削除
kubectl taint nodes --all node-role.kubernetes.io/control-plane-

# ノードの状態確認
kubectl get nodes -o wide

出力例:

复制代码
NAME          STATUS   ROLES           AGE   VERSION   INTERNAL-IP
thinkpad-pc   Ready    control-plane   48s   v1.34.2   172.23.188.81
bash 复制代码
# 全ポッドの状態確認
kubectl get pods --all-namespaces

ステップ7:動作確認

テストアプリケーションのデプロイ

bash 复制代码
# Nginxデプロイメントの作成
kubectl create deployment nginx --image=nginx:alpine --replicas=2

# NodePortサービスの公開
kubectl expose deployment nginx --port=80 --type=NodePort

# リソースの確認
kubectl get pods,svc

出力例:

复制代码
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-7977cdf8f5-kjfm2   1/1     Running   0          20s
pod/nginx-7977cdf8f5-sppmw   1/1     Running   0          20s

NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)
service/kubernetes   ClusterIP   10.96.0.1       <none>        443/TCP
service/nginx        NodePort    10.110.205.52   <none>        80:30486/TCP

アクセステスト

bash 复制代码
# Nginxへのアクセス
curl http://localhost:$(kubectl get svc nginx -o jsonpath='{.spec.ports[0].nodePort}')

正常に動作していれば、Nginxのウェルカムページが表示されます。

html 复制代码
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...

クリーンアップ

bash 复制代码
# テストリソースの削除
kubectl delete deployment nginx
kubectl delete svc nginx

よく使うコマンド集

クラスタの状態確認

bash 复制代码
# ノード一覧
kubectl get nodes

# 全ポッド一覧
kubectl get pods -A

Dockerイメージの確認

bash 复制代码
# Kubernetesが使用しているイメージ
docker images | grep registry.k8s.io

出力例:

复制代码
registry.k8s.io/kube-apiserver            v1.34.2    a5f569d49a97   2 months ago   88MB
registry.k8s.io/kube-controller-manager   v1.34.2    01e8bacf0f50   2 months ago   74.9MB
registry.k8s.io/kube-scheduler            v1.34.2    88320b5498ff   2 months ago   52.8MB
registry.k8s.io/kube-proxy                v1.34.2    8aa150647e88   2 months ago   71.9MB
registry.k8s.io/coredns/coredns           v1.12.1    52546a367cc9   10 months ago  75MB
registry.k8s.io/etcd                      3.6.5-0    a3e246e9556e   4 months ago   62.5MB
registry.k8s.io/pause                     3.10.1     cd073f4c5f6a   7 months ago   736kB

ログの確認

bash 复制代码
# kubeletのログ
sudo journalctl -u kubelet -f

# 特定のポッドのログ
kubectl logs <pod-name> -n <namespace>

# 前回実行時のログ
kubectl logs <pod-name> --previous

トラブルシューティング

bash 复制代码
# ポッドの詳細情報
kubectl describe pod <pod-name>

# イベントの確認
kubectl get events --sort-by='.lastTimestamp'

# クラスタのリセット(再構築が必要な場合)
sudo kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock
sudo rm -rf /etc/cni/net.d
sudo rm -rf $HOME/.kube/config

まとめ

本記事では、WSL2 Ubuntu上にKubernetes v1.34.2とDockerを使った開発環境を構築する手順を紹介しました。

ポイント

  • ✅ 公式イメージリポジトリ(registry.k8s.io)を使用
  • ✅ cri-dockerdでDockerとKubernetesを連携
  • ✅ シングルノード構成で開発環境として利用可能
  • ✅ Flannel/CalicoでPod間ネットワーキングを実現

次のステップ

  • Helmのインストール
  • Ingressコントローラーの設定
  • 永続ボリュームの設定
  • マルチノードクラスタへの拡張

参考資料


この記事が、Kubernetes環境構築の参考になれば幸いです。

相关推荐
HABuo2 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Gold Steps.5 小时前
OpenEBS — 云原生 CNS 高性能存储
云原生·kubernetes·存储
oMcLin5 小时前
2025年必备的Docker命令指南与实战示例
docker·容器·eureka
AtoposのCX3305 小时前
Docker运行hello-world镜像失败或超时
运维·docker
sun cat6 小时前
Docker详细介绍(6)
docker·容器·docker-compose
生活很暖很治愈7 小时前
Linux——基础IO&软硬链接
linux·ubuntu
Roc.Chang7 小时前
Ubuntu 下 VLC 无法启动(Segmentation fault)终极解决方案
linux·ubuntu·vlc·媒体播放
Anesthesia丶8 小时前
Ubuntu20.04 升级 Ubuntu24.04 LTS
ubuntu
小Pawn爷10 小时前
4.镜像仓库
docker