将我的服务部署到生产环境:
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
后起作用了。