1. 程式人生 > >超實用!K8s 開發者必須知道的 6 個開源工具

超實用!K8s 開發者必須知道的 6 個開源工具


文章來源:雲原生實驗室,點選檢視原文。

導讀:Kubernetes 作為雲原生時代的“作業系統”,熟悉和使用它是每名使用者(User)的必備技能。如果你正在 Kubernetes 上工作,你需要正確的工具和技巧來確保 Kubernetes 叢集的高可用以及工作負載的穩定執行。本篇文章將為你詳細介紹 6 個實用的 Kubernetes 開源工具,千萬不要錯過。

前言

隨著 Kubernetes 的發展和演變,人們可以從內部來馴服它的無節制行為。但有些人並不情願乾等 Kubernetes 變得易於使用,並且為已投入生產的 Kubernetes 中遇到的很多常見問題制定了自己的解決方案。

這裡我們將介紹一些提高操作效率的技巧,同時列舉幾個比較有用的開源 Kubernetes 工具,這些工具以各種方式簡化 Kubernetes,包括簡化命令列互動,簡化應用程式部署語法等。

kubectl 自動補全

kubectl 這個命令列工具非常重要,與之相關的命令也很多,我們也記不住那麼多的命令,而且也會經常寫錯,所以命令自動補全是很有必要的,kubectl 工具本身就支援自動補全,只需簡單設定一下即可。

bash 使用者

大多數使用者的 shell 使用的是 bash,Linux 系統可以通過下面的命令來設定:

$ echo "source <(kubectl completion bash)" >> ~/.bashrc
$ source ~/.bashrc

如果發現不能自動補全,可以嘗試安裝 bash-completion 然後重新整理即可!

zsh 使用者

如果你使用的 shell 是 zsh,可以通過下面的命令來設定:

$ echo "source <(kubectl completion zsh)" >> ~/.zshrc
$ source ~/.zshrc

自定義 kubectl get 輸出

kubectl get 相關資源,預設輸出為 kubectl 內建,一般我們也可以使用 -o json 或者 -o yaml 檢視其完整的資源資訊。但是很多時候,我們需要關心的資訊並不全面,因此我們需要自定義輸出的列,那麼可以使用 go-template

 來進行實現。

go-template 是 golang 的一種模板,可以參考 template 的相關說明。

比如僅僅想要檢視獲取的 pods 中的各個 pod 的 uid,則可以使用以下命令:

$ kubectl get pods --all-namespaces -o go-template='{{range .items}}{{.metadata.uid}}
{{end}}'
2ea418d4-533e-11e8-b722-005056a1bc83
7178b8bf-4e93-11e8-8175-005056a1bc83
a0341475-5338-11e8-b722-005056a1bc83
...


因為 get pods 的返回結果是 List 型別,獲取的 pods 都在 items 這個的 value 中,因此需要遍歷 items,也就有了 {{range .items}}。而後通過模板選定需要展示的內容,就是 items 中的每個 {{.metadata.uid}}

這裡特別注意,要做一個特別的處理,就是要把 {{end}} 前進行換行,以便在模板中插入換行符。

當然,如果覺得這樣處理不優雅的話,也可以使用 printf 函式,在其中使用 \n 即可實現換行符的插入。

$ kubectl get pods --all-namespaces -o go-template --template='{{range .items}}{{printf "%s\n" .metadata.uid}}{{end}}'

或者可以這樣:

$ kubectl get pods --all-namespaces -o go-template --template='{{range .items}}{{.metadata.uid}}{{"\n"}}{{end}}'

其實有了 printf,就可以很容易的實現對應欄位的輸出,且樣式可以進行自己控制。比如可以這樣:

$ kubectl get pods --all-namespaces -o go-template --template='{{range .items}}{{printf "|%-20s|%-50s|%-30s|\n" .metadata.namespace .metadata.name .metadata.uid}}{{end}}'
|default             |details-v1-64b86cd49-85vks                        |2e7a2a66-533e-11e8-b722-005056a1bc83|
|default             |productpage-v1-84f77f8747-7tkwb                   |2eb4e840-533e-11e8-b722-005056a1bc83|
|default             |ratings-v1-5f46655b57-qlrxp                       |2e89f981-533e-11e8-b722-005056a1bc83|
...

下面舉兩個 go-template 高階用法的例子:

  • range 巢狀
# 列出所有容器使用的映象名
$ kubectl get pods --all-namespaces -o go-template --template='{{range .items}}{{range .spec.containers}}{{printf "%s\n" .image}}{{end}}{{end}}'
istio/examples-bookinfo-details-v1:1.5.0
istio/examples-bookinfo-productpage-v1:1.5.0
istio/examples-bookinfo-ratings-v1:1.5.0
...
  • 條件判斷
# 列出所有不可排程節點的節點名與 IP
$ kubectl get no -o go-template='{{range .items}}{{if .spec.unschedulable}}{{.metadata.name}} {{.spec.externalID}}{{"\n"}}{{end}}{{end}}'

除了使用 go-template 之外,還可以使用逗號分隔的自定義列列表打印表格:

