我正在尝试为基于某些选择器的一组 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
没有意识到 service is not among the resources that support set-based filters .它导致以下错误 -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
最佳答案
我做了一些测试,但恐怕这是不可能的。根据 docs API 支持两种类型的选择器:
kubeclt
允许使用像 =
这样的操作符, ==
和 !=
.所以当你使用 $ kubectl get pods --selector property1=dev,property2!=admin
时它有效.您要应用的配置在
set-based
中有效选项,因为它支持 in
, notin
和 exists
:environment in (production, qa)
tier notin (frontend, backend)
partition
!partition
不幸的是
set-based
仅由较新的资源支持,如 Job
, Deployment
, Replica Set
和 Deamon Set
但是是不支持 services
.更多信息请见 here .
即使您将 YAML 中的选择器设置为:
property2: !value
服务中,
property2
将没有任何值(value)。Selector: property1=dev,property2=
作为附加信息
,
被识别为 AND
在 services
.由于我不知道您是如何管理集群的,因此我唯一能建议的是重新定义标签以仅使用
AND
作为逻辑运算符。
关于kubernetes - 如何在 kubernetes 服务定义 yaml 中指定不相等的选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58917686/