Kubernetes - 使用 cli 在一行中创建带有标签的秘密

Tee*_*ebu 4 kubernetes

我可以使用单行命令创建一个秘密,如下所示:

kubectl -n myns create secret generic my-secret --from-literal=type=super --from-literal=url=example.com --from-file=samples=sample.txt
Run Code Online (Sandbox Code Playgroud)

但创建时缺少标签。我想将其保留为单行命令。

我可以传入标签参数还是需要进行第二次调用来修改创建的秘密?

lar*_*sks 6

这完全取决于您对“一行”的定义。这是一行:

$ kubectl -n myns create secret generic my-secret \
    --from-literal=type=super \
    --from-literal=url=example.com \
    --from-file=samples=sample.txt -o json --dry-run=client |
 jq '.metadata.labels |= {"foo":"bar"}' |
 kubectl apply -f-
Run Code Online (Sandbox Code Playgroud)

我们创建秘密,将其作为 JSON 发送到 stdout,使用 修改 JSON jq,然后将结果通过管道传输到kubectl apply -f-

前两个命令的输出是:

{
  "kind": "Secret",
  "apiVersion": "v1",
  "metadata": {
    "name": "my-secret",
    "namespace": "myns",
    "creationTimestamp": null,
    "labels": {
      "foo": "bar"
    }
  },
  "data": {
    "samples": "dGhpcyBpcyBhIHRlc3QK",
    "type": "c3VwZXI=",
    "url": "ZXhhbXBsZS5jb20="
  }
}
Run Code Online (Sandbox Code Playgroud)


bla*_*ide 6

命令中没有kubectl create secret添加标签的选项。

您将需要运行第二个命令来添加标签:

kubectl label secret my-secret -n myns "foo=bar"
Run Code Online (Sandbox Code Playgroud)

但从技术上讲,您可以在一行中完成此操作,例如:

kubectl create secret generic my-secret ... && kubectl label secret my-secret "foo=bar"
Run Code Online (Sandbox Code Playgroud)

或者按照@larsks 的建议去做,这对于工作保障来说要好得多。