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 Kubernetes でk8sを有効化
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を利用して、ダッシュボードにアクセスする。
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にアクセスすることで、ダッシュボードを利用できる。
- https:/test.example.com:30443/