當前位置: 妍妍網 > 碼農

掌握好k8s常見的100個命令,排錯時你會快人一等的!

2024-06-27碼農

關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux Python 網路通訊、網路安全 等學習資料!

前言

大家好,這裏是 浩道Linux ,主要給大家分享 L inux P ython 網路通訊、網路安全等 相關的IT知識平台。

今天浩道跟大家分享100個k8s常見命令,大家掌握好這些命令,在排錯時都會快人一等!並且會的越多,說明你技能越牛逼!

文章來源:綜合自網路

這篇文章是關於使用 Kubectl 進行 Kubernetes 診斷的指南。

列出了 100 個 Kubectl 命令,這些命令對於診斷 Kubernetes 集群中的問題非常有用。這些問題包括但不限於:

  • • 集群資訊

  • • Pod 診斷

  • • 服務診斷

  • • 部署診斷

  • • 網路診斷

  • • 持久卷和持久卷聲明診斷

  • • 資源使用情況

  • • 安全和授權

  • • 節點故障排除

  • • 其他診斷命令:文章還提到了許多其他命令,如資源擴充套件和自動擴充套件、作業和定時作業診斷、Pod 親和性和反親和性規則、RBAC 和安全、服務帳號診斷、節點排空和取消排空、資源清理等。

  • 集群資訊:

    1. 1. 顯示 Kubernetes 版本: kubectl version

    2. 2. 顯示集群資訊: kubectl cluster-info

    3. 3. 列出集群中的所有節點: kubectl get nodes

    4. 4. 檢視一個具體的節點詳情: kubectl describe node <node-name>

    5. 5. 列出所有名稱空間: kubectl get namespaces

    6. 6. 列出所有名稱空間中的所有 pod: kubectl get pods --all-namespaces

    Pod 診斷:

    1. 1. 列出特定名稱空間中的 pod: kubectl get pods -n <namespace>

    2. 2. 檢視一個 Pod 詳情: kubectl describe pod <pod-name> -n <namespace>

    3. 3. 檢視 Pod 日誌: kubectl logs <pod-name> -n <namespace>

    4. 4. 尾部 Pod 日誌: kubectl logs -f <pod-name> -n <namespace>

    5. 5. 在 pod 中執行命令: kubectl exec -it <pod-name> -n <namespace> -- <command>

    Pod 健康檢查:

    1. 1. 檢查 Pod 準備情況: kubectl get pods <pod-name> -n <namespace> -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'

    2. 2. 檢查 Pod 事件: kubectl get events -n <namespace> --field-selector involvedObject.name=<pod-name>

    Service診斷:

    1. 1. 列出名稱空間中的所有服務: kubectl get svc -n <namespace>

    2. 2. 檢視一個服務詳情: kubectl describe svc <service-name> -n <namespace>

    Deployment診斷:

    1. 1. 列出名稱空間中的所有Deployment: kubectl get deployments -n <namespace>

    2. 2. 檢視一個Deployment詳情: kubectl describe deployment <deployment-name> -n <namespace>

    3. 3. 檢視捲動釋出狀態: kubectl rollout status deployment/<deployment-name> -n <namespace>

    4. 4. 檢視捲動釋出歷史記錄: kubectl rollout history deployment/<deployment-name> -n <namespace>

    StatefulSet診斷:

    1. 1. 列出名稱空間中的所有 StatefulSet: kubectl get statefulsets -n <namespace>

    2. 2. 檢視一個 StatefulSet詳情: kubectl describe statefulset <statefulset-name> -n <namespace>

    ConfigMap 和Secret診斷:

    1. 1. 列出名稱空間中的 ConfigMap: kubectl get configmaps -n <namespace>

    2. 2. 檢視一個ConfigMap詳情: kubectl describe configmap <configmap-name> -n <namespace>

    3. 3. 列出名稱空間中的 Secret: kubectl get secrets -n <namespace>

    4. 4. 檢視一個Secret詳情: kubectl describe secret <secret-name> -n <namespace>

    名稱空間診斷:

    1. 1. 檢視一個名稱空間詳情: kubectl describe namespace <namespace-name>

    資源使用情況:

    1. 1. 檢查 pod 的資源使用情況: kubectl top pod <pod-name> -n <namespace>

    2. 2. 檢查節點資源使用情況: kubectl top nodes

    網路診斷:

    1. 1. 顯示名稱空間中 Pod 的 IP 地址: kubectl get pods -n <namespace> -o custom-columns=POD:metadata.name,IP:status.podIP --no-headers

    2. 2. 列出名稱空間中的所有網路策略: kubectl get networkpolicies -n <namespace>

    3. 3. 檢視一個網路策略詳情: kubectl describe networkpolicy <network-policy-name> -n <namespace>

    持久卷 (PV) 和持久卷聲明 (PVC) 診斷:

    1. 1. 列出PV: kubectl get pv

    2. 2. 檢視一個PV詳情: kubectl describe pv <pv-name>

    3. 3. 列出名稱空間中的 PVC: kubectl get pvc -n <namespace>

    4. 4. 檢視PVC詳情: kubectl describe pvc <pvc-name> -n <namespace>

    節點診斷:

    1. 1. 獲取特定節點上執行的 Pod 列表: kubectl get pods --field-selector spec.nodeName=<node-name> -n <namespace>

    資源配額和限制:

    1. 1. 列出名稱空間中的資源配額: kubectl get resourcequotas -n <namespace>

    2. 2. 檢視一個資源配額詳情: kubectl describe resourcequota <resource-quota-name> -n <namespace>

    自訂資源定義 (CRD) 診斷:

    1. 1. 列出名稱空間中的自訂資源: kubectl get <custom-resource-name> -n <namespace>

    2. 2. 檢視自訂資源詳情: kubectl describe <custom-resource-name> <custom-resource-instance-name> -n <namespace>

    使用這些命令時,請記住將 <namespace> , <pod-name> , <service-name> , <deployment-name> , <statefulset-name> , <configmap-name> , <secret-name> , <namespace-name> , <pv-name> , <pvc-name> , <node-name> , <network-policy-name> , <resource-quota-name> , <custom-resource-name> , 和替換為你的特定值。

    <custom-resource-instance-name> 這些命令應該可以幫助你診斷 Kubernetes 集群以及在其中執行的應用程式。

    資源伸縮和自動伸縮

    1. 1. Deployment伸縮: kubectl scale deployment <deployment-name> --replicas=<replica-count> -n <namespace>

    2. 2. 設定Deployment的自動伸縮: kubectl autoscale deployment <deployment-name> --min=<min-pods> --max=<max-pods> --cpu-percent=<cpu-percent> -n <namespace>

    3. 3. 檢查水平伸縮器狀態: kubectl get hpa -n <namespace>

    作業和 CronJob 診斷:

    1. 1. 列出名稱空間中的所有作業: kubectl get jobs -n <namespace>

    2. 2. 檢視一份工作詳情: kubectl describe job <job-name> -n <namespace>

    3. 3. 列出名稱空間中的所有 cron 作業: kubectl get cronjobs -n <namespace>

    4. 4. 檢視一個 cron 作業詳情: kubectl describe cronjob <cronjob-name> -n <namespace>

    容量診斷:

    1. 1. 列出按容量排序的持久卷 (PV): kubectl get pv --sort-by=.spec.capacity.storage

    2. 2. 檢視PV回收策略: kubectl get pv <pv-name> -o=jsonpath='{.spec.persistentVolumeReclaimPolicy}'

    3. 3. 列出所有儲存類別: kubectl get storage classes

    Ingress和服務網格診斷:

    1. 1. 列出名稱空間中的所有Ingress: kubectl get ingress -n <namespace>

    2. 2. 檢視一個Ingress詳情: kubectl describe ingress <ingress-name> -n <namespace>

    3. 3. 列出名稱空間中的所有 VirtualServices (Istio): kubectl get virtualservices -n <namespace>

    4. 4. 檢視一個 VirtualService (Istio)詳情: kubectl describe virtualservice <virtualservice-name> -n <namespace>

    Pod 網路故障排除:

    1. 1. 執行網路診斷 Pod(例如 busybox)進行偵錯: kubectl run -it --rm --restart=Never --image=busybox net-debug-pod -- /bin/sh

    2. 2. 測試從 Pod 到特定端點的連線: kubectl exec -it <pod-name> -n <namespace> -- curl <endpoint-url>

    3. 3. 跟蹤從一個 Pod 到另一個 Pod 的網路路徑: kubectl exec -it <source-pod-name> -n <namespace> -- traceroute <destination-pod-ip>

    4. 4. 檢查 Pod 的 DNS 解析: kubectl exec -it <pod-name> -n <namespace> -- nslookup <domain-name>

    配置和資源驗證:

    1. 1. 驗證 Kubernetes YAML 檔而不套用它: kubectl apply --dry-run=client -f <yaml-file>

    2. 2. 驗證 pod 的安全上下文和功能: kubectl auth can-i list pods --as=system:serviceaccount:<namespace>:<serviceaccount-name>

    RBAC 和安全性:

    1. 1. 列出名稱空間中的角色和角色繫結: kubectl get roles,rolebindings -n <namespace>

    2. 2. 檢視角色或角色繫結詳情: kubectl describe role <role-name> -n <namespace>

    服務帳戶診斷:

    1. 1. 列出名稱空間中的服務帳戶: kubectl get serviceaccounts -n <namespace>

    2. 2. 檢視一個服務帳戶詳情: kubectl describe serviceaccount <serviceaccount-name> -n <namespace>

    清空節點和解除封鎖:

    1. 1. 清空節點以進行維護: kubectl drain <node-name> --ignore-daemonsets

    2. 2. 解除對節點的封鎖: kubectl uncordon <node-name>

    資源清理:

    1. 1. 強制刪除 pod(不推薦): kubectl delete pod <pod-name> -n <namespace> --grace-period=0 --force

    Pod 親和性和反親和性:

    1. 1. 列出 pod 的 pod 親和性規則: kubectl get pod <pod-name> -n <namespace> -o=jsonpath='{.spec.affinity}'

    2. 2. 列出 pod 的 pod 反親和性規則: kubectl get pod <pod-name> -n <namespace> -o=jsonpath='{.spec.affinity.podAntiAffinity}'

    Pod 安全策略 (PSP):

    1. 1. 列出所有 Pod 安全策略(如果啟用): kubectl get psp

    事件:

    1. 1. 檢視最近的集群事件: kubectl get events --sort-by=.metadata.creationTimestamp

    2. 2. 按特定名稱空間過濾事件: kubectl get events -n <namespace>

    節點故障排除:

    1. 1. 檢查節點情況: kubectl describe node <node-name> | grep Conditions -A5

    2. 2. 列出節點容量和可分配資源: kubectl describe node <node-name> | grep -E "Capacity|Allocatable"

    臨時容器(Kubernetes 1.18+):

    1. 1. 執行臨時偵錯容器: kubectl debug -it <pod-name> -n <namespace> --image=<debug-image> -- /bin/sh

    資源指標(需要指標伺服器):

    1. 1. 獲取 Pod 的 CPU 和記憶體使用情況: kubectl top pod -n <namespace>

    kuelet診斷:

    1. 1. 檢視節點上的kubelet日誌: kubectl logs -n kube-system kubelet-<node-name>

    使用Telepresence 進行高級偵錯:

    1. 1. 使用 Telepresence 偵錯 pod: telepresence --namespace <namespace> --swap-deployment <pod-name>

    Kubeconfig 和上下文:

    1. 1. 列出可用的上下文: kubectl config get-contexts

    2. 2. 切換到不同的上下文: kubectl config use-context <context-name>

    Pod 安全標準(PodSecurity 準入控制器):

    1. 1. 列出 PodSecurityPolicy (PSP) 違規行為: kubectl get psp -A | grep -vE 'NAME|REVIEWED'

    Pod 中斷預算 (PDB) 診斷:

    1. 1. 列出名稱空間中的所有 PDB: kubectl get pdb -n <namespace>

    2. 2. 檢視一個PDB詳情: kubectl describe pdb <pdb-name> -n <namespace>

    資源鎖診斷(如果使用資源鎖):

    1. 1. 列出名稱空間中的資源鎖: kubectl get resourcelocks -n <namespace>

    伺服端點和 DNS:

    1. 1. 列出服務的伺服端點: kubectl get endpoints <service-name> -n <namespace>

    2. 2. 檢查 Pod 中的 DNS 配置: kubectl exec -it <pod-name> -n <namespace> -- cat /etc/resolv.conf

    自訂指標(Prometheus、Grafana):

    1. 1. 查詢Prometheus指標:用於 kubectl port-forward 存取Prometheus和Grafana服務來查詢自訂指標。

    Pod 優先級和搶占:

    1. 1. 列出優先級: kubectl get priority classes

    Pod 開銷(Kubernetes 1.18+):

    1. 1. 列出 pod 中的開銷: kubectl get pod <pod-name> -n <namespace> -o=jsonpath='{.spec.overhead}'

    儲存卷快照診斷(如果使用儲存卷快照):

    1. 1. 列出儲存卷快照: kubectl get volumesnapshot -n <namespace>

    2. 2. 檢視儲存卷快照詳情: kubectl describe volumesnapshot <snapshot-name> -n <namespace>

    資源反序列化診斷:

    1. 1. 反序列化並打印 Kubernetes 資源: kubectl get <resource-type> <resource-name> -n <namespace> -o=json

    節點汙點:

    1. 1. 列出節點汙點: kubectl describe node <node-name> | grep Taints

    更改和驗證 Webhook 配置:

    1. 1. 列出變異 webhook 配置: kubectl get mutatingwebhookconfigurations

    2. 2. 列出驗證 Webhook 配置: kubectl get validatingwebhookconfigurations

    Pod 網路策略:

    1. 1. 列出名稱空間中的 pod 網路策略: kubectl get networkpolicies -n <namespace>

    節點條件(Kubernetes 1.17+):

    1. 1. 自訂查詢輸出: kubectl get nodes -o custom-columns=NODE:.metadata.name,READY:.status.conditions[?(@.type=="Ready")].status -l 'node-role.kubernetes.io/worker='

    稽核日誌:

    1. 1. 檢索稽核日誌(如果啟用):檢查 Kubernetes 稽核日誌配置以了解稽核日誌的位置。

    節點作業系統詳細資訊:

    1. 1. 獲取節點的作業系統資訊: kubectl get node <node-name> -o jsonpath='{.status.nodeInfo.osImage}'

    這些命令應該涵蓋 Kubernetes 中的各種診斷場景。確保將 <namespace> <pod-name> <deployment-name> 等占位符替換為你的集群和用例的實際值。

    更多精彩

    關註公眾號 浩道Linux

    浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 網路安全 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。

    喜歡的話,記得 點「贊」 「在看」