spec:selector" exists"找不到豆荚

时间:2018-04-03 08:10:10

标签: kubernetes

我有以下服务,我想从exists

标签中选择一个广告连播

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

注意:以下mypod: exists

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

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

我没有对uuid进行控制,我知道只有一个pod - 这就是我尝试使用exists的原因。

如果您知道,如果有多个会发生什么?

但最重要的是,为什么找不到exists的广告连拍?

2 个答案:

答案 0 :(得分:1)

正如您从kubectl命令输出中看到的那样,带有键mypod的标签的值实际上是49c8b466-2fdd-4ea6-b799-bc60c259a8ec而不是exists。所以我想你的CI / CD管道覆盖了这个?无论如何,像kubectl get po -l=mypod这样的简单的仅限密钥查询应该有效。

答案 1 :(得分:0)

除了@Michael Hausenblas的回答。

Kubernetes正在使用两种labels selectors - Set-basedEquality-based

由于Service对象已旧并且是在Set-based要求发布之前创建的,因此您无法使用if label 'myapp' exists之类的规则,您应该使用等于if label 'myapp' = 'abc'的等号。

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