kubectl 命令常用操作示例

1、建立資源物件

下面的命令分別建立了名為nginx-deploy的Deployment控制器資源物件,以及名為nginx-svc的service物件:

$kubectl run nginx-deploy ——image=nginx:1。180 ——replicas=2 $kubectl expose deployment/nginx ——name=nginx=svc ——port=80

也可以根據資源清單建立資源物件,即命令式物件配置檔案,例如假設定義了Deployment 物件的nginx-deploy。yaml,和定義了Service物件的nginx-svc。yaml檔案,使用kubectl create命令即可進行基於命令式物件配置檔案的建立操作:

kubectl create -f nginx-deploy。yaml -f nginx-svc。yaml

甚至還可以將建立交由kubectl自行確定,使用者只需要宣告期望的狀態,這種方式稱為生命式物件建立。使用kubectl apply命令可以實現宣告式配置。

kubectl apply -f nginx-deploy。yaml -f nginx-svc。yaml

2、檢視資源物件

(1)列出系統上所有的NameSpace資源物件

kubectl get namespace

(2)列出預設名稱空間內的所有Pod和Service物件,並輸出額外資訊

kubectl get pods,services -o wide

Kubernetes系統的大部分資源都隸屬於某個名稱空間,預設的名稱空間為default,如果獲取指定名稱空間中的資源物件需要使用-n或者——namespace指明其名稱,例如列出kube-namespace名稱空間中擁有k8s-app標籤名稱的所有pod物件

kubectl get pods -l k8s-app -n kube-system

3、列印資源物件的詳細資訊

每個資源物件都包含著使用者期望的狀態(Spec)和現有的實際狀態(Status)兩種狀態資訊,“kubectl get -o {yaml|josn}”或“kubectl describe”命令都能打印出指定資源物件的詳細資訊。例如檢視 kube system命名間中擁有標 component=kube apiserver的Pod 物件的資源配置清單(期望的狀態)及當前的狀態資訊,並輸出為 yaml 格式,命令如下:

kubectl get pods -l componet=kube-apiserver -o yaml -n kube-system

“kubectl describe”命令還能顯示與當前物件名相關的其他資源,如Event或Controller等。例如檢視Kube-system名稱空間中用用標籤component=kube-apiservice的Pod物件的詳細描述資訊:

kubectl describe pods -l componet=kube-apiserver -o yaml -n kube-system

這兩個命令都支援以Type name或type/name的格式指定具體資源物件,如“ pods kube apiserver-master。ilinux。io ”或“ pods/kube-apiserver-master。ilinux。io”,以瞭解特定資源物件的詳細屬性資訊及狀態資訊。

4、列印容器中的日誌資訊。

通常一個容器中僅會執行一個程序(及其子程序),此程序作為PID為1的程序接收並處理管理資訊,同時將日誌直接輸出至終端中,而無需像傳統的多程序系統環境那樣將日誌儲存於檔案中,因此容器日誌的獲取一般要到其控制上進行。“kubectl logs”命令可以列印Pod物件內指定的日誌資訊。命令格式為“kubectl logs [-f][-p](POD|YTPE/NAME)[-c CONTAINER][options]” ,若Pod物件內僅有一個容器,則-c選項及容器名稱為可選。例如檢視名稱空間kube-system中僅有一個容器的Pod物件kube-apiservice-master。ilinux。io的日誌:

kubectl log kube-apiserver-master。ilinux。io -n kube-system

為上面的命令新增-f選項,還能用於持續監控指定容器中的日誌輸出,其行為類似於使用了-f選項的tail命令。

5、在容器中執行命令

容器的隔離屬性使得對其內部資訊的獲取變得不再直觀,這一點在使用者需要了解容器內部程序的執行特性、檔案系統上的檔案及路徑佈局等資訊時,需要穿透其隔離邊界進行。“kubectl exec”命令便是用於在指定的容器內執行其他應用程式的命令,例如,在kube-system名稱空間中的Pod物件的kube-apiservice-master。ilinux。io上的唯一容器中執行ps命令:

kubectl exec kube-apiserver-master。ilinux。io -n kube-system ——ps

如果Pod物件中存在多個容器,則需要以-c選項指定容器後再執行。

6、刪除資源物件

使命已完成或存在錯誤的資源物件可以使用kubectl delete 命令刪除 不過,對於受控於控制器的物件來說,刪除以後其控制器可能會重建出來類似的物件 例如 Deployment控制器下的Pod物件在被刪除時就會被重建。例如,刪除預設名稱空間中名為nginx-svc的Service物件

kubectl delete services nginx-svc

刪除名稱空間kube-system中擁有k8s-app=kube-proxy的所有Pod物件

kubectl delete pods -l app=monitor -n kube-system

刪除所有的 某類物件可以使用 kubectl delete type ——all -n NS命令,例如 刪除kube-public名稱空間中的所有Pod物件

kubectl delete pods -l -all -n kube-public

有些資源物件(如pod),支援優雅刪除的機制,他們有著預設的刪除寬限期,不過,使用者可以在命令中使用——grace-period選項或——now選項來覆蓋預設的寬限期。