升级头盔模板后无效的规格选择器

pix*_*xel 3 kubernetes kubernetes-helm

我已经升级了头盔模板(手工)

先前的片段depoloyment.yaml

apiVersion: apps/v1beta2 kind: Deployment metadata:   name: {{ template "measurement-collector.fullname" . }}   labels:
    app: {{ template "measurement-collector.name" . }}
    chart: {{ template "measurement-collector.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }} spec:   replicas: {{ .Values.replicaCount }}   selector:
    matchLabels:
      app: {{ template "measurement-collector.name" . }}
      release: {{ .Release.Name }}
Run Code Online (Sandbox Code Playgroud)

新的一个:

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: {{ include "measurement-collector.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "measurement-collector.name" . }}
    helm.sh/chart: {{ include "measurement-collector.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ include "measurement-collector.name" . }}
      app.kubernetes.io/instance: {{ .Release.Name }}
Run Code Online (Sandbox Code Playgroud)

service.yaml

  name: {{ include "measurement-collector.fullname" . }}
  labels:
    app.kubernetes.io/name: {{ include "measurement-collector.name" . }}
    helm.sh/chart: {{ include "measurement-collector.chart" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
  type: {{ .Values.service.type }}
  ports:
      protocol: TCP
      name: http
  selector:
    app.kubernetes.io/name: {{ include "measurement-collector.name" . }}
    app.kubernetes.io/instance: {{ .Release.Name }}
Run Code Online (Sandbox Code Playgroud)

然后运行后: helm upgrade -i measurement-collector chart/measurement-collector --namespace prod --wait

我得到:

Error: UPGRADE FAILED: Deployment.apps "measurement-collector" is invalid: spec.selector: Invalid value: 
v1.LabelSelector{MatchLabels:map[string]string{"app.kubernetes.io/name":"measurement-collector", "app.kubernetes.io/instance":"measurement-collector"},         
MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable
Run Code Online (Sandbox Code Playgroud)

Mik*_*048 12

虽然@TigerBear 的答案是正确的,但我想我需要更详细地解释一下。这个问题是由一个简单的原因引起的——选择器的不变性。您无法更新以下选择器(我不确定这是完整列表,请随时纠正我):

  1. 副本集
  2. 部署
  3. 守护进程集

换句话说,例如,如果您有一个'my-app: ABC'在选择器内带有标签的部署,那么您将选择器内的标签更新到此:'my-app: XYZ',然后简单地应用此更改,例如如下所示:

kubectl apply -f deployment-file-name.yml
Run Code Online (Sandbox Code Playgroud)

它不会工作 - 你必须重新创建部署。

相关的github k8s问题,在部署文档中也有一些关于它的注释


Tig*_*ear 5

If you change the selector label, then you will need to purge the release first before deploying.

  • 您如何清除发布? (3认同)
  • @rhand:`kubectl删除部署<部署名称>` (3认同)