我有以下服务,我想从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
的广告连拍?
答案 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-based
和Equality-based
。
由于Service
对象已旧并且是在Set-based
要求发布之前创建的,因此您无法使用if label 'myapp' exists
之类的规则,您应该使用等于if label 'myapp' = 'abc'
的等号。
因此,如果您的CI / CD正在更改myapp
标签的值,您可以添加一些具有静态值的附加值,例如appname: myapp
并在Service
选择器中使用它。没有其他方法可以做到。