k9s 概述——Kubernetes 的高級終端界面

k9s 概述——Kubernetes 的高級終端界面

K9s 提供與 Kubernetes 集群交互的終端用戶界面。 這個開源項目的目標是使在 K8s 中導航、監控和管理應用程序變得容易。 K9s 持續監控 Kubernetes 中的變化,並提供快速命令來處理受監控的資源。

該項目是用 Go 編寫的,已經存在了一年半多:第一次提交是在 1 年 2019 月 9000 日進行的。 在撰寫本文時,有 XNUMX 多顆星星 GitHub上 和大約 80 名貢獻者。 看看k9s能做什麼?

安裝和啟動

這是最容易作為 Docker 鏡像運行的客戶端(相對於 Kubernetes 集群)應用程序:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

對於某些 Linux 發行版和其他操作系統,也有即裝即用的 . 一般來說,對於Linux系統,可以安裝一個二進製文件:

sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf -  -C /tmp/
sudo mv /tmp/k9s /usr/local/bin

K8s 集群本身沒有具體要求。 從評論來看,該應用程序還適用於舊版本的 Kubernetes,例如 1.12。

該應用程序使用標準配置啟動 .kube/config - 類似於它是如何做的 kubectl.

導航

默認情況下,將打開一個窗口,其中包含為上下文指定的默認命名空間。 也就是說,如果你寫 kubectl config set-context --current --namespace=test,然後命名空間將打開 test. (有關更改上下文/名稱空間的信息,請參見下文。)

k9s 概述——Kubernetes 的高級終端界面

命令模式 通過按“:”完成。 之後就可以通過命令控制k9s的運行——比如查看StatefulSets列表(在當前命名空間下),可以輸入 :sts.

k9s 概述——Kubernetes 的高級終端界面

對於其他一些 Kubernetes 資源:

  • :ns ——命名空間;
  • :deploy ——部署;
  • :ing — 入口;
  • :svc - 服務。

要顯示可供查看的資源類型的完整列表,有一個命令 :aliases.

在當前窗口中通過熱鍵組合查看可用命令列表也很方便:為此,只需單擊“?”。

k9s 概述——Kubernetes 的高級終端界面

在k9s中也有 搜索模式, 去那裡輸入“/”就足夠了。 使用它,對當前“窗口”的內容進行搜索。 假設您之前輸入過 :ns,您打開了一個命名空間列表。 如果它們太多,那麼為了不向下滾動很長時間,在帶有名稱空間的窗口中輸入就足夠了 /mynamespace.

要按標籤搜索,您可以選擇所需命名空間中的所有 pod,然後輸入,例如, / -l app=whoami. 我們將獲得帶有此標籤的 pod 列表:

k9s 概述——Kubernetes 的高級終端界面

搜索適用於各種窗口,包括日誌、查看 YAML 清單和 describe 有關資源 - 有關這些功能的更多詳細信息,請參見下文。

整體導航流程是什麼樣的?

使用命令 :ctx 你可以選擇一個上下文:

k9s 概述——Kubernetes 的高級終端界面

要選擇命名空間,有已經提到的命令 :ns, 然後您可以使用搜索來搜索​​所需的空間: /test.

如果我們現在選擇我們感興趣的資源(例如,同一個 StatefulSet),則會為其顯示相應的信息:有多少個 Pod 正在運行以及有關它們的簡要信息。

k9s 概述——Kubernetes 的高級終端界面

可能只對 pod 感興趣 - 然後輸入就足夠了 :pod. 對於 ConfigMaps (:cm - 對於這些資源的列表),你可以選擇感興趣的對象並點擊“u”,之後K9s會告訴你具體是誰使用它(這個CM)。

查看資源的另一個方便的功能是他們的 “x-ray”(X 射線視圖). 該模式由命令調用 :xray RESOURCE 並且......展示它是如何工作的比解釋更容易。 這是 StatefulSets 的示例:

k9s 概述——Kubernetes 的高級終端界面
(這些資源中的每一個都可以編輯、更改、製作 describe.)

這是使用 Ingress 的部署:

k9s 概述——Kubernetes 的高級終端界面

使用資源

您可以獲取有關 YAML 或其中每個資源的信息 describe 通過按相應的鍵盤快捷鍵(分別為“y”和“d”)。 當然,還有更多基本操作:由於界面中方便的“標題”(按 Ctrl + e 隱藏),它們的列表和鍵盤快捷鍵始終可見。

k9s 概述——Kubernetes 的高級終端界面

編輯任何資源(選擇後為“e”)時,將打開環境變量中定義的文本編輯器(export EDITOR=vim).

這是資源的詳細描述(describe):

k9s 概述——Kubernetes 的高級終端界面

可以使用熟悉的鍵盤快捷鍵 Ctrl + s 保存此輸出(或查看 YAML 資源清單的輸出)。 從K9s消息中可以知道它會被保存在哪裡:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

在刪除系統標籤和註釋後,您還可以從創建的備份文件中恢復資源。 為此,您需要與他們一起進入目錄(:dir /tmp), 然後選擇所需的文件並應用 apply.

順便說一句,如果當前 ReplicaSet 出現問題,您可以隨時回滾到之前的 ReplicaSet。 為此,選擇所需的 RS (:rs 他們的名單):

k9s 概述——Kubernetes 的高級終端界面

... 並使用 Ctrl + l 回滾。 我們應該得到一個一切順利的通知:

k9s/whoami-5cfbdbb469 successfully rolled back

要縮放副本,只需單擊“s”(縮放)並選擇所需的實例數:

k9s 概述——Kubernetes 的高級終端界面

