如何在 Kubernetes 中列出所有 Pod 及其節點
一、概述
在 Kubernetes 中,了解 pod 及其分配節點的當前狀態至關重要。此信息對於系統監控、可擴展性和故障排除非常有用。我們可以通過列出所有 pod 及其節點來獲取此信息。
在本教程中,我們將學習使用kubectl
命令列出 Kubernetes 中的 pod 和節點。
2.列出Kubernetes中的所有Pod
命令kubectl get pods
列出了 Kubernetes 中的所有 pod。例如,要列出默認命名空間中的所有 pod,我們可以使用以下kubectl
命令:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-deployment-7b4f8f4c4f 1/1 Running 0 10m
nginx-deployment-7b4f8f4c5f 1/1 Running 0 10m
nginx-deployment-7b4f8f4c6f 1/1 Running 0 10m
此命令將顯示一個表格,其中包含有關所有 pod 的信息。這包括 pod 的名稱、當前狀態和年齡。我們還可以通過在命令中引入不同的標誌來過濾結果。值得注意的是,此命令不僅會列出正在unning
pod,還會列出集群中存在的所有 pod。
3. 列出 Kubernetes 中的節點
除了列出所有 pod 之外,了解它們運行的節點也很重要。要獲取有關 Kubernetes 集群中所有節點的信息,我們可以使用kubectl get nodes
命令。此命令檢索有關屬於 Kubernetes 集群的所有節點的詳細信息:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready control-plane,master 3d v1.22.2
node2 Ready <none> 3d v1.22.2
node3 Ready <none> 2d v1.22.2
上面的輸出顯示了一個表,其中包含有關集群中存在的所有節點的信息。它包括每個節點上運行的 Kubernetes 的節點名稱、當前狀態、年齡和版本。
我們還可以在kubectl get nodes
命令中使用不同的標誌來過濾結果或獲取有關節點的更多信息。例如,我們可以使用-o wide
標誌來顯示其他信息,例如每個節點的內部 IP 地址、外部 IP 地址和操作系統映像:
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNAL-VERSION CONTAINER-RUNTIME
node1 Ready control-plane,master 3d v1.22.2 10.56.179.63
<none> Amazon Linux 2 5.4.237-143.346.amzn2.x86_64 docker://20.10.17
node2 Ready <none> 3d v1.22.2 10.26.139.3
<none> Amazon Linux 2 5.4.237-143.346.amzn2.x86_64 docker://20.10.17
node3 Ready <none> 2d v1.22.2 10.76.179.30
<none> Amazon Linux 2 5.4.237-143.346.amzn2.x86_64 docker://20.10.17
前四列與之前的輸出相同。除此之外,它還顯示了一些額外的列,例如每個節點的內部和外部 IP 地址、操作系統映像、內核映像和容器運行時。
4. 列出 Pod 及其節點
要獲取正在運行特定 pod 的節點信息,我們可以使用-o wide
標誌。此命令顯示其他信息,包括運行每個 pod 的節點。為了說明,讓我們列出默認命名空間中的所有 pod 及其對應的節點信息,我們可以使用以下命令:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-7b4f8f4c4f 1/1 Running 0 10m 10.244.1.225 node2 <none> <none>
nginx-deployment-7b4f8f4c5f 1/1 Running 0 10m 10.244.2.245 node1 <none> <none>
nginx-deployment-7b4f8f4c6f 1/1 Running 0 10m 10.244.3.167 node3 <none> <none>
在此示例中,該命令列出了默認命名空間中的所有 pod。它顯示了它們的名稱、每個 pod 中準備就緒的容器數量、每個 pod 的當前狀態、每個 pod 已重啟的次數、每個 pod 運行了多長時間、分配給每個 pod 的 IP 地址、每個 pod 在其上運行的節點名稱,以及每個 pod 是否已被指定為要在其上運行的節點。
我們還可以在kubectl get pods -o wide
命令中使用不同的標誌來過濾結果或獲取有關 pod 及其運行節點的更多詳細信息。
例如,我們可以使用–show-labels
標誌來顯示與每個 pod 關聯的任何標籤:
$ kubectl get pods -o wide --show-labels
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES LABELS
nginx-deployment-7b4f8f4c4f 1/1 Running 0 10m 10.244.1.225 node2 <none> <none> app=myapp
nginx-deployment-7b4f8f4c5f 1/1 Running 0 10m 10.244.2.245 node1 <none> <none> app=myapp
nginx-deployment-7b4f8f4c6f 1/1 Running 0 10m 10.244.3.167 node3 <none> <none> app=myapp
此命令將顯示一個表格,其中有一個附加列顯示與每個 pod 關聯的任何標籤。
5. 按節點過濾 Pod
如果我們想按運行的節點過濾 pod,我們可以使用–field-selector spec.nodeName=<node-name>
選項。此命令檢索有關在 Kubernetes 集群中特定節點上運行的 pod 的詳細信息。
例如,要列出 node1 上運行的所有 pod,我們可以使用以下命令:
$ kubectl get pods --field-selector spec.nodeName=node1
NAME READY STATUS RESTARTS AGE
nginx-deployment-7b4f8f4c5f-4tbv4 1/1 Running 0 10m
此命令將顯示一個表,其中包含有關在 node1 上運行的所有 pod 的信息,包括它們的名稱、狀態、年齡和 IP 地址。
我們還可以將不同的標誌與上述命令一起使用來過濾結果或獲取有關在特定節點上運行的 pod 的更多信息。例如,我們可以使用-o wide
標誌來顯示附加信息,例如每個 pod 的節點名稱和命名空間:
$ kubectl get pods --field-selector spec.nodeName=node1 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-7b4f8f4c5f-4tbv4 1/1 Running 0 10m 10.234.4.156 node1 <none> <none>
此命令將顯示一個包含附加列的表格,其中包括節點名稱及其在node1
上運行的每個 pod 的 IP。
六,結論
在本文中,我們討論了用於輕鬆檢索有關所有 pod 及其分配節點的信息的命令。我們還按運行的節點過濾 pod。我們使用這些命令確定了 Kubernetes 集群中的任何不平衡或問題,從而使我們能夠相應地解決它們。