關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux 、 Python 、 網路通訊、網路安全 等學習資料!
前言
大家好,這裏是 浩道Linux ,主要給大家分享 L inux 、 P ython 、 網路通訊、網路安全等 相關的IT知識平台。
今天浩道跟大家分享100個k8s常見命令,大家掌握好這些命令,在排錯時都會快人一等!並且會的越多,說明你技能越牛逼!
文章來源:綜合自網路
這篇文章是關於使用 Kubectl 進行 Kubernetes 診斷的指南。
列出了 100 個 Kubectl 命令,這些命令對於診斷 Kubernetes 集群中的問題非常有用。這些問題包括但不限於:
• 集群資訊
• Pod 診斷
• 服務診斷
• 部署診斷
• 網路診斷
• 持久卷和持久卷聲明診斷
• 資源使用情況
• 安全和授權
• 節點故障排除
• 其他診斷命令:文章還提到了許多其他命令,如資源擴充套件和自動擴充套件、作業和定時作業診斷、Pod 親和性和反親和性規則、RBAC 和安全、服務帳號診斷、節點排空和取消排空、資源清理等。
集群資訊:
1. 顯示 Kubernetes 版本:
kubectl version
2. 顯示集群資訊:
kubectl cluster-info
3. 列出集群中的所有節點:
kubectl get nodes
4. 檢視一個具體的節點詳情:
kubectl describe node <node-name>
5. 列出所有名稱空間:
kubectl get namespaces
6. 列出所有名稱空間中的所有 pod:
kubectl get pods --all-namespaces
Pod 診斷:
1. 列出特定名稱空間中的 pod:
kubectl get pods -n <namespace>
2. 檢視一個 Pod 詳情:
kubectl describe pod <pod-name> -n <namespace>
3. 檢視 Pod 日誌:
kubectl logs <pod-name> -n <namespace>
4. 尾部 Pod 日誌:
kubectl logs -f <pod-name> -n <namespace>
5. 在 pod 中執行命令:
kubectl exec -it <pod-name> -n <namespace> -- <command>
Pod 健康檢查:
1. 檢查 Pod 準備情況:
kubectl get pods <pod-name> -n <namespace> -o jsonpath='{.status.conditions[?(@.type=="Ready")].status}'
2. 檢查 Pod 事件:
kubectl get events -n <namespace> --field-selector involvedObject.name=<pod-name>
Service診斷:
1. 列出名稱空間中的所有服務:
kubectl get svc -n <namespace>
2. 檢視一個服務詳情:
kubectl describe svc <service-name> -n <namespace>
Deployment診斷:
1. 列出名稱空間中的所有Deployment:
kubectl get deployments -n <namespace>
2. 檢視一個Deployment詳情:
kubectl describe deployment <deployment-name> -n <namespace>
3. 檢視捲動釋出狀態:
kubectl rollout status deployment/<deployment-name> -n <namespace>
4. 檢視捲動釋出歷史記錄:
kubectl rollout history deployment/<deployment-name> -n <namespace>
StatefulSet診斷:
1. 列出名稱空間中的所有 StatefulSet:
kubectl get statefulsets -n <namespace>
2. 檢視一個 StatefulSet詳情:
kubectl describe statefulset <statefulset-name> -n <namespace>
ConfigMap 和Secret診斷:
1. 列出名稱空間中的 ConfigMap:
kubectl get configmaps -n <namespace>
2. 檢視一個ConfigMap詳情:
kubectl describe configmap <configmap-name> -n <namespace>
3. 列出名稱空間中的 Secret:
kubectl get secrets -n <namespace>
4. 檢視一個Secret詳情:
kubectl describe secret <secret-name> -n <namespace>
名稱空間診斷:
1. 檢視一個名稱空間詳情:
kubectl describe namespace <namespace-name>
資源使用情況:
1. 檢查 pod 的資源使用情況:
kubectl top pod <pod-name> -n <namespace>
2. 檢查節點資源使用情況:
kubectl top nodes
網路診斷:
1. 顯示名稱空間中 Pod 的 IP 地址:
kubectl get pods -n <namespace> -o custom-columns=POD:metadata.name,IP:status.podIP --no-headers
2. 列出名稱空間中的所有網路策略:
kubectl get networkpolicies -n <namespace>
3. 檢視一個網路策略詳情:
kubectl describe networkpolicy <network-policy-name> -n <namespace>
持久卷 (PV) 和持久卷聲明 (PVC) 診斷:
1. 列出PV:
kubectl get pv
2. 檢視一個PV詳情:
kubectl describe pv <pv-name>
3. 列出名稱空間中的 PVC:
kubectl get pvc -n <namespace>
4. 檢視PVC詳情:
kubectl describe pvc <pvc-name> -n <namespace>
節點診斷:
1. 獲取特定節點上執行的 Pod 列表:
kubectl get pods --field-selector spec.nodeName=<node-name> -n <namespace>
資源配額和限制:
1. 列出名稱空間中的資源配額:
kubectl get resourcequotas -n <namespace>
2. 檢視一個資源配額詳情:
kubectl describe resourcequota <resource-quota-name> -n <namespace>
自訂資源定義 (CRD) 診斷:
1. 列出名稱空間中的自訂資源:
kubectl get <custom-resource-name> -n <namespace>
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. Deployment伸縮:
kubectl scale deployment <deployment-name> --replicas=<replica-count> -n <namespace>
2. 設定Deployment的自動伸縮:
kubectl autoscale deployment <deployment-name> --min=<min-pods> --max=<max-pods> --cpu-percent=<cpu-percent> -n <namespace>
3. 檢查水平伸縮器狀態:
kubectl get hpa -n <namespace>
作業和 CronJob 診斷:
1. 列出名稱空間中的所有作業:
kubectl get jobs -n <namespace>
2. 檢視一份工作詳情:
kubectl describe job <job-name> -n <namespace>
3. 列出名稱空間中的所有 cron 作業:
kubectl get cronjobs -n <namespace>
4. 檢視一個 cron 作業詳情:
kubectl describe cronjob <cronjob-name> -n <namespace>
容量診斷:
1. 列出按容量排序的持久卷 (PV):
kubectl get pv --sort-by=.spec.capacity.storage
2. 檢視PV回收策略:
kubectl get pv <pv-name> -o=jsonpath='{.spec.persistentVolumeReclaimPolicy}'
3. 列出所有儲存類別:
kubectl get storage classes
Ingress和服務網格診斷:
1. 列出名稱空間中的所有Ingress:
kubectl get ingress -n <namespace>
2. 檢視一個Ingress詳情:
kubectl describe ingress <ingress-name> -n <namespace>
3. 列出名稱空間中的所有 VirtualServices (Istio):
kubectl get virtualservices -n <namespace>
4. 檢視一個 VirtualService (Istio)詳情:
kubectl describe virtualservice <virtualservice-name> -n <namespace>
Pod 網路故障排除:
1. 執行網路診斷 Pod(例如 busybox)進行偵錯:
kubectl run -it --rm --restart=Never --image=busybox net-debug-pod -- /bin/sh
2. 測試從 Pod 到特定端點的連線:
kubectl exec -it <pod-name> -n <namespace> -- curl <endpoint-url>
3. 跟蹤從一個 Pod 到另一個 Pod 的網路路徑:
kubectl exec -it <source-pod-name> -n <namespace> -- traceroute <destination-pod-ip>
4. 檢查 Pod 的 DNS 解析:
kubectl exec -it <pod-name> -n <namespace> -- nslookup <domain-name>
配置和資源驗證:
1. 驗證 Kubernetes YAML 檔而不套用它:
kubectl apply --dry-run=client -f <yaml-file>
2. 驗證 pod 的安全上下文和功能:
kubectl auth can-i list pods --as=system:serviceaccount:<namespace>:<serviceaccount-name>
RBAC 和安全性:
1. 列出名稱空間中的角色和角色繫結:
kubectl get roles,rolebindings -n <namespace>
2. 檢視角色或角色繫結詳情:
kubectl describe role <role-name> -n <namespace>
服務帳戶診斷:
1. 列出名稱空間中的服務帳戶:
kubectl get serviceaccounts -n <namespace>
2. 檢視一個服務帳戶詳情:
kubectl describe serviceaccount <serviceaccount-name> -n <namespace>
清空節點和解除封鎖:
1. 清空節點以進行維護:
kubectl drain <node-name> --ignore-daemonsets
2. 解除對節點的封鎖:
kubectl uncordon <node-name>
資源清理:
1. 強制刪除 pod(不推薦):
kubectl delete pod <pod-name> -n <namespace> --grace-period=0 --force
Pod 親和性和反親和性:
1. 列出 pod 的 pod 親和性規則:
kubectl get pod <pod-name> -n <namespace> -o=jsonpath='{.spec.affinity}'
2. 列出 pod 的 pod 反親和性規則:
kubectl get pod <pod-name> -n <namespace> -o=jsonpath='{.spec.affinity.podAntiAffinity}'
Pod 安全策略 (PSP):
1. 列出所有 Pod 安全策略(如果啟用):
kubectl get psp
事件:
1. 檢視最近的集群事件:
kubectl get events --sort-by=.metadata.creationTimestamp
2. 按特定名稱空間過濾事件:
kubectl get events -n <namespace>
節點故障排除:
1. 檢查節點情況:
kubectl describe node <node-name> | grep Conditions -A5
2. 列出節點容量和可分配資源:
kubectl describe node <node-name> | grep -E "Capacity|Allocatable"
臨時容器(Kubernetes 1.18+):
1. 執行臨時偵錯容器:
kubectl debug -it <pod-name> -n <namespace> --image=<debug-image> -- /bin/sh
資源指標(需要指標伺服器):
1. 獲取 Pod 的 CPU 和記憶體使用情況:
kubectl top pod -n <namespace>
kuelet診斷:
1. 檢視節點上的kubelet日誌:
kubectl logs -n kube-system kubelet-<node-name>
使用Telepresence 進行高級偵錯:
1. 使用 Telepresence 偵錯 pod:
telepresence --namespace <namespace> --swap-deployment <pod-name>
Kubeconfig 和上下文:
1. 列出可用的上下文:
kubectl config get-contexts
2. 切換到不同的上下文:
kubectl config use-context <context-name>
Pod 安全標準(PodSecurity 準入控制器):
1. 列出 PodSecurityPolicy (PSP) 違規行為:
kubectl get psp -A | grep -vE 'NAME|REVIEWED'
Pod 中斷預算 (PDB) 診斷:
1. 列出名稱空間中的所有 PDB:
kubectl get pdb -n <namespace>
2. 檢視一個PDB詳情:
kubectl describe pdb <pdb-name> -n <namespace>
資源鎖診斷(如果使用資源鎖):
1. 列出名稱空間中的資源鎖:
kubectl get resourcelocks -n <namespace>
伺服端點和 DNS:
1. 列出服務的伺服端點:
kubectl get endpoints <service-name> -n <namespace>
2. 檢查 Pod 中的 DNS 配置:
kubectl exec -it <pod-name> -n <namespace> -- cat /etc/resolv.conf
自訂指標(Prometheus、Grafana):
1. 查詢Prometheus指標:用於
kubectl port-forward
存取Prometheus和Grafana服務來查詢自訂指標。
Pod 優先級和搶占:
1. 列出優先級:
kubectl get priority classes
Pod 開銷(Kubernetes 1.18+):
1. 列出 pod 中的開銷:
kubectl get pod <pod-name> -n <namespace> -o=jsonpath='{.spec.overhead}'
儲存卷快照診斷(如果使用儲存卷快照):
1. 列出儲存卷快照:
kubectl get volumesnapshot -n <namespace>
2. 檢視儲存卷快照詳情:
kubectl describe volumesnapshot <snapshot-name> -n <namespace>
資源反序列化診斷:
1. 反序列化並打印 Kubernetes 資源:
kubectl get <resource-type> <resource-name> -n <namespace> -o=json
節點汙點:
1. 列出節點汙點:
kubectl describe node <node-name> | grep Taints
更改和驗證 Webhook 配置:
1. 列出變異 webhook 配置:
kubectl get mutatingwebhookconfigurations
2. 列出驗證 Webhook 配置:
kubectl get validatingwebhookconfigurations
Pod 網路策略:
1. 列出名稱空間中的 pod 網路策略:
kubectl get networkpolicies -n <namespace>
節點條件(Kubernetes 1.17+):
1. 自訂查詢輸出:
kubectl get nodes -o custom-columns=NODE:.metadata.name,READY:.status.conditions[?(@.type=="Ready")].status -l 'node-role.kubernetes.io/worker='
稽核日誌:
1. 檢索稽核日誌(如果啟用):檢查 Kubernetes 稽核日誌配置以了解稽核日誌的位置。
節點作業系統詳細資訊:
1. 獲取節點的作業系統資訊:
kubectl get node <node-name> -o jsonpath='{.status.nodeInfo.osImage}'
這些命令應該涵蓋 Kubernetes 中的各種診斷場景。確保將
<namespace>
、
<pod-name>
、
<deployment-name>
等占位符替換為你的集群和用例的實際值。
更多精彩
關註公眾號 「 浩道Linux 」
浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 、 網路安全 、 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。
喜歡的話,記得 點「贊」 和 「在看」 哦