2021年3月11日木曜日

k8s admin dashboard をデプロイする方法

概要

kubeadm など自分で構築した環境にデプロイしてみます

環境

  • k8s 1.19.3
  • admin UI 2.0.0

マニフェストダウンロード

  • wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml

Service 編集 NodePort 化

  • vim recommended.yaml
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort # <- ここを追記
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

デプロイ

  • kubectl apply -f recommended.yaml

Service 確認

  • kubectl get svc -n kubernetes-dashboard
NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
dashboard-metrics-scraper   ClusterIP   10.105.49.239    <none>        8000/TCP        11s
kubernetes-dashboard        NodePort    10.105.192.142   <none>        443:31574/TCP   11s

ノードのIP:31574 にアクセスするとダッシュボードにアクセスできます

ログインユーザの作成

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard
EOF
cat <<EOF | kubectl apply -f -
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
EOF
  • kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template='{{printf "%s\n" .data.token | base64decode}}{{"\n"}}'

ここで表示されるトークンを使ってログインできます

最後に

NodePort 化しないで Ingress を使っても OK です

おまけ: metrics-server もデプロイする

  • kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

これで dashbord で CPU とメモリのメトリックが見れるようになります
もし tls 関連でエラーが出てうまく metrics-server がデプロイできない場合は以下を試してください

  • kubectl edit deploy -n kube-system metrics-server
... 以下抜粋
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: metrics-server
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        - --kubelet-insecure-tls # <- ここを追加
        image: k8s.gcr.io/metrics-server/metrics-server:v0.4.2

参考サイト

0 件のコメント:

コメントを投稿