該項目是用 Go 編寫的,已經存在了一年半多:第一次提交是在 1 年 2019 月 9000 日進行的。 在撰寫本文時,有 XNUMX 多顆星星
安裝和啟動
這是最容易作為 Docker 鏡像運行的客戶端(相對於 Kubernetes 集群)應用程序:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
對於某些 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的運行——比如查看StatefulSets列表(在當前命名空間下),可以輸入 :sts
.
對於其他一些 Kubernetes 資源:
-
:ns
——命名空間; -
:deploy
——部署; -
:ing
— 入口; -
:svc
- 服務。
要顯示可供查看的資源類型的完整列表,有一個命令 :aliases
.
在當前窗口中通過熱鍵組合查看可用命令列表也很方便:為此,只需單擊“?”。
在k9s中也有 搜索模式, 去那裡輸入“/”就足夠了。 使用它,對當前“窗口”的內容進行搜索。 假設您之前輸入過 :ns
,您打開了一個命名空間列表。 如果它們太多,那麼為了不向下滾動很長時間,在帶有名稱空間的窗口中輸入就足夠了 /mynamespace
.
要按標籤搜索,您可以選擇所需命名空間中的所有 pod,然後輸入,例如, / -l app=whoami
. 我們將獲得帶有此標籤的 pod 列表:
搜索適用於各種窗口,包括日誌、查看 YAML 清單和 describe
有關資源 - 有關這些功能的更多詳細信息,請參見下文。
整體導航流程是什麼樣的?
使用命令 :ctx
你可以選擇一個上下文:
要選擇命名空間,有已經提到的命令 :ns
, 然後您可以使用搜索來搜索所需的空間: /test
.
如果我們現在選擇我們感興趣的資源(例如,同一個 StatefulSet),則會為其顯示相應的信息:有多少個 Pod 正在運行以及有關它們的簡要信息。
可能只對 pod 感興趣 - 然後輸入就足夠了 :pod
. 對於 ConfigMaps (:cm
- 對於這些資源的列表),你可以選擇感興趣的對象並點擊“u”,之後K9s會告訴你具體是誰使用它(這個CM)。
查看資源的另一個方便的功能是他們的 “x-ray”(X 射線視圖). 該模式由命令調用 :xray RESOURCE
並且......展示它是如何工作的比解釋更容易。 這是 StatefulSets 的示例:
(這些資源中的每一個都可以編輯、更改、製作 describe
.)
這是使用 Ingress 的部署:
使用資源
您可以獲取有關 YAML 或其中每個資源的信息 describe
通過按相應的鍵盤快捷鍵(分別為“y”和“d”)。 當然,還有更多基本操作:由於界面中方便的“標題”(按 Ctrl + e 隱藏),它們的列表和鍵盤快捷鍵始終可見。
編輯任何資源(選擇後為“e”)時,將打開環境變量中定義的文本編輯器(export EDITOR=vim
).
這是資源的詳細描述(describe
):
可以使用熟悉的鍵盤快捷鍵 Ctrl + s 保存此輸出(或查看 YAML 資源清單的輸出)。 從K9s消息中可以知道它會被保存在哪裡:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!
在刪除系統標籤和註釋後,您還可以從創建的備份文件中恢復資源。 為此,您需要與他們一起進入目錄(:dir /tmp
), 然後選擇所需的文件並應用 apply
.
順便說一句,如果當前 ReplicaSet 出現問題,您可以隨時回滾到之前的 ReplicaSet。 為此,選擇所需的 RS (:rs
他們的名單):
... 並使用 Ctrl + l 回滾。 我們應該得到一個一切順利的通知:
k9s/whoami-5cfbdbb469 successfully rolled back
要縮放副本,只需單擊“s”(縮放)並選擇所需的實例數:
您可以使用 shell 輸入任何容器:為此,轉到所需的 pod,單擊“s”(shell)並選擇容器。
其他功能
當然,也支持查看日誌(“l”代表選擇的資源)。 並且為了查看新日誌,無需不斷按 Enter:標記(“m”)就足夠了,然後只跟踪新消息。
同樣在同一窗口中,您可以選擇日誌輸出的時間範圍:
- 鍵“1” - 1分鐘;
- “2”——5分鐘;
- “3”——15分鐘;
- “4”——30分鐘;
- “5”——1 小時;
- “0”——在 pod 的整個生命週期內。
特殊操作模式脈衝(命令 :pulse
) 顯示有關 Kubernetes 集群的一般信息:
在其中您可以看到資源的數量及其狀態(綠色顯示那些具有狀態 Running
).
K9s 的另一個很酷的特性叫做 大力水手. 它檢查所有資源的某些正確性標準,並顯示結果“評級”和解釋。 例如,您可以看到沒有足夠的樣本或限制,並且某些容器可以以 root 身份運行...
有基本的 Helm 支持。 例如,您可以通過以下方式查看集群中部署的版本:
:helm all # все
:helm $namespace # в конкретном пространстве имен
基準
甚至內置於 K9s 中
要啟用它,您需要在 pod 中啟用端口轉發。 為此,請選擇 pod 並按 Shift + f,使用“pf”別名轉到端口轉發子菜單。
選擇端口並按 Ctrl + b 後,基準測試本身將開始。 他的工作結果存儲在 /tmp
並可供以後在 K9s 中查看。
要更改基準測試的配置,您需要創建一個文件 $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 甚至支持
插件
最後,該 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”以執行相應的命令:
例如,在插件中有與 kubectl-jq 的集成和用於查看日誌的實用程序
結論
根據我的口味,事實證明 K9s 使用起來非常方便:你可以很快習慣於在不使用它的情況下尋找你需要的一切。 kubectl
. 我對日誌的視圖及其保存、資源的快速編輯、總體工作速度*感到滿意,事實證明大力水手模式很有用。 特別值得一提的是創建插件和修改應用程序以滿足您的需求的能力。
* 雖然,日誌量很大,我也注意到K9s運行緩慢。 在這種情況下,該實用程序會“吃掉”Intel Xeon E2xx 的 312 個內核,甚至可能會死機。
目前缺少什麼? 無需轉到目錄即可快速回滾到以前的版本(我們不是在談論 RS)。 此外,恢復僅發生在 只 資源:如果刪除註釋或標籤,則必須刪除並恢復整個資源(這是您需要轉到目錄的位置)。 另一件小事 - 此類保存的“備份”沒有足夠的日期。
聚苯乙烯
另請閱讀我們的博客:
- «
Kubernetes 的 GUI 概述 “; - «
Kubernetes Web View 的公告(以及 Kubernetes 的其他 Web UI 的簡要概述) “; - «
kubebox 和 Kubernetes 的其他 shell “。
來源: www.habr.com