本週四晚上8點, K3s技術實踐訓練營第三期將準時開播!Rancher中國研發團隊出品的 IoT設備管理開源項目 Octopus 首次線上demo啦!快來一睹芳容!

掃描下方二維碼即可報名:

最近,我丈夫即將要去面試,他要在電腦上運行一些基本命令。他對面試很焦慮,但他學習和記憶事物的最好方法一直是把他不知道的東西等同於他非常熟悉的東西。因爲我們的談話發生逛超市期間,試圖決定當晚做什麼菜之後,突然啓發了我把kubectl和Helm命令等同於一次普通的超市購物之行,於是這篇文章就誕生了。

首先,我先簡單介紹一下Helm和kubectl。

Helm是一個在Kubernetes中用於管理應用程序的工具。你可以通過應用程序地信息簡單地部署chart並允許它們在你的Kubernetes環境中啓動並且預配置,這一過程僅需幾分鐘。當你正在學習一些新東西時,查看chart示例總是很有幫助,你可以通過實例瞭解它們是如何使用的,所以如果你有時間的話可以看看這些chart:

https://github.com/helm/charts/tree/master/stable

kubectl是Kubernetes環境中的命令行交互工具,你可以使用它配置和管理你的集羣。它確實需要一些配置才能在環境中工作,建議你仔細查看文檔以確定你所需的配置:

https://kubernetes.io/docs/reference/kubectl/overview/

我將在例子中使用命名空間,如果你想詳細瞭解命名空間的入門知識可以查看我們的往期文章: 超長乾貨 | Kubernetes命名空間詳解

既然我們已經瞭解了所有基本概念,那麼讓我們開始瞭解kubectl和Helm的基本命令吧!

購物前的準備:Helm list

一般你去超市之前第一件事是做什麼?如果你早有逛超市的計劃,那麼你應該會先列出一個購物清單(list)。與此相似,list也是我要介紹的第一個基本的Helm命令。

在一個使用Helm部署的應用程序,list提供了該應用程序當前版本的詳細信息。在本例中,我有一個部署的應用程序——Jenkins CI/CD應用程序。運行基本的list命令一般都在默認的命名空間中,由於我沒有在該命名空間中部署任何應用程序,因此沒有任何輸出:

$ helm list

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

但是,如果我使用一個額外的flag運行該命令,我的應用程序及其信息將會顯示出來:

$ helm list --all-namespaces

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

jenkins jenkins 1 2020-01-18 16:18:07 EST deployed jenkins-1.9.4 lts

最後,我可以讓list命令只檢查我想要的命名空間的信息:

$ helm list --namespace jenkins

NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

jenkins jenkins 1 2020-01-18 16:18:07 EST deployed jenkins-1.9.4 lts

現在我有了一個列表,並且清晰地瞭解到列表的內容,那麼我可以使用get命令獲取我的項目了。先從Kubernetes集羣說起,我可以從它那裏得到什麼?

獲取商品狀態:Kubectl get

Kubectl get命令可以幫助你獲取Kubernetes中許多組件的信息,包括pod、節點和命名空間等。同樣,如果沒有命名空間flag,你所獲得的信息一般都是默認的命名空間信息。首先,我將獲取集羣中的命名空間,看看其中運行的是什麼:

$ kubectl get namespaces

NAME STATUS AGE

default Active 53m

jenkins Active 44m

kube-node-lease Active 53m

kube-public Active 53m

kube-system Active 53m

現在在我的環境中有許多正在運行的命名空間,我將獲取節點並查看有多少個節點正在運行:

$ kubectl get nodes

NAME STATUS ROLES AGE VERSION

minikube Ready master 55m v1.16.2

可以看出,我有一個節點已經啓動並且正在運行,主要因爲我的minikube正運行在一個小型server上。想要獲取一個節點上正在運行的pod信息,請輸入:

$ kubectl get pods

No resources found in default namespace.

Oops,它是空的。讓我加上具體的命名空間信息試試看:

$ kubectl get pods --namespace jenkins

NAME READY STATUS RESTARTS AGE

jenkins-7fc688c874-mh7gv 1/1 Running 0 40m

Good news!該命名空間中有一個pod,它尚未被重啓並且已經運行了40分鐘。既然我已經知道了這個pod已經啓動,那麼我想查看我可以從Helm中獲得什麼。

取商品信息: Helm get

