kubectl主要用於與K8s API服務器通訊,以在K8s中建立、更新和刪除工做負載。很多IT人員經過kubectl與K8s交互。本文將介紹如何安裝kubectl、與K8s環境進行通訊以及一些經常使用命令,給您提供管理K8s的良好起點。node
對很多IT人員來講,天天與Kubernetes交互的機制通常是經過kubectl——一種命令行工具。kubectl主要用於與Kubernetes API服務器通訊,以在Kubernetes中建立、更新和刪除工做負載。本教程的目的是概述您可使用的一些經常使用命令,並提供管理Kubernetes的良好起點。nginx
咱們將介紹如何在您的計算機上安裝kubectl,如何與您的Kubernetes環境進行通訊並執行一些常見操做。大多數常見的kubectl命令會提供某特定的操做,如建立、刪除等。此方法一般須要解釋描述Kubernetes中的對象(如POD、服務、資源等)的文件(YAML或JSON)。這些文件一般被用做模板以及環境的持續文檔,並有助於保留Kubernetes對聲明性配置的關注。命令行上給出的操做將傳遞給API服務器,而後根據須要與Kubernetes中的後端服務進行通訊。docker
咱們將介紹一些最多見的kubectl命令並提供一些示例。有關每一個命令的更多詳細信息,包括全部支持的標誌和子命令,請查看kubectl參考文檔:後端
https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands。api
安裝kubectl安全
kubectl是一個獨立的程序,所以不須要複雜的安裝過程。它是一個須要位於操做系統PATH中的單個文件。有許多方法能夠得到kubectl二進制文件,例如經過操做系統的本機包管理器或經過curl。下表中的一些示例就是如何爲各類操做系統安裝kubectl:服務器
注意: 隨着新版本的發佈,最佳版本的kubectl for Windows將隨着時間的推移而發生變化。要查找當前最佳二進制文件,請點擊此連接查找最新的穩定版本,並根據須要調整上述URL: https://storage.googleapis.com/kubernetes-release/release/stable.txtcurl
環境中使用的kubectl版本,須要與Kubernetes服務器的版本保持一致。您能夠經過鍵入如下內容來查看正在使用的kubectl客戶端的版本:工具
kubectl在各方面都會保持與一個版本的兼容性。其中客戶端版本會比服務器版本領先一步。這爲服務器版本:v1.13.4中提供的功能和命令提供了支持。若是客戶端版本不是服務器版本以後的各版本中的一個,那麼在嘗試訪問相應服務器版本中可用的功能時,可能會遇到錯誤或不兼容。google
kubectl語法
kubectl 的語法使用以下:
Command(命令):指你想要執行的操做(建立、刪除等等)
Type(類別):指你正在執行命令的資源類型(Pod、Service等)
Name(名稱):對象的名稱(需區分大小寫)。若是未指定名稱,則能夠獲取有關命令匹配的全部資源的信息(例如Pod)
Flags(標誌):這個能夠按需選擇(非必須),不過它在查找特定資源時很是有用。例如,--namespacespace可讓你指定要在哪一個特定的命名空間中執行操做。
kubeconfig
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/