k8s中運維/測試常用的命令整理(隨時更新)


kubectl get pod 查看應用服務,-n 分區名:查看該分區下的pod,--all-namespace:查看所有分區的pod並顯示在哪個分區,-a:展示所有pod,單個pod名 -oyaml/-ojson:展示pod配置信息,單個pod名 -owide:顯示該podip/node信息,

kubectl get ns 查看分區,單個分區名 -oyaml/-ojson:查看ns詳細配置,

kubectl get node 查看節點, 單個node名 -oyaml/-ojson:查看node詳細配置,-owide 展示ip信息,然后通過ssh可以連接到該節點,

kubectl describe pod/ns/node : 查看事件

kubectl delete pod/ns:刪除單個pod/ns,--all:刪除全部pod/ns

kubectl exec -it pod名 bash/sh:進入服務的終端

檢查節點證書:openssl x509 -in /etc/kubernetes/certs/kubelet-server.crt -noout -text | grep 'Not After\|Not Before’  (首先進入節點ip)

檢查應用狀態:kubectl get pod --all-namespaces -o wide | grep -v Running

批量刪除分區:kubectl delete partition `kubectl get partition |grep test |awk  '{print $1}'`

 

查看 Pod 狀態以及運行節點

kubectl get pods -o wide
kubectl -n kube-system get pods -o wide

查看 Pod 事件

kubectl describe pod <pod-name>

查看 Node 狀態

kubectl get nodes
kubectl describe node <node-name>

kube-apiserver 日志

PODNAME=$(kubectl -n kube-system get pod -l component=kube-apiserver -o jsonpath='{.items[0].metadata.name}') kubectl -n kube-system logs $PODNAME --tail 100 

以上命令操作假設控制平面以 Kubernetes 靜態 Pod 的形式來運行。如果 kube-apiserver 是用 systemd 管理的,則需要登錄到 master 節點上,然后使用 journalctl -u kube-apiserver 查看其日志。

kube-controller-manager 日志

PODNAME=$(kubectl -n kube-system get pod -l component=kube-controller-manager -o jsonpath='{.items[0].metadata.name}') kubectl -n kube-system logs $PODNAME --tail 100 

以上命令操作假設控制平面以 Kubernetes 靜態 Pod 的形式來運行。如果 kube-controller-manager 是用 systemd 管理的,則需要登錄到 master 節點上,然后使用 journalctl -u kube-controller-manager 查看其日志。

kube-scheduler 日志

PODNAME=$(kubectl -n kube-system get pod -l component=kube-scheduler -o jsonpath='{.items[0].metadata.name}') kubectl -n kube-system logs $PODNAME --tail 100 

以上命令操作假設控制平面以 Kubernetes 靜態 Pod 的形式來運行。如果 kube-scheduler 是用 systemd 管理的,則需要登錄到 master 節點上,然后使用 journalctl -u kube-scheduler 查看其日志。

kube-dns 日志

kube-dns 通常以 Addon 的方式部署,每個 Pod 包含三個容器,最關鍵的是 kubedns 容器的日志:

PODNAME=$(kubectl -n kube-system get pod -l k8s-app=kube-dns -o jsonpath='{.items[0].metadata.name}') kubectl -n kube-system logs $PODNAME -c kubedns 

Kubelet 日志

Kubelet 通常以 systemd 管理。查看 Kubelet 日志需要首先 SSH 登錄到 Node 上,推薦使用 kubectl-enter 插件而不是為每個節點分配公網 IP 地址。比如:

kubectl enter <node-name>
journalctl -l -u kubelet 

Kube-proxy 日志

Kube-proxy 通常以 DaemonSet 的方式部署,可以直接用 kubectl 查詢其日志

$ kubectl -n kube-system get pod -l component=kube-proxy NAME READY STATUS RESTARTS AGE kube-proxy-42zpn 1/1 Running 0 1d kube-proxy-7gd4p 1/1 Running 0 3d kube-proxy-87dbs 1/1 Running 0 4d $ kubectl -n kube-system logs kube-proxy-42zpn

在k8s里部署deploymeny:

首先創建命名空間namespace

yaml文件:

 

 

創建: kubectl create -f authns.yaml

創建deploymeny:$ kubectl run nginx --image=cargo.caicloud.io/caicloud/nginx:1.9.7 --replicas=1 -n cnauth

查看pod: kubectl get pod -n cnauth -w    (-w是實時狀態查看)

 

查看創建的pod類型:kubectl get all -n cnauth

 

刪除pod,要刪除deployment不然pod會自動重啟:kubectl delete deployment nginx -n cnauth

 

 

查看pod日志相關命令記錄:

Aliases:
logs, log

Examples:
# Return snapshot logs from pod nginx with only one container (只看一個pod)
kubectl logs nginx

# Return snapshot logs from pod nginx with multi containers (看pod和上一層容器)
kubectl logs nginx --all-containers=true

# Return snapshot logs from all containers in pods defined by label app=nginx 
kubectl logs -lapp=nginx --all-containers=true

# Return snapshot of previous terminated ruby container logs from pod web-1
kubectl logs -p -c ruby web-1

# Begin streaming the logs of the ruby container in pod web-1
kubectl logs -f -c ruby web-1

# Display only the most recent 20 lines of output in pod nginx  (限制輸出行數)
kubectl logs --tail=20 nginx

# Show all logs from pod nginx written in the last hour  (查看上一小時內的log)
kubectl logs --since=1h nginx

# Return snapshot logs from first container of a job named hello
kubectl logs job/hello

# Return snapshot logs from container nginx-1 of a deployment named nginx
kubectl logs deployment/nginx -c nginx-1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM