您好,登錄后才能下訂單哦!
對不少IT人員來說,每天與Kubernetes交互的機制一般是通過kubectl——一種命令行工具。kubectl主要用于與Kubernetes API服務器通信,以在Kubernetes中創建、更新和刪除工作負載。本教程的目的是概述您可以使用的一些常用命令,并提供管理Kubernetes的良好起點。
我們將介紹如何在您的計算機上安裝kubectl,如何與您的Kubernetes環境進行通信并執行一些常見操作。大多數常見的kubectl命令會提供某特定的操作,如創建、刪除等。此方法通常需要解釋描述Kubernetes中的對象(如POD、服務、資源等)的文件(YAML或JSON)。這些文件通常被用作模板以及環境的持續文檔,并有助于保留Kubernetes對聲明性配置的關注。命令行上給出的操作將傳遞給API服務器,然后根據需要與Kubernetes中的后端服務進行通信。
cdn.xitu.io/2019/7/12/16be3eb27ecc3d7d?w=568&h=370&f=jpeg&s=28534">
我們將介紹一些最常見的kubectl命令并提供一些示例。有關每個命令的更多詳細信息,包括所有支持的標志和子命令,請查看kubectl參考文檔:
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands。
kubectl是一個獨立的程序,因此不需要復雜的安裝過程。它是一個需要位于操作系統PATH中的單個文件。有許多方法可以獲得kubectl二進制文件,例如通過操作系統的本機包管理器或通過curl。下表中的一些示例就是如何為各種操作系統安裝kubectl:
注意隨著新版本的發布,最佳版本的kubectl for Windows將隨著時間的推移而發生變化。要查找當前最佳二進制文件,請點擊此鏈接查找最新的穩定版本,并根據需要調整上述URL:https://storage.googleapis.com/kubernetes-release/release/stable.txt
環境中使用的kubectl版本,需要與Kubernetes服務器的版本保持一致。您可以通過鍵入以下內容來查看正在使用的kubectl客戶端的版本:
kubectl在各方面都會保持與一個版本的兼容性。其中客戶端版本會比服務器版本領先一步。這為服務器版本:v1.13.4中提供的功能和命令提供了支持。如果客戶端版本不是服務器版本之后的各版本中的一個,那么在嘗試訪問相應服務器版本中可用的功能時,可能會遇到錯誤或不兼容。
kubectl 的語法使用如下:
Command(命令):指你想要執行的操作(創建、刪除等等)
Type(類別):指你正在執行命令的資源類型(Pod、Service等)
Name(名稱):對象的名稱(需區分大小寫)。如果未指定名稱,則可以獲取有關命令匹配的所有資源的信息(例如Pod)
Flags(標志):這個可以按需選擇(非必須),不過它在查找特定資源時非常有用。例如,--namespacespace可以讓你指定要在哪個特定的命名空間中執行操作。
kubectl使用配置文件來訪問Kubernetes集群。默認的kubectl配置文件位于?/ .kube / config,稱為kubeconfig文件。
kubeconfig文件組織有關集群、用戶、命名空間和身份驗證機制的信息。kubectl命令使用這些文件來查找它在選擇集群并與之通信時所需要的信息。
加載順序遵循以下規則:
如果設置了--kubeconfig標志,則僅加載給定文件。該標志只能設置一次,不會發生合并。
如果設置了$ KUBECONFIG環境變量,則根據系統的正常路徑分隔規則,將其解析為文件系統路徑列表。
否則,如果上述兩項都未設置,則使用${HOME}/.kube/config 文件,不進行任何合并。
如果您看到類似于以下內容的消息,則意味著kubectl配置不正確或無法連接到Kubernetes集群。
The?connection?to?the?server?<server-name:?port>?was?refused?-?did?you?specify?the?right?host?or?port?
你可以通過多種方式創建配置文件,具體取決于你使用何種Kubernetes發行版。以下列出的是不同的K8S發行版及其位置:
RKE
使用RKE創建Kubernetes集群時,RKE會在本地目錄中創建一個kube_config_rancher-cluster.yml文件,該文件包含使用kubectl等工具連接到新集群所需的憑據。
您可以將此文件復制到$ HOME / .kube / config,或者,如果您正在使用多個Kubernetes集群,請將KUBECONFIG環境變量設置為kube_config_rancher-cluster.yml的路徑,如下所示:
Rancher統一管理的Kubernetes集群
在Rancher中,您可以通過Web UI下載kubeconfig文件,并使用它通過kubectl連接到Kubernetes環境。
在Rancher UI中,單擊要通過kubectl連接的集群。在頁面的右上角,單擊Kubeconfig File按鈕:
單擊按鈕以詳細查看配置文件以及放置在~/.kube/config中的方向。
將配置復制到~/.kube/config后,你無需指定--kube-config文件位置,就可以運行kubectl命令:
以下我將重點介紹在典型環境中會用到的許多命令。我們將從概述集群開始,一直到探索Kubernetes環境中當前正在運行的內容的各種場景。
相信下文的內容將幫助您熟悉kubectl和典型輸出的命令。
管理kubectl配置
kubectl命令包含一些不同的命令,可用來幫助查看和管理自己的配置。這些在初始設置期間,或在你需要處理的集群集發生變化時,將非常有用。
要查看當前配置,請鍵入:
apiVersion:?v1?clusters:?-?cluster:?????certificate-authority-data:?DATA+OMITTED?????server:?https://www.<yoururl>.com/k8s/clusters/<cluster>???name:?gcpcluster?-?cluster:?????certificate-authority-data:?DATA+OMITTED?????server:?https://10.240.0.41:6443???name:?gcpcluster-k8s-1?-?cluster:?????certificate-authority-data:?DATA+OMITTED?????server:?https://10.240.0.42:6443???name:?gcpcluster-k8s-2?-?cluster:?????certificate-authority-data:?DATA+OMITTED?????server:?https://10.240.0.43:6443???name:?gcpcluster-k8s-3?contexts:?-?context:?????cluster:?gcpcluster?????namespace:?rancher?????user:?user-qkvpz???name:?gcpcluster
你將能看到的輸出內容匯總展現了你所配置的集群和及上下文。cluster鍵包含每個可用集群的列表,以及相關的連接和驗證詳細信息。contexts鍵將用戶、集群和可選的命名空間組合在一起,以形成用于與集×××互的唯一標識和使用上下文。
要獲得每個可用上下文的更簡潔摘要,你可以鍵入:
輸出的內容顯示了每個已定義上下文的詳細信息以及當前選定的上下文,由星號(*)表示。
要快速檢查當前使用的上下文,請鍵入:
雖然我們不會在本摘要中介紹它,但除此之外你還可以使用kubectl set-cluster、kubectl set-credentials和kubectl set-context以及各種標志來定義集群和上下文,不過我們在本文中就不贅述了。
要更改要連接的上下文,請使用use-context命令:
檢查集群組件的狀態
為集群選擇好適當的上下文后,可以使用get componentstatuses(縮寫為get cs)命令檢查核心主組件的狀態:
輸出的內容將顯示調度程序、控制器管理器和etcd節點的狀態以及從每個服務收集的最新消息和錯誤。如果你的集群運行不正常,這是一個很好的、進行第一次診斷檢查的機會。
可以使用cluster-info命令收集其他連接和服務信息:
Kubernetes?master?is?running?at?https://www.<yoururl>.com/k8s/clusters/<cluster>?KubeDNS?is?running?at?https://www.<yoururl>.com/k8s/clusters/<cluster>/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy?To?further?debug?and?diagnose?cluster?problems,?use?'kubectl?cluster-info?dump'.
這里,輸出顯示了我們的Kubernetes master的端點以及KubeDNS服務端點的端點。
要查看有關作為集群成員的每個單個節點的信息,需使用get nodes命令:
NAME????STATUS???ROLES??????????????????????AGE???VERSION???INTERNAL-IP???EXTERNAL-IP???OS-IMAGE???????KERNEL-VERSION????CONTAINER-RUNTIME?k8s-1???Ready????controlplane,etcd,worker???34d???v1.13.5???<IP>??????????<none>????????Ubuntu?18.10???4.18.0-1011-gcp???docker://18.9.5?k8s-2???Ready????controlplane,etcd,worker???34d???v1.13.5???<IP>??????????<none>????????Ubuntu?18.10???4.18.0-1011-gcp???docker://18.9.5?k8s-3???Ready????controlplane,etcd,worker???34d???v1.13.5???<IP>??????????<none>????????Ubuntu?18.10???4.18.0-1011-gcp???docker://18.9.5
這列出了在每個節點上運行的核心軟件的狀態、角色、連接信息和版本號。如果需要在集群節點上執行維護或登錄以調試問題,此命令可以幫助您提供所需的信息。
查看資源和事件信息
要概述集群中可用的命名空間,請使用get namespaces命令:
這顯示了當前集群中定義的命名空間分區。
要跨所有命名空間概述集群上運行的所有資源,使用以下命令:
輸出的內容會顯示部署了每個資源的命名空間信息,以及加上了資源類型前綴的資源名稱(例如上面顯示的示例中的pod)。之后,有關每個資源的就緒和運行狀態的信息將有助于確定進程是否運行正常。
要查看與資源關聯的事件,請使用get events命令:
NAMESPACE???????LAST?SEEN???TYPE??????REASON???????????????????KIND??????????????????????MESSAGE?cattle-system???9m31s???????Normal????BackOff??????????????????Pod???????????????????????Back-off?pulling?image?"miguelgt/k8s-demo:v2"?cattle-system???24m?????????Warning???Failed???????????????????Pod???????????????????????Error:?ImagePullBackOff?cattle-system???14m?????????Normal????BackOff??????????????????Pod???????????????????????Back-off?pulling?image?"miguelgt/k8s-demo:v2"?cattle-system???9m30s???????Warning???Failed???????????????????Pod???????????????????????Error:?ImagePullBackOff
輸出內容將列出資源記錄的最新事件,包括事件消息及其觸發的原因。
為了更具體地演示您在使用kubectl時可能參與的工作流程,我們將在這一部分介紹將容器部署到集群的快速方案,并將其部署到非默認命名空間中。
默認情況下,如果在未指定命名空間的情況下部署集群,kubectl會將資源放在名為default的命名空間中。如果要部署到其他名稱空間,則需要指定所需的替代項。
雖然我們可以為創建命令提供命名空間,但如果我們要使用命名空間來處理多個命令,更改上下文的方法會更為容易。更改與上下文關聯的命名空間將自動將命名空間規范應用于任何其他命令,直到更改上下文。
要更改當前上下文的命名空間,請使用帶有--currentand --namespace標志的set-context命令:
這將改變當前上下文,以自動將未來的操作應用于rancher命名空間。
接下來,我們可以創建一個名為nginx的部署,它基于默認的nginx容器鏡像運行容器。因為我們改變了我們的上下文,所以它會在rancher命名空間中運行:
您可以通過列出當前部署的pod來檢查部署是否成功:
在這里,我們可以看到Nginx部署正常運行。READY那一列顯示容器已就緒,狀態是“正在運行”,沒有出現故障。
雖然我們已經驗證了pod正在運行,但我們還沒有得到關于它部署到了哪個命名空間的信息。但是,我們可以通過添加--all-namespaces標志來稍微改變輸出:
這將顯示在每個命名空間中運行的pod,并另外添加一個NAMESPACE列,列出每個資源部署到了哪個命名空間。在這里,我們看到Nginx pod已正確部署到我們的rancher命名空間而不是通常的default命名空間。
這表明我們的上下文操作和我們的部署都按預期工作了。
你還可以通過鍵入以下內容來清理已部署的資源:
雖然本章中深入討論這些內容可能超出了本文原意的范圍,但我們還是為大家列出了一些非常有用的命令。
Pod
資源刪除
服務
事件&指標
命名空間&安全
中級命令
kubectl的官方概述:https://kubernetes.io/docs/reference/kubectl/overview/
kubectl的官方命令文檔:https://kubernetes.io/docs/reference/kubectl/kubectl/
kubectl的官方備忘單:https://kubernetes.io/docs/reference/kubectl/cheatsheet/
Rancher kubeconfig文檔:https://rancher.com/docs/rancher/v2.x/en/cluster-admin/kubeconfig/
有關使用kubectl訪問集群的Rancher文檔:https://rancher.com/docs/rancher/v2.x/en/cluster-admin/kubectl/
kubectl配置命令:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#config
使用kubeconfig文件組織集群:https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。