部署无效:规范模板元数据标签:值无效



将我的服务部署到生产环境:

envsubst < ./kubernetes/pre-production/aks.yaml | kubectl apply -f -

我收到以下错误:

部署"moverick-mule-pre"无效: 规范模板元数据标签:无效值: map[string]string{"commit":"750a26deebc3582bec4bfbb2426b3f22ee042eaa", "app":"moverick-mule-pre"}:selector与模板不匹配 labels

我的 yaml 文件是:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: moverick-mule-pre
spec:
  replicas: 2
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: moverick-mule-pre
        commit: $CI_COMMIT_SHA
    spec:
      containers:
      - name: moverick-mule-pre
        image: $REGISTRY_SERVER_PRE/$CI_PROJECT_NAME:$CI_COMMIT_REF_NAME
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        envFrom:
          - secretRef:
              name: moverick-pre
        livenessProbe:
          httpGet:
            path: /console
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 5
        volumeMounts:
        - name: logs
          mountPath: /opt/mule/logs/
        - name: asc
          mountPath: /opt/mule/asc/
      imagePullSecrets:
      - name: registry-pre
      volumes:
      - name: logs
        azureFile:
          secretName: azure-files-pre
          shareName: logs-pre
          readOnly: false
      - name: asc
        azureFile:
          secretName: azure-asc-pre
          shareName: asc-pre
          readOnly: false
---
apiVersion: v1
kind: Service
metadata:
  name: moverick-mule-pre
spec:
  ports:
  - port: 80
  selector:
    app: moverick-mule-pre
您需要

在部署spec中添加selector

而且,这些selector应该与 PodTemplate 中的labels匹配。

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: moverick-mule-pre
spec:
  replicas: 2
  selector:
    matchLabels:
      app: moverick-mule-pre
      commit: $CI_COMMIT_SHA
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: moverick-mule-pre
        commit: $CI_COMMIT_SHA

否则,您将收到如下错误

部署"moverick-mule-pre"无效:

  • 规格选择器:必需值
  • spec.template.metadata.labels: 无效值: map[string]string{...} selector与模板labels不匹配
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-security-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: backend-security
  template:
    metadata:
      labels: # labels to select/identify the deployment
        app: backend-security
    spec:     # pod spec                  
      containers: 
      - name: backend-security
        image: yurifull/backend-security:v1.0.0 # image we pushed
        ports:
        - containerPort: 3001

这对我有用...

这可能发生在另一种情况下,即您对部署标签进行了更改,并且正在通过 argocd 进行部署。在这种情况下,Argocd 同步将失败

解决方案是删除部署并重新创建它。由于标签在 Kubernetes 中是不可变

你可以参考这个: https://github.com/kubernetes/kubernetes/issues/50808

只是对于遇到这种情况的人,在我的情况下,尝试部署(kubectl apply -f(导致所描述的错误,但是有一些状态为ImagePullBackOff的pod,删除这些kubectl apply后起作用了。