帶時光機的 Kubernetes Dashboard - Kubevious

語言: CN / TW / HK

theme: smartblue highlight: a11y-dark


持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第31天,點選檢視活動詳情

Kubevious 是一個開源的 Kubernetes Dashboard,但是和我們主流的 Dashboard 卻不太一樣,可以說非常有特色,他將應用程式相關得所有配置都集中在一起,這可以大大節省操作人員得時間,其實這都不是最主要的,主要的是他具有一個 Time Machine(時光機)功能,允許我們回到之前的時間去檢視應用的錯誤資訊。

特點

其實大部分 Kubernetes 的 Dashboard 功能都是大同小異的,那麼 Kubevious 又具有哪些特點呢?

以應用為中心的視覺化方式

我們知道在 Kubernetes 中即使是一個簡單的 Hello World 程式,也會產生很多資源物件,要獲取和應用程式相關的配置是相對比較麻煩的。Kubevious 以應用程式為中心的 UI 方式來呈現整個 Kubernetes 叢集的配置,他會標識應用相關的 Deployments、ReplicaSets、Pods、Services、Ingresses、Volumes、ConfigMaps 等等資源物件,並和應用程式的一個 Box 一起顯示。

應用為中心的視覺化方式

應用為中心的視覺化方式

主螢幕使用很多 Box 渲染,每個 Box 都可以選中,也可以通過雙擊進行展開,會在右側面板顯示每個 Box 關聯的屬性和配置。

錯誤配置檢測

Kubernetes 各個元件和資源物件都是獨立配置的,所以很有可能在使用元件的時候出現一些類似於拼寫錯誤。Kubevious 就可以識別許多錯誤,比如標籤錯誤、埠丟失等等,紅色圓圈包含了子節點內的錯誤數量。

錯誤配置檢測

錯誤配置檢測

識別級聯配置

Kubernetes 中的配置是高度可重用的,微小的變化可能都會導致意想不到的後果。Kubevious 可以標識共享配置,並顯示其他從屬物件,這樣就可以一目瞭然,確保更改的級聯效應。

識別級聯配置

識別級聯配置

支援全文搜尋

當 Kubernetes 叢集物件非常多的時候,要想找到一個特定的配置也是非常浪費時間的,Kubevious 就是支援整個叢集的全文搜尋。

支援全文搜尋

支援全文搜尋

容量規劃和資源使用優化

直接通過 Kubevious 可以清楚地確定每個容器、Pod、Deployment、DaemonSet、名稱空間等佔用了多少資源。Kubevious 不僅呈現絕對資源請求值,還呈現每個節點,名稱空間和整個叢集的相對使用情況。確定哪些應用佔用名稱空間內的大部分資源。

容量規劃和資源使用優化

容量規劃和資源使用優化

許可權標識

將過多的控制權授予應用不僅增加了被黑客入侵的風險,而且還影響了節點和整個叢集的穩定性。Kubevious 會將應用及其相應的名稱空間標記為radioactive(放射性),具體來說就是它會檢查特權容器、hostPID、hostNetwork、hostIPC 等標誌,以及 mount 到一些敏感的宿主機位置上,比如 docker.sock檔案等。

許可權標識

許可權標識

時光機

這可能是我覺得最有意思的一個特性了,因為我們知道隨著應用的不斷變化,要想去跟蹤應用的各種問題是非常困難的,而 Kubevious 就可以通過時光機功能允許我們回到之前的時間點去檢視應用的配置和錯誤資訊。

時光機

時光機

安裝

Kubevious 可以在任何 Kubernetes 發現版本上進行安裝,可以使用 Helm 來快速安裝,關於 Helm 的使用可以檢視我們前面的相關文章。

$ kubectl create namespace kubevious $ git clone https://github.com/kubevious/deploy.git kubevious-deploy.git $ cd kubevious-deploy.git/kubernetes $ helm template kubevious \ --namespace kubevious \ -f kubevious/values.latest.yaml \ > kubevious.yaml

直接將 Chart 模板渲染成 Kubernetes 資源物件,渲染過後的資源物件還需要做點小小的改動,由於 Kubevious 是依賴 MySQL 的,所以我們要為 MySQL 提供一個儲存,最好的方式是在 volumeClaimTemplates 裡面提供一個可用的 StorageClass 物件,這樣就可以自動建立 PV 了,然後直接建立上面的資源物件即可:

$ kubectl apply -f kubevious.yaml

在安裝使用的過程中可能會出現資料庫和資料庫表沒有自動建立的問題,我們可以進入到資料庫中手動建立資料庫,然後將 kubevious-mysql-init-script 這個 ConfigMap 下面的 SQL 語句執行一次來手動建立表。如果遇到連線資料庫的時候出現許可權問題,同樣可以登入到資料庫中重新配置下許可權:

``` $ kubectl exec -it kubevious-mysql-0 /bin/bash -n kubevious [email protected]:/# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 838 Server version: 5.7.29-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.11 sec) mysql> FLUSH PRIVILEGES; ```

正常安裝完成後我們可以檢視對應的資源物件:

$ kubectl get pods -n kubevious NAME READY STATUS RESTARTS AGE kubevious-8467486674-252wl 1/1 Running 0 57m kubevious-mysql-0 1/1 Running 1 77m kubevious-ui-786b6d68df-jp829 1/1 Running 0 66m $ kubectl get svc -n kubevious NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubevious-mysql-svc ClusterIP None <none> 3306/TCP 3h8m kubevious-svc NodePort 10.104.101.24 <none> 4000:31651/TCP 3h8m kubevious-ui-svc NodePort 10.96.43.12 <none> 3000:32367/TCP 3h8m

預設建立的是 NodePort 型別的 Service,這個時候我們就可以通過 http://<nodeIP:32367> 訪問到 Kubevious 了。

kubevious

kubevious

不過 Kubevious 也是有一個比較大的缺陷是使用的 MySQL 資料庫來做的叢集快照,對於小規模的叢集問題不大,對於大規模的叢集來說應該效能和容量就會慢慢成為瓶頸了,專案畢竟還處於早期階段,未來還是可期的。