Helm get略微複雜一些,因爲get命令所需的不僅是一個應用程序的名字,並且你可以從應用程序中請求多個東西。我將從獲取用於構建應用程序的值開始,然後我會展示get all的一個代碼段,它提供了與應用程序相關的所有數據:

$ helm get values jenkins -n jenkins

USER-SUPPLIED VALUES:

null

因爲我只做了一個非常小的穩定版安裝,所以配置沒有改變。如果我運行all命令,我就會得到chart中的所有內容:

$ helm get all jenkins -n jenkins

這將產生大量的數據,所以我建議你保留一份Helm chart的副本,以便你可以查看chart中的模板。我還創建了自己的值,以查看我所擁有的內容。

現在我的購物車裏已經有了所有需要的東西,我開始檢查描述它們的標籤。這些例子只與kubectl有關,它們描述了我通過Helm部署的內容。

瞭解所需商品描述:Kubectl describe

就像我使用get命令一樣,它可以描述Kubernetes中的任何東西。我將把我的示例限制在命名空間、pod和節點上,因爲我知道我需要操作每一個組件,所以獲取描述並不困難。

$ kubectl describe ns jenkins

Name: jenkins

Labels: <none>

Annotations: <none>

Status: Active

No resource quota.

No resource limits.

我可以看到我的命名空間的名稱並且它處於active狀態,而且沒有資源或者quote的限制。

使用describe pod命令將會輸出大量信息,所以我僅提供一小段輸出。如果你運行該命令時沒有添加pod名稱,那麼它將返回該命名空間中所有Pod的信息,信息量極大。所以,請確保你在使用該命令時包含了pod名稱,例如:

$ kubectl describe pods jenkins-7fc688c874-mh7gv --namespace jenkins

以上片段提供了容器的狀態、容器的管理方式、標籤(label)和pod中使用的鏡像。在以上簡略的輸出中不包含資源請求和限制以及init容器和應用在Helm值文件中的存儲卷信息等數據。如果你的應用程序由於資源不足而崩潰,那麼剛剛提到的這些數據是有用的,因爲配置好的init容器所運行的配置預腳本,或生成的隱藏密碼不會存儲在純文本YAML文件中。

最後,我將使用describe node命令來查看節點信息。由於本例中僅有一個節點,名爲minikube,如果在你的環境中有多個節點,你必須在命令中包含指定的節點名稱。

與pod一樣,節點命令會產生大量數據,因此我僅僅貼出一小段輸出:

$ kubectl describe node minikube

請注意describe node是比較重要的基本命令之一。正如該圖所示,該命令返回的統計數據表明了節點何時耗盡資源,這些數據對於提醒你何時需要擴大規模(如果你的環境中沒有彈性伸縮)是非常有意義的。其他不在該代碼段輸出中的數據包括對所有資源和限制所做的請求的百分比,以及資源的週期和分配。

最終檢查

通過這些命令,我已經完成了我的採購並獲得了我所尋找的所有東西。希望這些基本的命令也能夠在你的Kubernetes之旅中幫助到你。

建議你經常使用這些命令行,並且可以通過運行以下命令,在幫助部分學習flag的速記:

$ helm --help

以及

$ kubectl -h

薯條和番茄醬

有些東西就像薯條和番茄醬一樣相配,例如Helm和kubectl。

我經常在我的環境中使用這些工具。因爲它們在很多地方都有相似之處,所以在使用一個之後,我通常需要繼續使用另一個。試試它們一起使用,看看它們能爲你做什麼。

推薦閱讀

GitOps初階指南:將DevOps擴展至K8S

5個規則,確保你的微服務優化運行

如何選出適合自己的管理Helm Chart的最佳方式?

About Rancher Labs

Rancher Labs由CloudStack之父梁勝創建。旗艦產品Rancher是一個開源的企業級Kubernetes管理平臺,實現了Kubernetes集羣在混合雲+本地數據中心的集中部署與管理。Rancher一向因操作體驗的直觀、極簡備受用戶青睞,被Forrester評爲2018年全球容器管理平臺領導廠商,被Gartner評爲2017年全球最酷的雲基礎設施供應商。

目前Rancher在全球擁有超過三億的核心鏡像下載量,並擁有包括中國聯通、中國平安、中國人壽、上汽集團、三星、西門子、WWK保險集團、澳電訊公司、德國鐵路、廈門航空、新東方等全球著名企業在內的共40000家企業客戶。

點擊【閱讀原文】,看Octopus線上首秀!

↓↓↓

相關文章