如何查看在k8s上哪个节点上创建了本地存储PV

92次阅读
没有评论

问题描述

手动为一个Redis有状态集创建了一些小的本地存储PV(在一个3节点集群上创建了10个)。这些PV似乎工作正常,由Redis有状态集创建的Pod已经满足了它们的卷声明模板。然而,用户想知道每个PV托管在哪个节点上。当用户使用kubectl get pv命令时,会得到以下输出:

NAME             CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS        CLAIM                          STORAGECLASS    REASON   AGE
small-volume-1   1Gi        RWO            Retain           Available                                    local-storage            51d
small-volume-2   1Gi        RWO            Retain           Bound         default/data-redis-cluster-3   local-storage            51d
small-volume-3   1Gi        RWO            Retain           Terminating   default/data-redis-cluster-1   local-storage            51d
small-volume-4   1Gi        RWO            Retain           Bound         default/data-redis-cluster-2   local-storage            51d
small-volume-5   1Gi        RWO            Retain           Bound         default/data-redis-cluster-5   local-storage            51d
small-volume-6   1Gi        RWO            Retain           Terminating   default/data-redis-cluster-0   local-storage            51d
small-volume-7   1Gi        RWO            Retain           Available                                    local-storage            51d
small-volume-8   1Gi        RWO            Retain           Bound         default/data-redis-cluster-4   local-storage            51d
small-volume-9   1Gi        RWO            Retain           Available                                    local-storage            51d

当用户在任何一个PV上运行kubectl describe命令时,仍然看不到它所在的节点。用户想知道是否有办法查看它所在的节点(假设没有使用节点亲和性强制将它们创建在特定的节点上)。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

根据用户的描述,PV的配置中没有明确指定它们所在的节点。但是,可以通过查看PV的YAML配置文件来确定它们所在的节点。用户可以使用以下命令来获取PV的YAML配置:

kubectl get pv --export=true -o yaml

这将输出PV的YAML配置。在YAML配置中,可以查找nodeAffinity字段,其中包含了PV所在的节点信息。例如:

nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - node-1

在上面的示例中,PV被分配给了名为node-1的节点。

方案2

如果PV的YAML配置中没有nodeAffinity字段,那么PV可能没有明确指定它所在的节点。在这种情况下,可以尝试使用kubectl describe pv命令来查看PV的详细信息。在输出中,可以查找Node Affinity字段,它将显示PV是否具有节点亲和性。例如:

Node Affinity:   <none>

如果PV的Node Affinity字段为<none>,则表示PV没有明确指定它所在的节点。
请注意,这些方法仅适用于没有使用节点亲和性强制将PV创建在特定节点上的情况。如果PV使用了节点亲和性,那么可以通过查看节点亲和性配置来确定PV所在的节点。

正文完