技術メモ

技術メモ

ラフなメモ

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....(略)

上記をすると、ログインできるようになりました。