Kubernetes 通过“kubectl”创建对象时应用注释`
我的问题主要在标题中。我想知道在Kubernetes中通过kubectl创建对象时是否有方法应用注释 我会给你更多的背景知识。我正在GKE上创建一个内部负载平衡器。要使负载平衡器成为内部的,您需要在GKE上向服务添加以下注释:Kubernetes 通过“kubectl”创建对象时应用注释`,kubernetes,google-kubernetes-engine,kubectl,Kubernetes,Google Kubernetes Engine,Kubectl,我的问题主要在标题中。我想知道在Kubernetes中通过kubectl创建对象时是否有方法应用注释 我会给你更多的背景知识。我正在GKE上创建一个内部负载平衡器。要使负载平衡器成为内部的,您需要在GKE上向服务添加以下注释:cloud.google.com/load-balancer-type:“internal” 但是,在公开部署时,我可以选择仅将其设置为LoadBalancer类型: $kubectl expose deploy nginx--端口80--类型LoadBalancer 在创
cloud.google.com/load-balancer-type:“internal”
但是,在公开部署时,我可以选择仅将其设置为LoadBalancer类型:
$kubectl expose deploy nginx--端口80--类型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.
这就是is的来源:“Kubectl expose”以及其他Kubectl子命令没有包含注释的必要选项。Kubectl有通用子命令“annotate”,但并不总是非常适用。因此,在大多数情况下,YAML清单是唯一可行的方法。我不确定这是否是您要寻找的,但它是有效的,而且是一条线性的
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
仅打印而不执行
然后
sed
将creationTimestamp:null
替换为annotations
,并在新的一行中添加cloud.google.com/load-balancer-type:“Internal”
这并不是我想要的,但它可以完美地工作。谢谢