Docker Desktop上のKubernetesを利用

2024/12/28に公開

はじめに

久しぶりにKubernetesを触ってみたので備忘録として残す。
まえにMinikubeを試したが、今回はDocker Desktop上に作成できるKubernetesクラスタで試してみた。

TL;DR

Docker Desktop上でKubernetesクラスタを有効にして、Dashboadまでアクセス。

前提環境

  • OS: Windows 11
  • Docker Desktop: 4.37.1
  • Docker: 27.4.0
  • Kubernetes: 1.30.5

Docker Desktop上でKubernetesクラスタの有効化

(前提)Docker Desktopのインストール

下記リンクを参考にWindowsへDocker Desktopをインストールします。
Windows に Docker Desktop をインストール

Kubernetesクラスタの有効化

Docker Desktop上でSettings > Kubernetesに遷移して「Enable Kubernetes」を有効にします。
有効にならない場合は、「Apply & restart」を押してみてください。

ちなみに、Kubernetesクラスタ上でいろいろ試してリセットしたい場合は「Reset Kubernetes Cluster」でリセットできるようです。

コンポーネントのversion確認

docker関連のversion確認
$ docker --version
Docker version 27.4.0, build bde2b89
$ docker-compose --version
Docker Compose version v2.31.0-desktop.2
kubernetes関連のversion確認
$ kubectl version
Client Version: v1.30.5
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3
Server Version: v1.30.5

Dashboadの有効化

事前準備

Dashboadをデプロイする前に管理ユーザーService AccountとClusterRoleBindingを作成します。
kubernetes/dashboadのcreating-sample-user.mdにあるように以下のようなyamlファイルを作成し、kubectl applyします。

dashboard-adminuser.yml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
dashboard-crb.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard

下記コマンドで適用します。

$ kubectl apply -f dashboard-adminuser.yml
serviceaccount/admin-user created
$ kubectl apply -f dashboard-crb.yml
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

Dashboadへログインする際は上記で作成したユーザーのBearerトークンが必要です。
下記のようにコマンドを実行してトークンを取得しておきます。

$ kubectl -n kubernetes-dashboard create token admin-user
<bearerトークン>

Dashboadのdeploy

日本語ページの情報(古い)

Web UI (Dashboard)のダッシュボードUIのデプロイに記載のあるコマンドを実行します。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml
namespace/kubernetes-dashboard created
serviceaccount/kubernetes-dashboard created
service/kubernetes-dashboard created
secret/kubernetes-dashboard-certs created
secret/kubernetes-dashboard-csrf created
secret/kubernetes-dashboard-key-holder created
configmap/kubernetes-dashboard-settings created
role.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created
rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created
deployment.apps/kubernetes-dashboard created
service/dashboard-metrics-scraper created
Warning: spec.template.metadata.annotations[seccomp.security.alpha.kubernetes.io/pod]: non-functional in v1.27+; use the "seccompProfile" field instead
deployment.apps/dashboard-metrics-scraper created

英語のページ(最新)

Deploy and Access the Kubernetes Dashboard

deployの確認

$ kubectl get ns
NAME                   STATUS   AGE
default                Active   5h35m
kube-node-lease        Active   5h35m
kube-public            Active   5h35m
kube-system            Active   5h35m
kubernetes-dashboard   Active   66m

$ kubectl -n kubernetes-dashboard get all
NAME                                             READY   STATUS    RESTARTS   AGE
pod/dashboard-metrics-scraper-687dbbb9c4-kwwc8   1/1     Running   0          68m
pod/kubernetes-dashboard-6d65597fcd-5tnb4        1/1     Running   0          68m

NAME                                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/dashboard-metrics-scraper   ClusterIP   10.105.47.163   <none>        8000/TCP   68m
service/kubernetes-dashboard        ClusterIP   10.105.84.82    <none>        443/TCP    68m

NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/dashboard-metrics-scraper   1/1     1            1           68m
deployment.apps/kubernetes-dashboard        1/1     1            1           68m

NAME                                                   DESIRED   CURRENT   READY   AGE
replicaset.apps/dashboard-metrics-scraper-687dbbb9c4   1         1         1       68m
replicaset.apps/kubernetes-dashboard-6d65597fcd        1         1         1       68m

プロキシの設定

kubectl proxyコマンドでDashboadへアクセスできるようにします。
ダッシュボードはhttp://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/へアクセスすることで利用できます。

Dashboadへサインイン

Kubernetes Dashboardでは(1)トークン、(2)Kubeconfigの2つの方法でログインできるようです。
今回はBearerトークンでログインするので、トークンにチェックをしてkubectl -n kubernetes-dashboard create token admin-userで取得したトークンをコピペしてサインインします。
Overviewのページが表示されればサインイン成功です。

参考

Discussion