$ kubectl -n kube-system get pods coredns-64b597b598-7547d -o custom-columns=NAME:.metadata.name,hostip:.status.hostIP
NAME                       hostip
coredns-64b597b598-7547d   192.168.123.250

也可以使用 go-template-file 自定義模板列表,模板不用通過引數傳進去,而是寫成一個檔案,然後需要指定 template 指向該檔案即可。

$ cat > test.tmpl << EOF 
NAME                      HOSTIP
metadata.name       status.hostIP
EOF
$ kubectl -n kube-system get pods coredns-64b597b598-7547d -o custom-columns-file=test.tmpl
NAME                       HOSTIP
coredns-64b597b598-7547d   192.168.123.250

互動式 Kubernetes 客戶端

Kube-prompt 可以讓你在 Kubernetes 客戶端輸入相當於互動式命令會話的東西,併為每個命令提供自動填充的背景資訊,你不必鍵入 kubectl 來為每個命令新增字首。

生成 kubectl 別名

如果你需要頻繁地使用 kubectl 和 kubernetes api 進行互動,使用別名將會為你節省大量的時間,開源專案 kubectl-aliases 可以通過程式設計的方式生成 kubectl 別名,別名生成規則如下:

  • 簡單別名示例

    kd → kubectl describe

  • 高級別名示例

    kgdepallw → kubectl get deployment --all-namespaces --watch

校驗配置檔案

如果你手動寫 Kubernetes manifest 檔案,檢查 manifest 檔案的語法是很困難的,特別是當你有多個不同版本的 Kubernetes 叢集時,確認配置檔案語法是否正確更是難上加難。

Kubeval 是一個用於校驗 Kubernetes YAML 或 JSON 配置檔案的工具,支援多個 Kubernetes 版本,可以幫助我們解決不少的麻煩。

  • 使用示例
$ kubeval nginx.yaml
The document nginx.yaml contains an invalid Deployment
---> spec.replicas: Invalid type. Expected: integer, given: string

簡化 Kubernetes 部署定義

很多人都抱怨 Kubernetes manifest 檔案的定義太複雜和冗長。它們很難寫,而且很難維護,如果能夠簡化部署定義就會極大地降低維護難度。

Kedge 提供更簡單、更簡潔的語法,然後 kedge 將其轉換為 Kubernetes manifest 檔案。

  • 使用示例


掃描下方二維碼新增小助手,與 8000 位雲原生愛好者討論技術趨勢,實戰進階!
進群暗號:公司-崗位-城市

相關推薦

實用K8s 開發者必須知道6 開源工具

文章來源:雲原生實驗室,點選檢視原文。 導讀:Kubernetes 作為雲原生時代的“作業系統”,熟悉和使用它是每名使用者(User)的必備技能。如果你正在 Kubernetes 上工作,你需要正確的工具和技巧來確保 Kubernetes 叢集的高可用以及工作負載的穩定執行。本篇文章將為你詳細介紹 6

實用6種方法教你輕鬆刪除Word空白頁

在日常工作中,我們完成了文件編輯,經常會出現一個或者多個空白頁,上面沒有任何內容,卻刪不掉,這種問題讓很多人感到頭疼,今天小編整理了以下幾種方法,輕鬆刪除文件中的空白頁,提高工作效率。 文件中出現空白頁的原因有很多,位置也都不一樣,針對具體情況有以下6種方法。 1.空白頁在最後一頁 如果

利用XShell上傳、下載文件(使用sz與rz命令),實用

