- Kubernetes進階實戰
- 馬永亮
- 1684字
- 2019-03-13 14:20:39
3.3 kubectl命令與資源管理
API Server是Kubernetes集群的網關,用戶和管理員以及其他客戶端僅能通過此網關接口與集群進行交互。API是面向程序員的訪問接口,目前可較好地支持Golang和Python編程語言,當然,終端用戶更為常用的是通用命令行工具kubectl。訪問集群之前,各類客戶端需要了解集群的位置并擁有訪問集群的憑據才能獲取訪問許可。使用kubeadm進行集群初始化時,kubeadm init自動生成的/etc/kubernetes/admin.conf文件是客戶端接入當前集群時使用的kubeconfig文件,它內建了用于訪問Kubernetes集群的最高管理權限的用戶賬號及相關的認證憑據,可由kubectl直接使用。
3.3.1 資源管理操作概述
資源的管理操作可簡單歸結為增、刪、改、查四種,kubectl提供了一系列的子命令用于執行此類任務,如create、delete、patch、apply、replace、edit、get等,其中有些命令必須基于資源清單來進行,如apply和replace命令,也有些命令既可基于清單文件進行,也可實時作用于活動資源之上,如create、get、patch和delete等。
kubectl命令能夠讀取任何以.yaml、.yml或.json為后綴的文件(可稱為配置清單或配置文件,后文將不加區別地使用這兩個術語)。實踐中,用戶既可以為每個資源使用專用的清單文件,也可以將多個相關的資源(例如,屬于同一個應用或微服務)組織在同一個清單文件中。不過,如果是YAML格式的清單文件,多個資源彼此之間要使用“---”符號作為單獨的一行進行資源分割。這樣,多個資源就將以清單文件中定義的次序被create、apply等子命令調用。
kubectl的多數子命令支持使用“-f”選項指定使用的清單文件路徑或URL,也可以是存儲有清單文件的目錄,另外,此選項在同一命令中也可重復使用多次。如果指定的目錄路徑存在子目錄中時,那么可按需同時使用“-R”選項以遞歸獲取子目錄中的配置清單。
再者,支持使用標簽和注解是Kubernetes系統的一大特色,它為資源管理機制增色不少,而且delete和get等命令能夠基于標簽挑選目標對象,有些資源甚至必須依賴于標簽才能正常使用和工作,例如Service和Pod控制器Deployment等資源對象。子命令label用于管理資源標簽,而管理資源注解的子命令則是annotate。
就地更新(修改)現有的資源也是一種常見的操作。apply命令通過比較資源在清單文件中的版本及前一次的版本執行更新操作,它不會對未定義的屬性產生額外的作用。edit命令相當于先使用get命令獲取資源配置,通過交互式編輯器修改后再自動使用apply命令將其應用。patch命令基于JSON補丁、JSON合并補丁及策略合并補丁對資源進行就地更新操作。
提示
為了利用apply命令的優勢,用戶應該總是使用apply命令或create --save-config命令創建資源。
3.3.2 kubectl的基本用法
kubectl是最常用的客戶端工具之一,它提供了基于命令行訪問Kubernetes API的簡潔方式,能夠滿足對Kubernetes的絕大部分的操作需求。例如,需要創建資源對象時,kubectl會將JSON格式的清單內容以POST方式提交至API Server。本節主要描述kubectl的基本功能。
提示
如果要單獨部署kubectl, Kubernetes也提供了相應的單獨發行包,或者適配于各平臺的程序管理器的相關程序包,如rpm包或deb包等,用戶根據平臺類型的不同獲取相匹配的版本安裝完成即可,操作步驟類似于前面的安裝方法,因此這里不再給出其具體過程。
kubectl是Kubernetes系統的命令行客戶端工具,特性豐富且功能強大,是Kubernetes管理員最常用的集群管理工具。其最基本的語法格式為“kubectl [command] [TYPE] [NAME][flags]”,其中各部分的簡要說明如下。
1)command:對資源執行相應操作的子命令,如get、create、delete、run等;常用的核心子命令如表3-1所示。
表3-1 kubectl的子命令列表

2)TYPE:要操作的資源對象的類型,如pods、services等;類型名稱區分字符大小寫,但支持使用簡寫格式。
3)NAME:對象名稱,區分字符大小寫;省略時,則表示指定TYPE的所有資源對象;另外,也可以直接使用“TYPE/NAME”的格式來表示資源對象。
4)flags:命令行選項,如“-s”或“--server”;另外,get等命令在輸出時還有一個常用的標志“-o <format>”用于指定輸出格式,如表3-1所示。
kubectl命令還包含了多種不同的輸出格式(如表3-2所示),它們為用戶提供了非常靈活的自定義輸出機制,如輸出為YAML或JSON格式等。
表3-2 kubectl get命令的常用輸出格式

此外,kubectl命令還有許多通用的選項,這個可以使用“kubectl options”命令來獲取。下面列舉幾個比較常用命令。
?□-s或--server:指定API Server的地址和端口。
?□--kubeconfig:使用的kubeconfig文件路徑,默認為~/.kube/config。
?□--namespace:命令執行的目標名稱空間。
kubectl的部分子命令在第2章已經多次提到,余下的大多數命令在后續的章節中還會用到,對于它們的使用說明也將在首次用到時進行展開說明。