Docker DesktopでKubernetesを起動する

試しては忘れ、試しては忘れするmacOSのDocker DesktopでKubernetesを利用ための準備をメモしておく。

環境

  • HW: MacBook Pro(14"/2021)
  • CPU: Apple M1 Max
  • MEM: 32GB
  • OS: macOS Monterey 12.1
  • Docker Desktop 4.4.2 (73305)

Docker DesktopでKubernetesを有効化

ダッシュボードから Kubernetes => Enable Kubernetesk8sを有効化

f:id:pyde:20220207202831p:plain

kubectlのコンテキストをDocker Desktopに切り替え

$ kubectl config use-context docker-desktop

Dashbordを利用する

ダッシュボードのデプロイ

公式サイトのガイド(https://github.com/kubernetes/dashboard)にしたがって、Dashboardのデプロイする。

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

サービスアカウントの作成

ここでも、公式サイトのガイド)にしたがって、サービスアカウント(admin)を作成し、cluster-adminロールを割り当てるためのYAMLファイル(create_service_account.yaml)を作成する。

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

create_service_account.yamlをapplyする。

$ kubectl apply -f create_service_account.yaml

DashboardにアクセスするためのBeaker Tokenを作成する。

$ kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
eyJhbGciOiJSUzI1NiIsImtpZCI6ImZtVWNQc2xBd09wVVpkUE5DY0ZKMUpZY2QxQjk2NEJ4bU1CaTdCc2pNXzQifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlY...snip...jqp1HStzf0GxWweRHUtrRI_RFtfr6K9EUc1a2GVNqMOVyNisJAKdI16AfoHZ7R0GpEEhSFRWNMlcz8Js_879wOFjz3OKOzkA02qLYFDaqq8YTn4eSpwP2NhLYu3a_UgV-WO7aTSDdKUWF5GSqAb3MEC9ZwWRtAHs6XBJbADQtQ

ローカルホスト経由でダッシュボードに接続するためのセキュアアクセスチャネルを作成して、ダッシュボードにアクセスする。

$ kubectl proxy

取得済のBeaker Tokenを利用して、ダッシュボードにアクセスする。

f:id:pyde:20220207204400p:plain

Dashboardを外部に公開する

kubernetes-dashboardのネームスペースとサービス名を確認する。

$ kubectl get services --all-namespaces | grep dashboard
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.103.230.46    <none>        8000/TCP                 51m
kubernetes-dashboard   kubernetes-dashboard        ClusterIP   10.108.201.209   <none>        443/TCP                  51m

サービス(kubernetes-dashboard)の設定を修正し、NodePortで外部に向けてサービスを提供できるよう修正する。 ※nodePortのレンジは30000-32767なので注意。

$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard -o yaml > custom_dashboard.yaml
$ vi custom_dashboard.yaml
...snip...
spec:
  clusterIP: 10.108.201.209
  clusterIPs:
  - 10.108.201.209
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
    nodePort: 30443         # nodePortを追加
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: NodePort            # NodePortに変更
...snip

修正したcustom_dashboard.yamlをapplyしてダッシュボードの設定変更を反映させる。

$ kubectl apply -f custom_dashboard.yaml

これで、k8sダッシュボードを起動しているノードに、HTTPSでポート:30443にアクセスすることで、ダッシュボードを利用できる。

f:id:pyde:20220207204925p:plain