適用於初學者的基本 kubectl 和 Helm 命令

最近,面試時需要在計算機上運行一些基本命令。對這場面試感到焦慮,學習和記住事情的最好方法是將不瞭解的事物比喻為非常熟悉的事物。因為我們的談話是在我逛雜貨店試圖決定當晚要烹飪的食物之後進行的,所以這啟發我用一次去雜貨店的行程來介紹 kubectl 和 helm 命令。

Helm(“舵輪”)是在 Kubernetes(來自希臘語,意思是“舵手” 或 “領航員”)中管理應用程序的工具。你可以輕鬆地使用你的應用程序信息來部署“海圖chart”,從而可以在你的 Kubernetes 環境中幾分鐘之內讓它們就緒並預配置好。在學習新知識時,查看示例的“海圖”以瞭解其用法總是很有幫助的,因此,如果有時間,請查看這些成型的“海圖”。(LCTT 譯註:Kubernetes 生態中大量使用了和航海有關的比喻,因此本文在翻譯時也採用了這些比喻)

kubectl 是與 Kubernetes 環境交互的命令行界面,允許你配置和管理集群。它需要一些配置才能在環境中工作,因此請仔細閱讀其文檔以瞭解你需要做什麼。

我會在示例中使用命名空間,你可以在我的文章《Kubernetes 命名空間入門》中瞭解它。

現在我們已經準備好了,讓我們開始 kubectl和 helm 基本命令的購物之旅!

用 Helm 列出清單

你去商店之前要做的第一件事是什麼?好吧,如果你做事有條理,會創建一個“清單”。同樣,這是我將解釋的第一個基本的 Helm 命令。

在一個用 Helm 部署的應用程序中,list 命令提供有關應用程序當前版本的詳細信息。在此示例中,我有一個已部署的應用程序:Jenkins CI/CD 應用程序。運行基本的 list 命令總是會顯示默認的命名空間。由於我沒有在默認的命名空間中部署任何內容,因此不會顯示任何內容:

<code>$helm listNAME    NAMESPACE    REVISION    UPDATED    STATUS    CHART    APP VERSION/<code>

但是,如果運行帶有額外標誌的命令,則會顯示我的應用程序和信息:

<code>$helm list --all-namespacesNAME     NAMESPACE  REVISION  UPDATED                   STATUS      CHART           APP  VERSIONjenkins  jenkins        1         2020-01-18 16:18:07 EST   deployed    jenkins-1.9.4   lts/<code>

最後,我可以指示 list 命令只檢查我想從中獲取信息的命名空間:

<code>$helm list --namespace jenkinsNAME     NAMESPACE  REVISION  UPDATED                   STATUS    CHART          APP VERSIONjenkins    jenkins      1              2020-01-18 16:18:07 EST  deployed  jenkins-1.9.4  lts    /<code>

現在我有了一個清單,並且知道該清單上有什麼,我可以使用 get 命令來“獲取”我的物品!我會從 Kubernetes 集群開始,看看我能從中獲取到什麼?

用 Kubectl 獲取物品

kubectl get 命令提供了有關 Kubernetes 中許多事物的信息,包括“吊艙Pod”、節點和命名空間。同樣,如果沒有指定命名空間標誌,就會使用默認的命名空間。首先,我獲取集群中的命名空間以查看正在運行的命名空間:

<code>$kubectl get namespacesNAME             STATUS   AGEdefault          Active   53mjenkins          Active   44mkube-node-lease  Active   53mkube-public      Active   53mkube-system      Active   53m/<code>

現在我已經知道了在我的環境中運行的有哪些命名空間了,接下來獲取節點並查看有多少個節點正在運行:

<code>$kubectl get nodesNAME       STATUS   ROLES       AGE   VERSIONminikube   Ready    master  55m   v1.16.2/<code>

我有一個節點正在運行,這主要是因為我的 Minikube 運行在一臺小型服務器上。要得到在我的這一個節點上運行的“吊艙”可以這樣:

<code>$kubectl get podsNo resources found in default namespace./<code>

啊哦,它是空的。我將通過以下方式獲取 Jenkins 命名空間中的內容:

<code>$kubectl get pods --namespace jenkinsNAME                      READY  STATUS   RESTARTS  AGEjenkins-7fc688c874-mh7gv  1/1    Running  0         40m/<code>

好消息!這裡發現了一個“吊艙”,它還沒有重新啟動過,已運行了 40 分鐘了。好的,如今我知道“吊艙”已經裝好,所以我想看看用 Helm 命令可以得到什麼。

