【问题标题】:How to identify static pods via kubectl command?如何通过 kubectl 命令识别静态 Pod?
【发布时间】:2021-04-15 20:40:29
【问题描述】:

我的 Kubernetes 集群的 2 个节点中有多个 pod。 (请参见下文)。

有什么方法可以告诉我哪些是静态 pod? (也许是kubectl 排序命令?)

谢谢!

controlplane $ k get pods -A -o wide
NAMESPACE     NAME                                   READY   STATUS    RESTARTS   AGE    IP            NODE           NOMINATED NODE   READINESS GATES
kube-system   coredns-f9fd979d6-h865q                1/1     Running   0          119s   10.244.0.5    node02   <none>           <none>
kube-system   coredns-f9fd979d6-z4j6f                1/1     Running   0          119s   10.244.1.5    node01         <none>           <none>
kube-system   etcd-a1b2k7h7                      1/1     Running   0          2m9s   172.17.0.79   node02   <none>           <none>
kube-system   kube-apiserver-g8j4k8o8            1/1     Running   0          2m9s   172.17.0.79   node02   <none>           <none>

【问题讨论】:

  • 能否通过describe查看静态pod的owner引用,看它是否有特殊值?我想它不应该属于副本集,但我现在无权访问集群来检查我的情况
  • 你是 100% 正确的!
  • 控制者:ReplicaSet/coredns-f9fd979d6 VS 控制者:节点/控制平面。如果您将其添加为 answer ,我会将其标记为正确答案。谢谢!

标签: kubernetes kubectl kubernetes-pod


【解决方案1】:

在 Kubernetes v1.16.3 metadata.ownerReferences.kind 不是一个东西,所以这里推荐的答案不起作用。 我能够通过查看 metadata.labels.tier 键/值对来识别静态 Pod,该键/值对等于使用 jq 的“控制平面”。

kubectl get pods --all-namespaces -o json | jq -r '.items | map(select(.metadata.labels.tier == "control-plane" ) | .metadata.name) | .[]'

【讨论】:

    【解决方案2】:

    您可以按OwnerReference.Kind 过滤。静态 pod 具有 Node ownerReference 类型。

    您可以使用 --custom-columns 列出您的所有 pod 及其所有者引用。示例:

    $ kubectl get pods --all-namespaces -o custom-columns=NAME:.metadata.name,CONTROLLER:.metadata.ownerReferences[].kind,NAMESPACE:.metadata.namespace
    NAME                                        CONTROLLER   NAMESPACE
    busybox-6ff78776d5-k56fx                    ReplicaSet   default
    nginx-6b87f7d77c-rq6fl                      ReplicaSet   default
    coredns-74ff55c5b-xpgnq                     ReplicaSet   kube-system
    etcd-minikube                               Node         kube-system
    ingress-nginx-admission-create-n6j7k        Job          kube-system
    ingress-nginx-admission-patch-45xvw         Job          kube-system
    ingress-nginx-controller-65cf89dc4f-g7lwm   ReplicaSet   kube-system
    kindnet-44pq8                               DaemonSet    kube-system
    kindnet-nqhg9                               DaemonSet    kube-system
    kube-apiserver-minikube                     Node         kube-system
    kube-controller-manager-minikube            Node         kube-system
    kube-proxy-nmzbn                            DaemonSet    kube-system
    kube-proxy-wlmdz                            DaemonSet    kube-system
    kube-scheduler-minikube                     Node         kube-system
    metrics-server-58966dd6b9-schjr             ReplicaSet   kube-system
    storage-provisioner                         <none>       kube-system
    

    或使用jq 仅过滤静态 pod (kind == "Node"):

    $ kubectl get pods --all-namespaces -o json | jq -r '.items | map(select(.metadata.ownerReferences[]?.kind == "Node" ) | .metadata.name) | .[]'
    etcd-minikube
    kube-apiserver-minikube
    kube-controller-manager-minikube
    kube-scheduler-minikube
    

    【讨论】:

      【解决方案3】:

      使用kubectl describe 命令检查静态 Pod 的所有者引用应该表明这样的 Pod 不受 ReplicaSet 控制,而是来自 Node/controlplane

      【讨论】:

      • 另外:静态 Pod 总是在其名称后附加一个 -${NODENAME},指示哪个节点控制这个静态 Pod。
      猜你喜欢
      • 2022-12-16
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-13
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多