k8s運維必備-常用命令大全

Linux运维技术栈發表於2024-10-13

k8s常用命令

Kubernetes(通常簡稱為 k8s)是一個開源的容器編排平臺,用於自動化部署、擴充套件和管理容器化應用程式。以下是一些常用的 Kubernetes 命令:

一、叢集資訊查詢

  • kubectl version:檢視叢集的版本資訊。
  • kubectl api-versions:輸出一系列的 API 組及其對應的版本號。
  • kubectl api-resources:輸出服務端 API 支援的資源型別。
  • kubectl cluster-info:檢視叢集資訊。
  • kubectl cluster-info dump:檢視叢集更詳細的資訊。

二、資源詳細資訊檢視

  • kubectl describe <資源型別,如:deployments> <資源名稱>:檢視特定資源的詳細資訊。
  • kubectl -n <名稱空間> describe pod <pod-name>:檢視指定名稱空間下指定 pod 的詳細資訊,加-o wide引數顯示詳細資訊。
  • kubectl describe nodes:顯示叢集節點資源:CPU、GPU、記憶體的使用情況(標籤);nodes 後可加具體節點名。

三、資源建立

  • kubectl apply -f <檔名>:更新資源&建立資源(推薦)
  • kubectl create -f <檔名>:建立資源。
  • kubectl create -f.:建立當前目錄下的所有 yaml 資源。
  • kubectl create -f./app1.yaml -f./app2.yaml:批次建立資源。

四、資源刪除

  • kubectl delete pod <pod-name>:刪除指定 pod。
  • kubectl delete service <service-name>:刪除指定 service。
  • kubectl delete <資源型別> <資源名稱>:刪除指定資源。
  • kubectl delete -f./pod.json:刪除 pod.json 檔案中定義的型別和名稱的 pod。
  • kubectl delete pods --all -n <名稱空間>:刪除指定命令空間下所有的 pod;pods 改為 services 即為刪除所有的 services。
  • kubectl delete pod <pod-name> -n <命令空間> --force --grace-period=0:強制刪除 pod。
  • kubectl delete pods <pod-name> -n <名稱空間>:靜態 POD 直接刪除,非靜態 POD 重啟。
  • kubectl delete pods,services -l name=<標籤名>:刪除指定標籤 pod 和 serivce;--include-uninitialized(含尚未初始化)。

五、資源擴縮容

  • kubectl scale <資源型別,如 rc> <資源名稱,如 rc-nginx-2> --replicas=5:擴充套件副本數到 5。
  • kubectl scale rc rc-nginx-2 —replicas=3:副本數縮減到 3。
  • kubectl autoscale deployment my-app --min=3 --max=10:自動擴縮容 my-app 的部署,指定副本範圍在 3~10。
  • --cpu-percent=80:上條命令結尾如果加這段的話,代表當 CPU 使用率達到 80% 時觸發以上自動擴縮容操作。

六、資源使用情況查詢

  • kubectl top node k8s-node:顯示節點(k8s-node)資源的使用情況。
  • kubectl top node:顯示叢集所有節點的資源的使用情況。
  • kubectl top pod -n logging:顯示指定名稱空間(如,logging)的 pod 的資源的使用情況。

七、資源註解更新

  • kubectl annotate pods <pod-name> description='my frontend':更新 pod,設定其註解description的值為my frontend。

八、容器操作

  • kubectl -n <名稱空間> exec -it <名稱空間> -- bash:登入容器的命令。
  • kubectl -n <名稱空間> cp /opt/sql <名稱空間>:/tmp/:複製本機/opt/sql 路徑下的檔案到 pod 的 /tmp/路徑下。
  • kubectl -n <名稱空間> cp <Pod 名稱>:/tmp/app_bak./mysql_bak/:複製 Pod 內app_bak路徑所有檔案到本地 mysql_bak 路徑。

九、回滾和歷史檢視

  • cat pod.json | kubectl apply -f -:將控制檯輸入的 JSON 配置應用到 Pod。
  • kubectl rollout history deployment nginx-deployment:檢視修訂版本的歷史記錄。
  • kubectl rollout undo deployment nginx-deployment --to-revision=1:如果不加 –to-revision=版本號,會回退到上一個版本。

十、資源配額與限制檢視

  • kubectl describe quota:檢視叢集的資源配額。
  • kubectl describe limitrange:檢視叢集的資源限制。

十一、日誌檢視

  • kubectl logs -f <Pod 名稱> -n <名稱空間>:檢視指定 Pod 的日誌。
  • kubectl logs --tail=10 <Pod 名稱>:檢視指定 pod 的最後 10 行日誌。
  • kubectl logs <Pod 名稱> -n <名稱空間> | grep 關鍵字:根據關鍵字檢視日誌。

十二、節點與標籤操作

  • kubectl get nodes --show-labels:檢視所有節點和 label。
  • kubectl label nodes <節點名> <標籤鍵>=<標籤名>:給節點增加標籤。
  • kubectl label nodes <節點名> <標籤鍵>-:給節點去掉(刪除)標籤。
  • kubectl taint nodes <節點名> <標籤鍵>=true:NoSchedule:給節點增加汙點。
  • kubectl taint nodes <節點名> <標籤鍵>:NoSchedule-:給節點去掉(刪除)汙點。
  • kubectl taint nodes --all <標籤鍵>:NoSchedule-:刪除所有節點的指導標籤。

十三、服務編輯

  • kubectl edit svc/docker-registry:編輯名為 docker-registry 的 service。

十四、資源列表檢視

  • kubectl get pods -A:檢視所有的 pod。
  • kubectl get pods -n <名稱空間>:檢視特定名稱空間下的 Pod 列表。
  • kubectl get po -A|grep -Ev '1/1|2/2|3/3|4/4|Com':檢視異常 pod 的列表。
  • kubectl get pods -o wide | grep <需查詢 pod 的關鍵字>:查詢包含特定關鍵字的 Pod,並且輸出詳細資訊。
  • kubectl get namespaces:檢視名稱空間列表。
  • kubectl get nodes:檢視節點列表,可以加上 --show-labels 檢視 label,可以加上 -o wide 檢視 IP。
  • kubectl get services:檢視叢集中服務的狀態。
  • kubectl get statefulset:檢視 statefulset 列表,中介軟體與底座大量使用該型別控制器。
  • kubectl get daemonset:檢視 daemonset 列表,基礎元件大量使用該型別控制器。
  • kubectl get deployments:檢視 deployment 列表,大部分元件使用該型別控制器。
  • kubectl get svc:檢視服務列表,可指定引數 -A 參看所有名稱空間中的服務。
  • kubectl get ingress -A:檢視域名列表,可指定引數 -A 參看所有名稱空間中的對外域名列表。
  • kubectl get crd -A:檢視自定義資源列表。
  • kubectl get networkpolicies:檢視叢集的網路策略。
  • kubectl get storageclass:檢視叢集的儲存類。

十五、資源格式資訊獲取

  • kubectl get <資源型別,如 deployment> <資源名稱,如 my-deployment> -o yaml:獲取指定 namespace 的 yaml 格式格式資訊。
  • kubectl get <資源型別,如 deployment> <資源名稱,如 my-deployment> -o json:獲取指定 namespace 的 json 格式資訊。

十六、節點排程管理

  • kubectl cordon k8s-node:標記 k8s-node 節點不可排程。
  • kubectl uncordon k8s-node:標記 k8s-node 節點可排程。
  • kubectl drain k8s-node:排除 k8s-node 節點,準備進行維護。

相關文章