14.8 Kubernetes 指令行 kubectl
kubectl 是 Kubernetes 自帶的用戶端,可以用它來直接操作 Kubernetes。
kubectl 的基本用法格式為:
kubectl [command] [resource] [name] [flags]
其中 command 是操作指令(如 get、apply、delete),resource 是資源型別(如 pod、deployment、service),name 是資源名稱(可選),flags 是各種選項引數。
14.8.1 get
顯示一個或多個資源。最常用的指令之一,用於查詢叢集中的資源狀態。
# 檢視所有 Pod
$ kubectl get pods
# 檢視指定命名空間中的 Deployment
$ kubectl get deployment -n kube-system
# 檢視所有資源
$ kubectl get all
# 使用更詳細的輸出格式
$ kubectl get pods -o wide
# 輸出為 YAML 格式
$ kubectl get pod my-pod -o yaml
# 根據標籤選擇資源
$ kubectl get pods -l app=nginx
14.8.2 describe
顯示資源的詳細訊息,包括事件、狀態、設定等。用於除錯和檢視資源的完整訊息。
# 檢視特定 Pod 的詳情
$ kubectl describe pod my-pod
# 檢視 Node 的詳情
$ kubectl describe node node-1
# 檢視 Deployment 的詳情
$ kubectl describe deployment nginx-deployment
14.8.3 apply
從檔案或標準輸入應用設定。這是宣告式資源管理的標準方式,可用於建立或更新資源。
# 應用 YAML 檔案
$ kubectl apply -f deployment.yaml
# 應用目錄中的所有 YAML 檔案
$ kubectl apply -f ./manifests/
# 從標準輸入應用設定
$ cat deployment.yaml | kubectl apply -f -
14.8.4 create
從檔案或標準輸入建立資源。與 apply 不同,create 僅用於建立新資源,如果資源已存在會報錯。
# 建立資源
$ kubectl create -f pod.yaml
# 從標準輸入建立
$ kubectl create -f - < deployment.yaml
14.8.5 delete
刪除一個或多個資源。支援按名稱、標籤、資源型別等多種方式刪除。
# 按名稱刪除
$ kubectl delete pod my-pod
# 刪除整個 Deployment(同時刪除其管理的 Pod)
$ kubectl delete deployment nginx-deployment
# 按標籤刪除
$ kubectl delete pods -l app=nginx
# 從檔案刪除
$ kubectl delete -f deployment.yaml
14.8.6 logs
檢視 Pod 中容器的日誌。用於除錯應用和檢視容器輸出。
# 檢視 Pod 的日誌
$ kubectl logs my-pod
# 檢視 Pod 中特定容器的日誌
$ kubectl logs my-pod -c container-name
# 實時跟蹤日誌(類似 tail -f)
$ kubectl logs -f my-pod
# 檢視最近 100 行日誌
$ kubectl logs my-pod --tail=100
# 檢視 Pod 啟動前的日誌(適用於已崩潰的容器)
$ kubectl logs my-pod --previous
14.8.7 exec
在執行中的容器內部執行指令。用於除錯、排查問題或執行應用內的操作。
# 進入容器的互動式 shell
$ kubectl exec -it my-pod -- /bin/sh
# 在容器中執行指令
$ kubectl exec my-pod -- ls -la /app
# 在 Pod 中的特定容器執行指令
$ kubectl exec -it my-pod -c container-name -- /bin/bash
14.8.8 port-forward
將本地連接埠轉發到 Pod 的連接埠。用於本地訪問叢集內的服務,無需暴露 Service。
# 將本地 8080 連接埠轉發到 Pod 的 80 連接埠
$ kubectl port-forward pod/my-pod 8080:80
# 使用隨機本地連接埠
$ kubectl port-forward pod/my-pod :80
# 轉發到 Service
$ kubectl port-forward svc/my-service 8080:80
14.8.9 rollout
對 Deployment、DaemonSet、StatefulSet 等資源執行捲動更新、暫停、繼續或回滾操作。
# 檢視捲動更新狀態
$ kubectl rollout status deployment/nginx-deployment
# 暫停捲動更新
$ kubectl rollout pause deployment/nginx-deployment
# 繼續捲動更新
$ kubectl rollout resume deployment/nginx-deployment
# 檢視更新歷史
$ kubectl rollout history deployment/nginx-deployment
# 回滾到前一個版本
$ kubectl rollout undo deployment/nginx-deployment
# 回滾到特定版本
$ kubectl rollout undo deployment/nginx-deployment --to-revision=2
14.8.10 label
向資源新增、修改或刪除標籤。標籤用於組織和選擇資源。
# 為 Pod 新增標籤
$ kubectl label pod my-pod env=production
# 修改已有標籤
$ kubectl label pod my-pod env=staging --overwrite
# 刪除標籤
$ kubectl label pod my-pod env-
# 為多個資源新增標籤
$ kubectl label pods -l app=nginx version=v1
14.8.11 annotate
向資源新增或修改註解。註解用於儲存任意元資料,不用於資源選擇。
# 新增註解
$ kubectl annotate pod my-pod description="Production pod"
# 修改註解
$ kubectl annotate pod my-pod description="Staging pod" --overwrite
# 刪除註解
$ kubectl annotate pod my-pod description-
14.8.12 edit
直接編輯 Kubernetes 資源。編輯器由 EDITOR 環境變數指定。
# 編輯 Pod
$ kubectl edit pod my-pod
# 編輯 Deployment
$ kubectl edit deployment nginx-deployment
14.8.13 config
管理 kubectl 的設定檔案(通常位於 ~/.kube/config)。
# 檢視當前設定
$ kubectl config view
# 切換上下文
$ kubectl config use-context my-cluster
# 檢視所有上下文
$ kubectl config get-contexts
# 設定預設命名空間
$ kubectl config set-context --current --namespace=my-namespace
14.8.14 cluster-info
顯示叢集的連線訊息和元件狀態。
# 顯示叢集訊息
$ kubectl cluster-info
# 顯示完整的叢集狀態(注:componentstatuses 自 1.19 起已棄用,建議使用下方替代指令)
$ kubectl get componentstatuses
# 推薦替代:
$ kubectl get --raw='/readyz?verbose'
14.8.15 version
顯示 kubectl 用戶端和 Kubernetes API server 的版本訊息。
# 顯示版本
$ kubectl version
# 僅顯示用戶端版本
$ kubectl version --client
# 以 JSON 格式輸出
$ kubectl version --output=json
14.8.16 api-versions
列出 API server 支援的所有 API 版本,格式為 『組/版本』。
$ kubectl api-versions
14.8.17 explain
解釋資源的欄位含義。用於瞭解 YAML 設定檔案中各欄位的作用。
# 檢視 Pod 資源的欄位說明
$ kubectl explain pod
# 檢視 Pod 下 spec 欄位的說明
$ kubectl explain pod.spec
# 檢視具體欄位的詳細說明
$ kubectl explain pod.spec.containers
14.8.18 auth
檢查使用者許可權,用於驗證 RBAC 設定。
# 檢查當前使用者是否有許可權執行操作
$ kubectl auth can-i create pods
# 檢查特定使用者的許可權
$ kubectl auth can-i create pods --as=other-user
14.8.19 help
顯示任何指令的幫助訊息。
# 顯示 kubectl 的一般幫助
$ kubectl help
# 顯示特定指令的幫助
$ kubectl get --help
# 顯示資源的 API 文件
$ kubectl explain deployment