您可以使用 shell 輸入任何容器:為此,轉到所需的 pod,單擊“s”(shell)並選擇容器。

其他功能

當然,也支持查看日誌(“l”代表選擇的資源)。 並且為了查看新日誌,無需不斷按 Enter:標記(“m”)就足夠了,然後只跟踪新消息。

k9s 概述——Kubernetes 的高級終端界面

同樣在同一窗口中,您可以選擇日誌輸出的時間範圍:

  • 鍵“1” - 1分鐘;
  • “2”——5分鐘;
  • “3”——15分鐘;
  • “4”——30分鐘;
  • “5”——1 小時;
  • “0”——在 pod 的整個生命週期內。

特殊操作模式脈衝(命令 :pulse) 顯示有關 Kubernetes 集群的一般信息:

k9s 概述——Kubernetes 的高級終端界面

在其中您可以看到資源的數量及其狀態(綠色顯示那些具有狀態 Running).

K9s 的另一個很酷的特性叫做 大力水手. 它檢查所有資源的某些正確性標準,並顯示結果“評級”和解釋。 例如,您可以看到沒有足夠的樣本或限制,並且某些容器可以以 root 身份運行...

k9s 概述——Kubernetes 的高級終端界面

有基本的 Helm 支持。 例如,您可以通過以下方式查看集群中部署的版本:

:helm all # все
:helm $namespace # в конкретном пространстве имен

基準

甚至內置於 K9s 中 是一個簡單的 HTTP 服務器負載生成器,是眾所周知的 ab (ApacheBench) 的替代品。

要啟用它,您需要在 pod 中啟用端口轉發。 為此,請選擇 pod 並按 Shift + f,使用“pf”別名轉到端口轉發子菜單。

k9s 概述——Kubernetes 的高級終端界面

選擇端口並按 Ctrl + b 後,基準測試本身將開始。 他的工作結果存儲在 /tmp 並可供以後在 K9s 中查看。

k9s 概述——Kubernetes 的高級終端界面
k9s 概述——Kubernetes 的高級終端界面

要更改基準測試的配置,您需要創建一個文件 $HOME/.k9s/bench-<my_context>.yml (為每個集群確定)。

注意:目錄中所有 YAML 文件的擴展名很重要 .k9s 正是 .yml (.yaml 無法正常工作)。

配置示例:

benchmarks:
  defaults:
    # Количество потоков
    concurrency: 2
    # Количество запросов
    requests: 1000
  containers:
    # Настройки для контейнера с бенчмарком
    # Контейнер определяется как namespace/pod-name:container-name
    default/nginx:nginx:
      concurrency: 2
      requests: 10000
      http:
        path: /
        method: POST
        body:
          {"foo":"bar"}
        header:
          Accept:
            - text/html
          Content-Type:
            - application/json
 services:
    # Можно проводить бенчмарк на сервисах типа NodePort и LoadBalancer
    # Синтаксис: namespace/service-name
    default/nginx:
      concurrency: 5
      requests: 500
      http:
        method: GET
        path: /auth
      auth:
        user: flant
        password: s3cr3tp455w0rd

接口

通過創建文件修改資源列表列的外觀 $HOME/.k9s/views.yml. 其內容示例:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

是的,沒有足夠的標籤列,有 項目中的問題.

按列排序是通過鍵盤快捷鍵進行的:

  • Shift + n - 按名稱;
  • Shift + o - 按節點;
  • Shift + i - 按IP;
  • Shift + a - 按容器的生命週期;
  • Shift + t - 按重啟次數;
  • Shift + r - 按就緒狀態;
  • Shift + c - 按 CPU 消耗;
  • Shift + m - 按內存消耗。

如果有人不喜歡默認的配色方案,K9s 甚至支持 皮膚. 提供現成的示例(7 個) 這裡. 這是其中一種皮膚的示例 (在海軍):

k9s 概述——Kubernetes 的高級終端界面

插件

最後,該 插件 允許您擴展 K9s 的功能。 我自己在我的工作中只使用了其中一個 - kubectl get all -n $namespace.

看起來像這樣。 創建一個文件 $HOME/.k9s/plugin.yml 內容如下:

plugin:
 get-all:
   shortCut: g    
   confirm: false    
   description: get all
   scopes:
   - all
   command: sh
   background: false
   args:
   - -c
   - "kubectl -n $NAMESPACE get all -o wide | less"

現在您可以轉到命名空間並按“g”以執行相應的命令:

k9s 概述——Kubernetes 的高級終端界面

例如,在插件中有與 kubectl-jq 的集成和用於查看日誌的實用程序 嚴肅.

結論

根據我的口味,事實證明 K9s 使用起來非常方便:你可以很快習慣於在不使用它的情況下尋找你需要的一切。 kubectl. 我對日誌的視圖及其保存、資源的快速編輯、總體工作速度*感到滿意,事實證明大力水手模式很有用。 特別值得一提的是創建插件和修改應用程序以滿足您的需求的能力。

* 雖然,日誌量很大,我也注意到K9s運行緩慢。 在這種情況下,該實用程序會“吃掉”Intel Xeon E2xx 的 312 個內核,甚至可能會死機。

目前缺少什麼? 無需轉到目錄即可快速回滾到以前的版本(我們不是在談論 RS)。 此外,恢復僅發生在 資源:如果刪除註釋或標籤,則必須刪除並恢復整個資源(這是您需要轉到目錄的位置)。 另一件小事 - 此類保存的“備份”沒有足夠的日期。

聚苯乙烯

另請閱讀我們的博客:

來源: www.habr.com

添加評論