Mongodb yaml"选择器"与模板"标签"不匹配



我正试图使用minikube在容器中本地设置mongodb,下面是这个示例存储库:https://github.com/pkdone/minikube-mongodb-demo

我得到错误:

The StatefulSet "mongod" is invalid:
* spec.selector: Required value
* spec.template.metadata.labels: Invalid value: map[string]string{"environment":"test", "replicaset":"MainRepSet", "role":"mongo"}: `selector` does not match template `labels`

这是我的完整yaml文件:

apiVersion: v1
kind: Service
metadata:
name: mongodb-service
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongod
spec:
serviceName: mongodb-service
replicas: 3
template:
metadata:
labels:
role: mongo
environment: test
replicaset: MainRepSet
spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: replicaset
operator: In
values:
- MainRepSet
topologyKey: kubernetes.io/hostname
terminationGracePeriodSeconds: 10
volumes:
- name: secrets-volume
secret:
secretName: shared-bootstrap-data
defaultMode: 256
containers:
- name: mongod-container
#image: pkdone/mongo-ent:3.4
image: mongo
command:
- "numactl"
- "--interleave=all"
- "mongod"
- "--wiredTigerCacheSizeGB"
- "0.1"
- "--bind_ip"
- "0.0.0.0"
- "--replSet"
- "MainRepSet"
- "--auth"
- "--clusterAuthMode"
- "keyFile"
- "--keyFile"
- "/etc/secrets-volume/internal-auth-mongodb-keyfile"
- "--setParameter"
- "authenticationMechanisms=SCRAM-SHA-1"
resources:
requests:
cpu: 0.2
memory: 200Mi
ports:
- containerPort: 27017
volumeMounts:
- name: secrets-volume
readOnly: true
mountPath: /etc/secrets-volume
- name: mongodb-persistent-storage-claim
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: mongodb-persistent-storage-claim
annotations:
volume.beta.kubernetes.io/storage-class: "standard"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Statefulset模板中缺少spec.selector字段。

选择器是对应该与副本匹配的pod的标签查询计数它必须与pod模板的标签匹配。更多信息:https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-选择器

您需要添加spec.selector以匹配一个或多个标签。示例:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongod
spec:
serviceName: mongodb-service
replicas: 3
selector:
matchLabels:
role: mongo
template:
metadata:
labels:
role: mongo
environment: test
replicaset: MainRepSet
...

您使用的示例可能已经过时。以前的apps/v1beta1spec.selector添加了一个默认值(如果为空(,但现在已经不是这样了。

选择器是对应该与副本匹配的pod的标签查询计数如果为空,则默认为pod模板上的标签。更多信息:https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-选择器

apps/v1beta2apps/v1中,应该显式设置它。

最新更新