Kubernetes のダッシュボードが見れなかったときの対処(Does not have minimum availability)
事象
ブラウザで以下のURLにアクセスします。
http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
そうすると
{ "kind": "Status", "apiVersion": "v1", "metadata": { }, "status": "Failure", "message": "no endpoints available for service \"https:kubernetes-dashboard:\"", "reason": "ServiceUnavailable", "code": 503 }
というレスポンスが返ってきました。GCPの管理コンソールから gihyo のクラスタのワークロード kubernetes-dashboard
を見ると、ステータスが NG
になっており、ダッシュボード Does not have minimum availability
というメッセージが表示されていました。
対処
自分のメールアドレスを管理者として登録
gcloudの認証が完了している前提になります。以下のコマンドを実行
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user $(gcloud config get-value account) clusterrolebinding.rbac.authorization.k8s.io/cluster-admin-binding created
管理者権限の追加
- service-account.yaml
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: admin-user roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: admin-user namespace: kube-system
$ kubectl apply -f service-account.yaml
ログイン時に管理者権限のトークンを発行
$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}') Name: admin-user-token-9dkb5 Namespace: kube-system Labels: <none> Annotations: kubernetes.io/service-account.name=admin-user kubernetes.io/service-account.uid=ab006c5f-3ce6-11e9-9e1c-42010a920134 Type: kubernetes.io/service-account-token Data ==== ca.crt: 1119 bytes namespace: 11 bytes token: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX....(略)
上記をすると、ログインできるようになりました。