概述#

操作 Kubernetes(K8s)多半會頻繁使用 kubectl 指令,把請求送到 API Server 並從終端機讀回結果。對初學者來說,純指令的學習曲線相對陡峭。官方提供的 Kubernetes Dashboard 就是一個 Web UI 工具,能把資源狀態與常見操作以圖形化方式呈現,是本機練習階段相當實用的搭檔。

雲端環境通常會搭配雲端供應商自家的監控與整合介面(例如 GKE Dashboard、EKS Console),因此 Kubernetes Dashboard 在本機練習與小型自架環境中最常見。

部署 Dashboard#

1. 套用 Dashboard 的官方部署設定#

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

這份 YAML 會建立 Dashboard 專用的 Namespace、ServiceAccount、Deployment 與 Service。

2. 確認 Pod 是否啟動#

kubectl get pod -n kubernetes-dashboard

確認 Dashboard 相關的 Pod 進入 Running 狀態後,就可以準備存取它。

3. 開啟 API Server 代理#

kubectl proxy

執行後終端機會顯示:

Starting to serve on 127.0.0.1:8001

接著從瀏覽器開啟下面的網址即可進入 Dashboard 登入頁:

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/

此時頁面會要求輸入 Token。

建立登入用的 Token#

Dashboard 的登入頁需要一組具備權限的 Token。下列 YAML 會建立一組 ClusterRoleBinding,將 kube-system Namespace 中的 default ServiceAccount 綁定到 cluster-admin 角色,並建立對應的 Secret:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kube-system-default
  labels:
    k8s-app: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: default
    namespace: kube-system

---
apiVersion: v1
kind: Secret
metadata:
  name: default
  namespace: kube-system
  labels:
    k8s-app: kube-system
  annotations:
    kubernetes.io/service-account.name: default
type: kubernetes.io/service-account-token

可以直接以 heredoc 的方式套用:

kubectl apply -f - <<EOF
# 上述 YAML 內容貼到這裡
EOF

cluster-admin 是叢集中權限最高的角色。本範例僅適用於本機練習環境,正式環境應依最小權限原則建立專屬 ServiceAccount 與較嚴謹的 Role。

取得並使用 Token#

在 macOS 上可以用下列指令把 Token 取出,並寫入 kubectl 的 credentials:

TOKEN=$(kubectl -n kube-system describe secret default | awk '$1=="token:"{print $2}')

kubectl config set-credentials docker-desktop --token="${TOKEN}"

echo $TOKEN

複製 echo 印出的字串,貼回 Dashboard 登入頁,即可進入主介面,看到所有 Namespace、Workload、Service 等資源的視覺化清單。

Dashboard 的價值#

對於剛接觸 Kubernetes 的人,Dashboard 不只能省去記憶大量 kubectl 子命令,還能:

  • 直接從介面查看 Pod 的記錄、資源使用、重啟次數。
  • 反向學習常見指令:點選按鈕的動作其實對應某個 kubectl 操作,從 UI 上熟悉之後再回到指令列會更有感覺。
  • 提供另一個視角驗證 YAML 設定是否如預期生效。

當然,純指令派的工程師可能會認為 GUI「寵壞了使用者」。實務上,Dashboard 與 kubectl 並非互斥,兩者搭配才能讓學習路徑更平緩。

原文出處#

  • GitHub:https://github.com/MikeHsu0618/2022-ithelp/tree/main/Day5
  • iThome:https://ithelp.ithome.com.tw/articles/10287935