Kubernetes 规格:选择器“存在”未找到pod

Kubernetes 规格:选择器“存在”未找到pod,kubernetes,Kubernetes,我有以下服务,我想从一个存在的标签中选择一个pod 但它不起作用,你知道为什么吗 注意:mypod:存在于以下内容中: apiVersion: v1 kind: Service metadata: name: myservice labels: run: myservice spec: ports: - port: 8080 targetPort: 80 selector: mypod: exists type: LoadBalancer 我尝试

我有以下服务,我想从一个存在的标签中选择一个pod

但它不起作用,你知道为什么吗

注意:mypod:存在于以下内容中:

apiVersion: v1
kind: Service
metadata:
  name: myservice
  labels:
    run: myservice
spec:
  ports:
  - port: 8080
    targetPort: 80
  selector:
    mypod: exists
  type: LoadBalancer
我尝试选择的播客列表为kubectl get pods-show labels:

我无法控制uuid,我知道只有一个pod——这就是我尝试使用exists的原因

还有,如果你知道,如果不止一个会发生什么


但最重要的是,为什么它找不到存在的pod?

正如您从kubectl命令输出中看到的,带有密钥mypod的标签的值实际上是49c8b466-2fdd-4ea6-b799-bc60c259a8ec,并且不存在。我想你的CI/CD管道会覆盖这个?无论如何,像kubectl get po-l=mypod这样一个简单的只需键的查询应该可以工作。

除了@Michael Hausenblas answer

Kubernetes使用了两种类型的基于集合和基于等式

因为服务对象是旧的,并且是在基于集合的需求发布之前创建的,所以不能使用标签“myapp”存在这样的规则,而应该使用标签“myapp”=“abc”这样的相等规则

因此,如果您的CI/CD正在更改myapp label的值,您可以添加一些具有静态值的附加值,如appname:myapp,并在服务选择器中使用它。没有其他方法可以做到这一点

NAME                                         READY     STATUS    RESTARTS   AGE       LABELS
mypod-5bf4c474c8-l6rr2                1/1       Running   0          32m       mypod=49c8b466-2fdd-4ea6-b799-bc60c259a8ec