我正在尝试基于某些选择器为一组 pod 创建一个服务。例如,下面的get pods
命令会根据我的要求检索正确的 pod -
kubectl get pods --selector property1=dev,property2!=admin
以下是服务定义yaml的摘录,我正在尝试使用与上述相同的选择器 -
apiVersion: v1
kind: Service
metadata:
name: service1
spec:
type: NodePort
ports:
- name: port1
port: 30303
targetPort: 30303
selector:
property1: dev
<< property2: ???? >>>
我尝试过matchExpressions
,但没有意识到服务不在支持基于集的过滤器的资源之列。它导致了以下错误 -
error: error validating "STDIN": error validating data: ValidationError(Service.spec.selector.matchExpressions): invalid type for io.k8s.api.core.v1.ServiceSpec.selector: got "array", expected "string"; if you choose to ignore these errors, turn validation off with --validate=false
我正在运行上游 Kubernetes 1.12.5
我已经做了一些测试,但恐怕这是不可能的。根据文档,API 支持两种类型的选择器:
- 基于平等
- 基于集
kubeclt
允许使用=
、==
和!=
等运算符。所以当你使用$ kubectl get pods --selector property1=dev,property2!=admin
时它有效。
您要应用的配置将在set-based
选项中工作,因为它支持in
,notin
和exists
:
环境中(生产、质量保证)
层诺丁(前端、后端)
分区
!分区
不幸的是,set-based
只支持较新的复苏,如Job
,Deployment
,Replica Set
和Deamon Set
,但不支持services
。
可以在此处找到有关此内容的更多信息。
即使您将在 YAML 中将选择器设置为:
property2: !value
在服务中,property2
将没有任何价值。
Selector: property1=dev,property2=
作为附加信息,,
在services
中被识别为AND
。
由于我不知道您如何管理集群,我唯一能建议的是重新定义标签以仅使用AND
作为逻辑运算符。