rec pre xshell 命令 方法 font 所有 shel 不包含 借助XShell,使用linux命令sz可以很方便的將服務器上的文件下載到本地,使用rz命令則是把本地文件上傳到服務器。 其中,對於sz和rz的理解與記憶我用了如下的方法(很多時候容

C#開發者必須知道的13件事情

解釋 無法 返回 以及 規範 IT 可控 另一個 線程安全 1.開發流程 程序的Bug與瑕疵往往出現於開發流程當中。只要對工具善加利用,就有助於在你發布程序之前便將問題發現,或避開這些問題。 標準化代碼書寫 標準化代碼書寫可以使代碼更加易於維護,尤其是在代碼由多個開發

實用文檔小技巧:1秒圖片轉文字

pdf 應用市場 src 現在 技術 小技巧 通過 什麽 process 一張圖片放在你面前,你能聯想到什麽?照片、廣告圖、Ps,這是普通人的想法,但是我想到的卻是圖片轉文字。圖片轉文字是什麽鬼?就是通過OCR文字識別技術將圖片中的文字識別出來,轉換成可以復制、粘帖的文字

js裡的sort()對json資料(某一欄位)進行排序,實用

首先來看一下接口裡的資料,對哪一資料進行操作 { "hourList": [{ "DATA_DATE": "00", "USE_SUM": 9.58 }, { "DATA_DATE": "03", "USE_SUM": 23.18 }, { "DATA_DATE": "

【乾貨】最好的天線基礎知識,方便查詢,實用

天線作為無線電的發射和接收裝置是影響訊號強度和質量的重要裝置,其在行動通訊領域的重要性非常關鍵。通過對天線選型,天 線安裝,天線調整從而保障基站覆蓋區域的訊號強度與質量。對其的 掌握程度是網規與網優工程師的技能基本要求之一。下文重點說明天線要掌握哪些方面及其原理和影響。 1 什麼是天線? 答

高階程式設計師學習程式設計最愛用的10網站,實用

(對圖片沒配錯,畢竟要推薦一些同性交友網站了)作為一個每天都泡在電腦面前的程式設計師來說,選對一些學習的地方、和大家交流的地方就顯得尤為重要。當我們有問題的時候我們想第一時間解決,當我們想學習一門新技術的時候我們可以立馬get教程,當我們學習了一門新的技術的時候我們抑制不住自己的喜悅想要表達,當我們

實用使用IDEA外掛Alibaba Cloud Toolkit工具一鍵部署本地應用到ECS伺服器

最近看到阿里雲釋出了一款名為 Alibaba Cloud Toolkit 的外掛,可以幫助開發者高效開發並部署適合在雲端執行的應用,瞬間擊中了我的小心臟,這個對於個人開發者來說超級棒啊,終於不需要再手動 scp/ftp 上傳應用到伺服器了,連啟動的命令都是可以自行編寫的,棒棒! PS:個人開發者專案不多也不

Android Studio 常用快捷鍵(實用

其實我們沒必要一次就背下來,只需要在開發中儘量使用快捷鍵並列印一份快捷鍵表在電腦旁,經常使用和查閱,一段時間後就會形成習慣。1. Ctrl+G 同時按下Ctrl+G快捷鍵彈出快速定位框,在框中輸入行數點選OK即可快速切換到對應的行數,如圖2.17所示。2. Ctrl+E 同時按下Ctrl+E快捷鍵,彈出最近

11款面向Linux系統的備份工具實用

個人計算機或者伺服器上的備份對於防止資料丟失很重要。系統管理員每天需要處理大量的企業級資料,甚至個人計算機上的資料,所以要深入瞭解不同的備份工具。經常備份計算機上的資料是個好的做法,它可以手動完成,也可以設定成自動執行。許多備份工具擁有不同的功能特性,讓使用者可以配置備份型別

每一個C#開發者必須知道的13件事情

 1. 開發流程  程式的 Bug 與瑕疵往往出現於開發流程當中。只要對工具善加利用,就有助於在你釋出程式之前便將問題發現,或避開這些問題。  標準化程式碼書寫  標準化程式碼書寫可以使程式碼更加易於維護,尤其是在程式碼由多個開發者或團隊進行開發與維護時,這一優點更加突出。常見的強制程式碼規範化的工具有:Fx

實用小程式也可以收集資料了

在工作和上學的小夥伴,應該都遇到過需要做“調查問卷”的情況:策劃聚會活動前做調查,創業的小夥伴調查使用者需求等等。但是要想自己做一份“調查問卷”還是比較複雜的,不過今天要推薦的這款小程式,能讓我們最方便快捷的完成一份實用的“調查問卷”。 我們需要使用的是一款叫“趣問卷”

iOS 開發者必須知道的新特性

iOS 10 開發新特性 1.語音識別 蘋果官方在文件中新增了API Speech,那麼在以前我們處理語音識別非常的繁瑣甚至很多時候可能需要藉助於第三方框架處理,那麼蘋果推出了這

利用SecureCRT上傳、下載檔案(使用sz與rz命令),實用

利用SecureCRT上傳、下載檔案(使用sz與rz命令)     藉助securtCRT,使用linux命令sz可以很方便的將伺服器上的檔案下載到本地,使用rz命令則是把本地檔案上傳到伺服器。     其中,對於sz和rz的理解與記憶我用瞭如下的方法(很多時候容易搞混

看這裏移動開發者必須了解的跨平臺開發工具

core new pac 生命 ble tps 一個 HERE 原生開發 跨平臺一直是老生常談的話題,cordova、ionic、react-native、weex、kotlin-native、flutter等跨平臺框架的百花齊放,頗有一股推倒原生開發者的勢頭。本文將對當下

高效 MacBook 工作環境配置,實用

作者:正鵬 & 隃墨 http://www.xialeizhou.com/?p=71 前言 工欲善其事,必先利其器,工具永遠都是用來解決問題的,沒必要為了工具而工具,一切工具都是為了能快速準確的完成工作和學習任務而服務。 本文記錄 MacBook 整個配置過程,供新入手MacBook和覺得Ma

Python | 開發者必備的 6

reason 錯誤處理 change 下載 adt 選項 ongui ats 並不是 無論你是正在使用 Python 進行快速開發,還是在為 Python 桌面應用制作原生 UI ,或者是在優化現有的 Python 代碼,以下這些 Python 項目都是應該使用的。 Py

必須知道的前端開發工具

Here the dump of my ultimate collection of online Web development resources and directories, oriented for the Front-End users Interfaces

6 開源的家庭自己主動化工具 | Linux 中國

用這些開源軟體解決方式構建一個更智慧的家庭。 -- Jason Baker 實用的原文連結請訪問文末的“ 原文連結”獲得可點選的文內連結、全尺寸原圖和相關文章。 致謝 編譯自 | https://opensource.com/life/