【问题标题】:Apply annotation upon creating an object through `kubectl`在通过 `kubectl` 创建对象时应用注解
【发布时间】:2019-05-17 15:07:04
【问题描述】:

我的问题几乎都在标题中。我想知道是否有办法通过 kubectl 在 Kubernetes 中创建对象时应用注释。

我会在上下文中为您提供更多信息。我正在 GKE 上创建一个内部负载均衡器。要使负载均衡器成为内部负载均衡器,您可以在 GKE 上向服务添加以下注释:cloud.google.com/load-balancer-type: "Internal"

但在公开部署时,它让我可以选择仅将其设为 LoadBalancer 类型:

$ kubectl expose deploy nginx --port 80 --type LoadBalancer

有没有办法在创建服务的同时即时应用注释?

编辑

我尝试了以下命令,看起来很简洁:

kubectl expose deploy nginx --port 80 --type LoadBalancer --overrides '{ "metadata": { "annotations": { "cloud.google.com/load-balancer-type": "Internal" } } }'

...但我收到以下错误,我不知道如何解释:

error: unable to convert the internal object type *core.Service to Unstructured without providing a preferred version to convert to.

这是来自:source

【问题讨论】:

    标签: kubernetes google-kubernetes-engine kubectl


    【解决方案1】:

    我不确定这是否是您正在寻找的东西,但它有效并且是单行的

    kubectl expose deploy nginx --port 80 --type LoadBalancer -oyaml --dry-run > file; sed -i 's/creationTimestamp: null/annotations:\n    cloud.google.comload-balancer-type: "Internal"/g' file
    

    我知道这不是最好和最干净的方式。

    编辑:

    在命令中添加更多细节。

    它公开了一个部署nginx,其中包含您指定的端口和类型。 -oyaml以yaml格式输出,--dry-run只打印不执行。

    然后sedcreationTimestamp: null 替换为annotations 并在新行中添加cloud.google.com/load-balancer-type: "Internal"

    【讨论】:

    • 这不是我想要的,但它完美无缺。谢谢。
    【解决方案2】:

    “Kubectl expose”以及其他 kubectl 子命令没有包含注释的必要选项。 Kubectl 有通用子命令“annotate”,但这并不总是很适用。所以在大多数情况下,YAML 清单是唯一可行的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-26
      • 2022-12-03
      • 1970-01-01
      • 2012-03-25
      • 2019-03-19
      • 2018-04-10
      • 2020-04-02
      • 1970-01-01
      相关资源
      最近更新 更多