Pod 相關腳本
清理 Evicted 的 pod
kubectl get pod -o wide --all-namespaces | awk '{if($4=="Evicted"){cmd="kubectl -n "$1" delete pod "$2; system(cmd)}}'
清理非 Running 的 pod
kubectl get pod -o wide --all-namespaces | awk '{if($4!="Running"){cmd="kubectl -n "$1" delete pod "$2; system(cmd)}}'
不斷嘗試建立TCP連接測試網絡連通性
while true; do echo "" | telnet 10.0.0.3 443; sleep 0.1; done
ctrl+c 終止測試
替換 10.0.0.3 與 443 為需要測試的 IP/域名 和端口表格輸出各節點佔用的 podCIDR
kubectl get no -o=custom-columns=INTERNAL-IP:.metadata.name,EXTERNAL-IP:.status.addresses[1].address,CIDR:.spec.podCIDR
表格輸出各節點總可用資源 (Allocatable)
kubectl get no -o=custom-columns="NODE:.metadata.name,ALLOCATABLE CPU:.status.allocatable.cpu,ALLOCATABLE MEMORY:.status.allocatable.memory"
輸出各節點已分配資源的情況
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c "echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve --;"
表格輸出 cpu 已分配情況:
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c 'echo -n "{}\t" ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- | grep cpu | awk '\''{print $2$3}'\'';'
表格輸出 memory 已分配情況:
kubectl get nodes --no-headers | awk '{print $1}' | xargs -I {} sh -c 'echo -n "{}\t" ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- | grep memory | awk '\''{print $2$3}'\'';'
強制重啟一個Deployment
kubectl patch deployment <deployment-name> \ -p '{"spec":{"template":{"spec":{"containers":[{"name":"<container-name>","env":[{"name":"RESTART_","value":"'$(date +%s)'"}]}]}}}}'
線程數排名統計
printf " NUM PID\t\tCOMMAND\n" && ps -eLf | awk '{$1=null;$3=null;$4=null;$5=null;$6=null;$7=null;$8=null;$9=null;print}' | sort |uniq -c |sort -rn | head -10
直接通過 NortPort 訪問獲取真實 IP
kubectl patch svc myservice -p '{"spec":{"externalTrafficPolicy":"Local"}}'
直接通過 NortPort 訪問獲取真實 IP
kubectl patch svc myservice -p '{"spec":{"externalTrafficPolicy":"Local"}}'
印出已註冊的api
kubectl api-resources
強制刪除pv
kubectl patch pv k8s-pv-kafka02 -p '{"metadata":{"finalizers":null}}'
強制刪除pod
kubectl delete pods --grace-period=0 --force
#獲取集群中所有 pod 運行需要的鏡像
kubectl get pods -A -o=custom-columns='IMAGE:spec.containers[*].image' | tr ',' '\n' | sort -u
#獲取所有 namespace 的 events 日誌並按照時間戳記排序
kubectl get events --all-namespaces -o wide --sort-by=.metadata.creationTimestamp
#匯出一個 namespaces 下所有 pod 的日誌
kubectl get pod -n kube-system | awk '{print $1}' | xargs -L1 -I {} bash -c "kubectl -n kube-system logs {} > {}.log"
#匯出 k8s 元件的 pod 日誌
kubectl get pod -n kube-system | grep -E "kube-apiserver|kube-controller|kube-proxy|kube-scheduler|coredns" | awk '{print $1}' | xargs -L1 -I {} sh -c "kubectl -n kube-system logs {} > {}.log"
#獲取集群中節點的 IP
kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }'
#獲取所有 Pod 的 IP
kubectl get pods -o jsonpath='{ $.items[*].status.podIP }'
#獲取所有 node 節點的子網資訊
kubectl get nodes -o jsonpath='{.items[*].spec.podCIDR}'
#獲取所有 service 的 IP
kubectl get svc --no-headers --all-namespaces -o jsonpath='{$.items[*].spec.clusterIP}'
#根據 CPU/RAM 佔用排序
# cpu
kubectl top pods --all-namespaces | sort --reverse --key 3 --numeric
# memory
kubectl top pods --all-namespaces | sort --reverse --key 4 --numeric