给部署添加一些标签?

8

我对Kubernetes很新手,关于Kubernetes标签有一个问题。在YouTube视频中(法语版),我看到:

该人使用以下命令创建了三个deployment,并运行kubectl get deployment命令,然后运行kubectl get deployment --show-labels

kubectl run monnginx --image nginx --labels "env=prod,group=front"
kubectl run monnginx2 --image nginx --labels "env=dev,group=front"
kubectl run monnginx3 --image nginx --labels "env=prod,group=back"

root@kubmaster:# kubectl get deployments
NAME            READY        UP-TO-DATE AVAILABLE      AGE
monnginx         1/1             1          1          46s
monnginx2        1/1             1          1          22s
monnginx3        1/1             1          1          10s
      

root@kubmaster:# kubectl get deployments --show-labels
NAME            READY        UP-TO-DATE AVAILABLE      AGE   LABELS
monnginx         1/1             1          1          46s   env=prod,group=front
monnginx2        1/1             1          1          22s   env=dev,group=front 
monnginx3        1/1             1          1          10s   env=prod,group=back
      

目前,如果我尝试做同样的事情:

root@kubermaster:~ kubectl run mynginx --image nginx --labels "env=prod,group=front"
pod/mynginx created

root@kubermaster:~ kubectl run mynginx2 --image nginx --labels "env=dev,group=front"
pod/mynginx2 created

root@kubermaster:~ kubectl run mynginx3 --image nginx --labels "env=dev,group=back"
pod/mynginx3 created

当我尝试运行命令kubectl get deployments --show-labels时,输出如下:

No resources found in default namespace.

但是如果我尝试使用kubectl get pods --show-labels命令,输出结果为:

NAME       READY   STATUS    RESTARTS   AGE     LABELS
mynginx    1/1     Running   0          2m39s   env=prod,group=front
mynginx2   1/1     Running   0          2m32s   env=dev,group=front
mynginx3   1/1     Running   0          2m25s   env=dev,group=back

如果我按照视频中的每个步骤操作,有一种方法可以在部署上放置一些标签...但是命令kubectl create deployment不接受标志--labels:
Error: unknown flag: --labels

有人能解释一下为什么我出现了这个错误,以及如何添加标签吗?

非常感谢!


您正在运行一个 Pod 并尝试获取 Deployment,这是正确的。请注意您命令的输出:pod/mynginx created,您创建了一个名为 mynginx 的 Pod... 您可以在此处阅读更多关于 Pod 和 Deployment 的区别。 - Mr.KoopaKiller
你可以简单地运行以下命令: kubctl run my-app --iamge nginx --replicas 3 --labels tier=frontend 虽然 kubctl apply 没有 --labels 选项,但你可以使用 kubctl run 命令并添加 --labels 参数。 - Bharat
3个回答

15

因为$ kubectl create deployment不支持--labels标记。但是您可以使用$ kubectl label为部署添加标签。

示例:

# Update deployment 'my-deployment' with the label 'unhealthy' and the value 'true'.
$ kubectl label deployment my-deployment unhealthy=true
  
# Update deployment 'my-deployment' with the label 'status' and the value 'unhealthy', overwriting any existing value.
$ kubectl label --overwrite deployment my-deployment status=unhealthy

它也可以与其他Kubernetes对象一起使用。

格式:kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N


如果有人期望在设置部署标签时也更新Pod的标签,那么请注意: 此命令仅更新部署的metadata.labels。 它不会影响此部署的Pod,即spec.template.metadata.labels。使用patch命令来更新部署中的Pod标签。 - undefined

3

我认为问题是另外一件事。

在 Kubernetes 1.17 版本之前,kubectl run 命令创建了一个部署。
自 Kubernetes 1.18 版本以来,kubectl run 命令创建了一个 Pod。

Kubernetes 1.18 发布说明

kubectl run has removed the previously deprecated generators, along with flags 
unrelated to creating pods. kubectl run now only creates pods. See specific 
kubectl create subcommands to create objects other than pods. (#87077, 
@soltysh) [SIG Architecture, CLI and Testing]

0

从2022年开始,您可以使用以下命令来创建带有标签的Pod:

kubectl run POD_NAME --image IMAGE_NAME -l myapp:app

其中,myapp:app 是标签名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接