如何获取 nodeSelector 的 JsonPath

How to get JsonPath for nodeSelector

有没有办法从 kubectl 命令行获取 nodeSelector 关键字的 JsonPath?

如果我运行执行kubectl explain deployment --recursive命令,它会输出所有关键词的列表:

apiVersion  <string>
kind    <string>
metadata    <Object>
   annotations  <map[string]string>
   clusterName  <string>
   creationTimestamp    <string>
   deletionGracePeriodSeconds   <integer>
   deletionTimestamp    <string>
   finalizers   <[]string>
   generateName <string>
   generation   <integer>
   initializers <Object>
      pending   <[]Object>
         name   <string>
      result    <Object>
         apiVersion <string>
         code   <integer>
         details    <Object>
            causes  <[]Object>
               field    <string>
               message  <string>
               reason   <string>
            group   <string>
            kind    <string>
...

这个列表很长,关键字像 nodeSelector 很难看出 JsonPath 是 spec.template.spec.nodeSelector

其中一种方法是将输出转换为正确的 YAML 格式,如下所示: (我做了几次替换和删除以获得此输出。不幸的是,kubectl 没有本地选项来实现它。)

   apiVersion: 'string'
   kind: 'string'
   metadata:
      annotations: 'map[string]string'
      clusterName: 'string'
      creationTimestamp: 'string'
      deletionGracePeriodSeconds: 'integer'
      deletionTimestamp: 'string'
      finalizers: '[]string'
      generateName: 'string'
      generation: 'integer'
      initializers:
         pending:
            name: 'string'
         result:
            apiVersion: 'string'
            code: 'integer'
            details:
               causes:
                  field: 'string'
                  message: 'string'
                  reason: 'string'
...

现在您可以应用 this Whosebug 问题的解决方案来获得像这样的扁平化输出:

{
  "apiVersion": "string",
  "kind": "string",
  "metadata.annotations": "map[string]string",
  "metadata.clusterName": "string",
  "metadata.creationTimestamp": "string",
  "metadata.deletionGracePeriodSeconds": "integer",
  "metadata.deletionTimestamp": "string",
  "metadata.finalizers": "[]string",
  "metadata.generateName": "string",
  "metadata.generation": "integer",
  "metadata.initializers.pending.name": "string",
  "metadata.initializers.result.apiVersion": "string",
  "metadata.initializers.result.code": "integer",
  "metadata.initializers.result.details.causes.field": "string",
  "metadata.initializers.result.details.causes.message": "string",
  "metadata.initializers.result.details.causes.reason": "string",
...
}

然后您可以过滤或搜索结果以获得您想要的值。