用 Helm 獲取信息

helm get 命令稍微複雜一點,因為這個“獲取”命令所需要的不僅僅是一個應用程序名稱,而且你可以從應用程序中請求多個內容。我會從獲取用於製作該應用程序的值開始,然後展示“獲取全部”的操作結果的片段,該操作將提供與該應用程序相關的所有數據。

<code>$helm get values jenkins -n jenkinsUSER-SUPPLIED VALUES:null/<code>

由於我只安裝了最小限度的穩定版,因此配置沒有更改。如果我運行“獲取全部”命令,我將得到所有的“海圖”:

<code>$helm get all jenkins -n jenkins/<code>
適用於初學者的基本 kubectl 和 Helm 命令

output from helm get all command

這會產生大量數據,因此我始終建議保留一份 Helm “海圖”的副本,以便你可以查看“海圖”中的模板。我還創建自己的值來了解自己所擁有的。

現在,我把所有的商品都放在購物車中了,我會檢查一下“描述”它們包含什麼的標籤。這些示例僅與 kubectl 命令有關,它們描述了我通過 Helm 部署的內容。

用 kubectl 查看描述

正如我使用“獲取”命令(該命令可以描述 Kubernetes 中的幾乎所有內容)所做的那樣,我將示例限定到命名空間、“吊艙”和節點上。由於我知道它們每一個是什麼,因此這很容易。

<code>$kubectl describe ns jenkinsName:           jenkinsLabels:         <none>Annotations:  <none>Status:         ActiveNo resource quota.No resource limits./<none>/<none>/<code>

我可以看到我的命名空間的名稱,並且它是活動的,沒有資源或限額限制。

describe pods 命令會產生大量信息,因此我這裡提供的是一小段輸出。如果你在不使用“吊艙”名稱的情況下運行該命令,它將返回名稱空間中所有“吊艙”的信息,這可能會很麻煩。因此,請確保在此命令中始終包含“吊艙”名稱。例如:

<code>$kubectl describe pods jenkins-7fc688c874-mh7gv --namespace jenkins/<code>
適用於初學者的基本 kubectl 和 Helm 命令

output of kubectl-describe-pods

這會提供容器的狀態、管理方式、標籤以及“吊艙”中所使用的鏡像(還有很多其它信息)。沒有在這個簡化過的輸出中包括的數據有:在 Helm 配置值文件中應用的各種條件下的資源請求和限制、初始化容器和存儲卷信息。如果你的應用程序由於資源不足而崩潰,或者是一個需要運行前置腳本進行配置的初始配置容器,或者生成不應該存儲於純文本 YAML 文件中的隱藏密碼,則此數據很有用。

最後,我將使用 describe node 命令,當然,它是用來描述節點的。由於本示例只有一個名為 Minikube 的示例,因此我將使用這個名字。如果你的環境中有多個節點,則必須包含你想查找的的節點名稱。

與“吊艙”一樣,這個節點的命令會產生大量數據,因此我將僅包括輸出片段。

<code>$kubectl describe node minikube/<code>
適用於初學者的基本 kubectl 和 Helm 命令

output of kubectl describe node

注意,describe node 是更重要的基本命令之一。如此圖所示,該命令返回統計信息,該信息指示節點何時資源用盡,並且該數據非常適合在需要擴展時(如果你的環境中沒有自動擴展)向你發出警報。此輸出片段中未包含的其它內容包括:對所有資源和限制的請求所佔的百分比,以及資源的使用期限和分配(例如,對於我的應用程序而言)。

買單

使用這些命令,我完成了“購物”並得到了我想要的一切。希望這些基本命令也能在你使用 Kubernetes 的日常工作中提供幫助。

我鼓勵你經常使用命令行並學習“幫助”部分中的速記標誌,你可以通過運行以下命令來查看這些標誌:

<code>$helm --help/<code>

<code>$kubectl -h/<code>

花生醬和果凍

有些東西像花生醬和果凍一樣混在一起。Helm 和 kubectl 就有點像那樣交錯在一起。

我經常在自己的環境中使用這些工具。因為它們在很多地方都有很多相似之處,所以在使用其中一個之後,我通常需要跟進另一個。例如,我可以進行 Helm 部署,並使用 kubectl 觀察它是否失敗。一起試試它們,看看它們能為你做什麼。


分享到:


相關文章: