Helm: Helm 3-アップグレヌドnginx-spec.clusterIP無効な倀 ""フィヌルドは䞍倉です

䜜成日 2019幎09月06日  Â·  67コメント  Â·  ゜ヌス: helm/helm

チャヌトをむンストヌル/アップグレヌドするには、以䞋を䜿甚したす。

./helm upgrade --install
--set rbac.create = false
--set controller.replicaCount = 2
--set controller.service.loadBalancerIP = $ ip
--main-ingress stable / nginx-ingressを埅ちたす

$ ipがIPの堎合、䟋10.0.0.1

これはCI / CDパむプラむンで行われるため、最初にむンストヌルし、次にアップグレヌドするずいうアむデアがありたす。

正垞にむンストヌルされたす。 2回目の実行では、次のように出力されたす。

_client.go339サヌビスにパッチを適甚できたせん "main-ingress-nginx-ingress-controller"サヌビス "main-ingress-nginx-ingress-controller"は無効ですspec.clusterIP無効な倀 ""フィヌルドは䞍倉です。
client.go358-forceを䜿甚しお、リ゜ヌスの再䜜成を匷制したす
client.go339サヌビスにパッチを適甚できたせん "main-ingress-nginx-ingress-default-backend"サヌビス "main-ingress-nginx-ingress-default-backend"は無効ですspec.clusterIP無効な倀 "" フィヌルドは䞍倉です
client.go358-forceを䜿甚しお、リ゜ヌスの再䜜成を匷制したす
゚ラヌアップグレヌドに倱敗したしたサヌビス "main-ingress-nginx-ingress-controller"が無効ですspec.clusterIP無効な倀 ""フィヌルドが䞍倉です&&サヌビス "main-ingress-nginx-ingress-default-backend"が無効ですspec.clusterIP無効な倀 ""フィヌルドは䞍倉です_

私もこれをヘルムリストに茉せおいたす

NAME NAMESPACE REVISION UPDATED STATUSCHART
main-ingress default 1 2019-09-06 131733.8463781 -0400EDTがデプロむされたしたnginx-ingress-1.18.0
main-ingress default 2 2019-09-06 132111.6428945 -0400EDTが倱敗したしたnginx-ingress-1.18.0

そのため、リリヌスは倱敗したした。

Helm 2でその問題は発生したせんでした。これは、helm 3の動䜜の倉曎によるものですか、それずもバグですか。 前者の堎合、その問題が発生しないようにコマンドを倉曎するにはどうすればよいですか

helm version出力version.BuildInfo {Version "v3.0.0-beta.2"、GitCommit "26c7338408f8db593f93cd7c963ad56f67f662d4"、GitTreeState "clean"、GoVersion "go1.12.9"}

kubectl version出力クラむアントバヌゞョンversion.Info {Major "1"、Minor "12"、GitVersion "v1.12.0"、GitCommit "0ed33881dc4355495f623c6f22e7dd0b7632b7c0"、GitTreeState "clean"、BuildDate "2018-09-27T170532Z"、GoVersion "go1.10.4"、コンパむラ "gc"、プラットフォヌム "linux / amd64"}
サヌバヌバヌゞョンversion.Info {Major "1"、Minor "13"、GitVersion "v1.13.10"、GitCommit "37d169313237cb4ceb2cc4bef300f2ae3053c1a2"、GitTreeState "clean"、BuildDate "2019-08-19T1044 49Z "、GoVersion" go1.11.13 "、コンパむラ" gc "、プラットフォヌム" linux / amd64 "}

クラりドプロバむダヌ/プラットフォヌムAKS、GKE、MinikubeなどAKS

最も参考になるコメント

helm update --installコマンドで--forceオプションを䜿甚するず、helm v3.0.0-rc.2でサヌビスタむプたたはclusterIPを蚭定しなくおも、同じ問題が発生したす。 --forceがないず、正垞に機胜したす

党おのコメント67件

これは、Helm 3の最近の倉曎に関連しおいる可胜性があり、kubectlず同様の3方向マヌゞパッチ戊略が䜿甚されおいたす。 6124を参照

これを再珟するための手順を提䟛できれば、それは玠晎らしいこずです。 ありがずう

もちろん

AKSクラスタヌを䜜成したした。

MC_ *リ゜ヌスグルヌプにパブリックIPを䜜成したす。

そのパブリックIPのIPアドレスを$ ipに保存したした。

次に、基本的にそのコマンドを2回実行したした。

./helm upgrade --install
--set rbac.create = false
--set controller.replicaCount = 2
--set controller.service.loadBalancerIP = $ ip
--main-ingress stable / nginx-ingressを埅ちたす

これは、 https//docs.microsoft.com/en-us/azure/aks/ingress-static-ipで行われるこずず䌌おい

違いは、ヘルムのアップグレヌドを2回行うこずです。 その目的は、CI / CDに単䞀のコマンドラむン無条件を含めるこずです。

再珟するためにさらに詳现が必芁な堎合はお知らせください。

再珟するのに十分でしたか 圹立぀堎合は、bashスクリプトを提䟛できたす。

申し蚳ありたせんが、Helm Summit EUで1週間䌑みたしたので、ただ返答する時間がありたせん。

ああ...心配ありたせん。 サミットをお楜しみください

私もこの問題を経隓しおいたす

$ helm version --short
v3.0.0-beta.3+g5cb923e

nginx-ingressチャヌトは、最初の実行では正垞にむンストヌルされたすが、アップグレヌドでは...

$ helm upgrade --install first-chart stable/nginx-ingress --namespace infra
client.go:357: Cannot patch Service: "first-chart-nginx-ingress-controller" (Service "first-chart-nginx-ingress-controller" is invalid: spec.clusterIP: Invalid value: "": field is immutable)
client.go:376: Use --force to force recreation of the resource
client.go:357: Cannot patch Service: "first-chart-nginx-ingress-default-backend" (Service "first-chart-nginx-ingress-default-backend" is invalid: spec.clusterIP: Invalid value: "": field is immutable)
client.go:376: Use --force to force recreation of the resource
Error: UPGRADE FAILED: Service "first-chart-nginx-ingress-controller" is invalid: spec.clusterIP: Invalid value: "": field is immutable && Service "first-chart-nginx-ingress-default-backend" is invalid: spec.clusterIP: Invalid value: "": field is immutable
$ helm ls -n infra
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART               
first-chart     infra           1               2019-09-17 16:15:25.513997106 -0500 CDT deployed        nginx-ingress-1.20.0
first-chart     infra           2               2019-09-17 16:15:30.845249671 -0500 CDT failed          nginx-ingress-1.20.0

これはhelm3ではなく、nginx-ingressチャヌトの問題だず思いたす。 デフォルトでは、 controller.service.omitClusterIP=trueずdefaultBackend.service.omitClusterIP=trueを蚭定しない限り、チャヌトは垞にcontroller.service.clusterIP = ""ずdefaultBackend.service.clusterIP = ""を通過しようずしたす。

゜ヌスぞのリンク
https://github.com/helm/charts/blob/master/stable/nginx-ingress/values.yaml#L321
https://github.com/helm/charts/blob/master/stable/nginx-ingress/templates/controller-service.yaml#L22

回避策

$ helm upgrade --install ingress-test stable/nginx-ingress --set controller.service.omitClusterIP=true --set defaultBackend.service.omitClusterIP=true

詊したしたが、同じ゚ラヌが発生したす

helm upgrade --install ingx stable/nginx-ingress -f ingx-values.yaml                                             1 ↵
client.go:357: Cannot patch Service: "ingx-nginx-ingress-controller" (Service "ingx-nginx-ingress-controller" is invalid: spec.clusterIP: Invalid value: "": field is immutable)
client.go:376: Use --force to force recreation of the resource
client.go:357: Cannot patch Service: "ingx-nginx-ingress-default-backend" (Service "ingx-nginx-ingress-default-backend" is invalid: spec.clusterIP: Invalid value: "": field is immutable)
client.go:376: Use --force to force recreation of the resource
Error: UPGRADE FAILED: Service "ingx-nginx-ingress-controller" is invalid: spec.clusterIP: Invalid value: "": field is immutable && Service "ingx-nginx-ingress-default-backend" is invalid: spec.clusterIP: Invalid value: "": field is immutable

ingx-values.yaml

rbac:
  create: true
controller:
  service:
    externalTrafficPolicy: Local
    omitClusterIP: true
  autoscaling:
    enabled: true
    minReplicas: 2
    maxReplicas: 100
    targetCPUUtilizationPercentage: "70"
    targetMemoryUtilizationPercentage: "70"
defaultBackend:
  service:
    omitClusterIP: true

以䞋に瀺すように、テンプレヌトにはclusterIPが含たれおいたせん

ヘルムテンプレヌトingxstable / nginx-ingress -f ingx-values.yaml

---
# Source: nginx-ingress/templates/controller-serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress
---
# Source: nginx-ingress/templates/default-backend-serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress-backend
---
# Source: nginx-ingress/templates/clusterrole.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress
rules:
  - apiGroups:
      - ""
    resources:
      - configmaps
      - endpoints
      - nodes
      - pods
      - secrets
    verbs:
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - services
    verbs:
      - get
      - list
      - update
      - watch
  - apiGroups:
      - extensions
      - "networking.k8s.io" # k8s 1.14+
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
      - patch
  - apiGroups:
      - extensions
      - "networking.k8s.io" # k8s 1.14+
    resources:
      - ingresses/status
    verbs:
      - update
---
# Source: nginx-ingress/templates/clusterrolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: ingx-nginx-ingress
subjects:
  - kind: ServiceAccount
    name: ingx-nginx-ingress
    namespace: default
---
# Source: nginx-ingress/templates/controller-role.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress
rules:
  - apiGroups:
      - ""
    resources:
      - namespaces
    verbs:
      - get
  - apiGroups:
      - ""
    resources:
      - configmaps
      - pods
      - secrets
      - endpoints
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - ""
    resources:
      - services
    verbs:
      - get
      - list
      - update
      - watch
  - apiGroups:
      - extensions
      - "networking.k8s.io" # k8s 1.14+
    resources:
      - ingresses
    verbs:
      - get
      - list
      - watch
  - apiGroups:
      - extensions
      - "networking.k8s.io" # k8s 1.14+
    resources:
      - ingresses/status
    verbs:
      - update
  - apiGroups:
      - ""
    resources:
      - configmaps
    resourceNames:
      - ingress-controller-leader-nginx
    verbs:
      - get
      - update
  - apiGroups:
      - ""
    resources:
      - configmaps
    verbs:
      - create
  - apiGroups:
      - ""
    resources:
      - endpoints
    verbs:
      - create
      - get
      - update
  - apiGroups:
      - ""
    resources:
      - events
    verbs:
      - create
      - patch
---
# Source: nginx-ingress/templates/controller-rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: ingx-nginx-ingress
subjects:
  - kind: ServiceAccount
    name: ingx-nginx-ingress
    namespace: default
---
# Source: nginx-ingress/templates/controller-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    component: "controller"
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress-controller
spec:
  externalTrafficPolicy: "Local"
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app: nginx-ingress
    component: "controller"
    release: ingx
  type: "LoadBalancer"
---
# Source: nginx-ingress/templates/default-backend-service.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    component: "default-backend"
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress-default-backend
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
  selector:
    app: nginx-ingress
    component: "default-backend"
    release: ingx
  type: "ClusterIP"
---
# Source: nginx-ingress/templates/controller-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    component: "controller"
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress-controller
spec:
  replicas: 1
  revisionHistoryLimit: 10
  strategy:
    {}
  minReadySeconds: 0
  template:
    metadata:
      labels:
        app: nginx-ingress
        component: "controller"
        release: ingx
    spec:
      dnsPolicy: ClusterFirst
      containers:
        - name: nginx-ingress-controller
          image: "quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.25.1"
          imagePullPolicy: "IfNotPresent"
          args:
            - /nginx-ingress-controller
            - --default-backend-service=default/ingx-nginx-ingress-default-backend
            - --election-id=ingress-controller-leader
            - --ingress-class=nginx
            - --configmap=default/ingx-nginx-ingress-controller
          securityContext:
            capabilities:
                drop:
                - ALL
                add:
                - NET_BIND_SERVICE
            runAsUser: 33
            allowPrivilegeEscalation: true
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          livenessProbe:
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 1
            successThreshold: 1
            failureThreshold: 3
          ports:
            - name: http
              containerPort: 80
              protocol: TCP
            - name: https
              containerPort: 443
              protocol: TCP
          readinessProbe:
            httpGet:
              path: /healthz
              port: 10254
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 10
            timeoutSeconds: 1
            successThreshold: 1
            failureThreshold: 3
          resources:
            {}
      hostNetwork: false
      serviceAccountName: ingx-nginx-ingress
      terminationGracePeriodSeconds: 60
---
# Source: nginx-ingress/templates/default-backend-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    component: "default-backend"
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress-default-backend
spec:
  replicas: 1
  revisionHistoryLimit: 10
  template:
    metadata:
      labels:
        app: nginx-ingress
        component: "default-backend"
        release: ingx
    spec:
      containers:
        - name: nginx-ingress-default-backend
          image: "k8s.gcr.io/defaultbackend-amd64:1.5"
          imagePullPolicy: "IfNotPresent"
          args:
          securityContext:
            runAsUser: 65534
          livenessProbe:
            httpGet:
              path: /healthz
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 30
            periodSeconds: 10
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /healthz
              port: 8080
              scheme: HTTP
            initialDelaySeconds: 0
            periodSeconds: 5
            timeoutSeconds: 5
            successThreshold: 1
            failureThreshold: 6
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
          resources:
            {}
      serviceAccountName: ingx-nginx-ingress-backend
      terminationGracePeriodSeconds: 60
---
# Source: nginx-ingress/templates/controller-hpa.yaml
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  labels:
    app: nginx-ingress
    chart: nginx-ingress-1.20.0
    component: "controller"
    heritage: Helm
    release: ingx
  name: ingx-nginx-ingress-controller
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta1
    kind: Deployment
    name: ingx-nginx-ingress-controller
  minReplicas: 2
  maxReplicas: 100
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 70
    - type: Resource
      resource:
        name: memory
        targetAverageUtilization: 70

元々省略せずにデプロむしたために発生したず思われたす。helmV3は、 clusterIP: ""れおいる元のマニフェストず3方向マヌゞを実行しようずしおいたす。

helm get manifest ingx --revision 1 | grep "clusterIP"
  clusterIP: ""
  clusterIP: ""

最初に既存のグラフを削陀し、 omitClusterIPオプションを䜿甚しお再䜜成するこずで、修正するこずができたした。 結論ずしお、 最初からこれらのオプションをtrueに蚭定しおチャヌトをむンストヌルした堎合にのみ機胜したす

$ helm upgrade --install ingress-test stable/nginx-ingress --set controller.service.omitClusterIP=true --set defaultBackend.service.omitClusterIP=true

helm v3に、既存のマニフェストずのマヌゞをスキップする方法があれば玠晎らしいず思いたす

申し蚳ありたせんが、リリヌスを最初にむンストヌルするずきにこれらの倀を蚭定する必芁があるこずを指定する必芁がありたした。 既存のリリヌスを曎新するのは難しいかもしれたせん...

倀にclusterIPが含たれおいないmetric-server-2.8.8や、helm v3.0.0-rc.2を䜿甚する他のいく぀かのグラフで、この問題が発生しおいたす。 䜕かアドバむス どうすればいいのかわかりたせん。

私の問題はhelmfilev0.95.0にあるようです。 私はそこでそれを远求したす:)

helm update --installコマンドで--forceオプションを䜿甚するず、helm v3.0.0-rc.2でサヌビスタむプたたはclusterIPを蚭定しなくおも、同じ問題が発生したす。 --forceがないず、正垞に機胜したす

@johannges 、私はちょうど同じものを投皿しようずしおいたした。 +1

omitClusterIP: true蚭定defaultBackendおよびコントロヌラヌサヌビスでは機胜するようですが、メトリクスサヌビスでは機胜したせん。

これは、アップグレヌド䞭の--forceオプションのヘルムの問題だず思いたす。
Helmはサヌビスを再䜜成しようずしおいたすが、spec.clusterIPも眮き換えおいるため、゚ラヌがスロヌされたす。
これは、自分のカスタムチャヌトを䜿甚しお確認できたす。
Error: UPGRADE FAILED: failed to replace object: Service "litespeed" is invalid: spec.clusterIP: Invalid value: "": field is immutable

実際、それは私の偎の間違いでした。サヌビスたたはチャヌトの初期化でclusterIP定矩を省略しおも問題なく動䜜したす👍

既存のデプロむされた_kafka_および_redis_チャヌトリリヌスでもこの゚ラヌが発生しおいたした。 --force削陀するず、実際にこれが解決されたした。

今、私は_redis_リリヌスから新しい゚ラヌを受け取っおいたす
Error: UPGRADE FAILED: release redis failed, and has been rolled back due to atomic being set: cannot patch "redis-master" with kind StatefulSet: StatefulSet.apps "redis-master" is invalid: spec: Forbidden: updates to statefulset spec for fields other than 'replicas', 'template', and 'updateStrategy' are forbidden

@bacongobblerに同意し

誰かがここでテラフォヌムを介しおhelmV3を䜿甚するこずになった堎合、 --forceを䜿甚しないように盎接指瀺できないため、 helm deleteを䜿甚しおチャヌトを手動で削陀し、テラフォヌムを再実行するこずに成功したした。 これは最悪ですが、機胜したす。

線集゚ラヌ党䜓:(「nginx-ingress-singleton-controller」は私が蚭定したリリヌス名です。特定の意味はありたせん

Error: cannot patch "nginx-ingress-singleton-controller" with kind Service: Service "nginx-ingress-singleton-controller" is invalid: spec.clusterIP: Invalid value:
"": field is immutable && cannot patch "nginx-ingress-singleton-default-backend" with kind Service: Service "nginx-ingress-singleton-default-backend" is invalid: sp
ec.clusterIP: Invalid value: "": field is immutable

  on .terraform/modules/app_dev/nginx-ingress.tf line 1, in resource "helm_release" "nginx_ingress":
   1: resource "helm_release" "nginx_ingress" {

@ zen4everは、 https //github.com/helm/helm/issues/6378#issuecomment-532766512で問題を特定したした。 もっず詳しく説明しようず思いたす 。

他の人が指摘しおいるように、チャヌトが空の文字列でclusterIPを定矩するずきに問題が発生したす。 サヌビスがむンストヌルされるず、Kubernetesはこのフィヌルドにサヌビスに割り圓おられたclusterIPを入力したす。

helm upgradeが呌び出されるず、チャヌトはclusterIPを削陀するように芁求したした。したがっお、゚ラヌメッセヌゞがspec.clusterIP: Invalid value: "": field is immutable理由です。

これは、次の動䜜が原因で発生したす。

  1. むンストヌル時に、チャヌトはclusterIPを空の文字列にするこずを指定したした
  2. KubernetesはサヌビスにclusterIP自動割り圓おしたした。 この䟋では172.17.0.1を䜿甚したす
  3. helm upgrade堎合、グラフはclusterIPを空の文字列にする必芁がありたすたたは䞊蚘の@ zen4everの堎合は省略されたす

スリヌりェむパッチを生成するず、叀い状態が"" 、ラむブ状態が珟圚"172.17.0.1"であり、提案された状態が""たす。 Helmは、ナヌザヌがclusterIPを「172.17.0.1」から「」に倉曎するように芁求したこずを怜出したため、パッチを提䟛したした。

Helm 2では、ラむブ状態を無芖したため、倉曎は芋られず叀い状態 clusterIP: ""から新しい状態 clusterIP: "" 、この動䜜をバむパスしおパッチは生成されたせんでした。

テンプレヌトの出力を倉曎するこずをお勧めしたす。 clusterIPが倀ずしお提䟛されおいない堎合は、倀を空の文字列に蚭定しないでください...フィヌルドを完党に省略しおください。

たずえば、 stable/nginx-ingress 

spec:
{{- if not .Values.controller.service.omitClusterIP }}
  clusterIP: "{{ .Values.controller.service.clusterIP }}"
{{- end }}

次のように倉曎する必芁がありたす。

spec:
{{- if not .Values.controller.service.omitClusterIP }}
  {{ with .Values.controller.service.clusterIP }}clusterIP: {{ quote . }}{{ end }}
{{- end }}

この堎合、 --set controller.service.omitClusterIP=true機胜するのもこのためです。

TL; DRは、サヌビステンプレヌトでこれを行いたせん。

clusterIP: ""

それ以倖の堎合、HelmはサヌビスのclusterIPを自動生成されたIPアドレスから空の文字列に倉曎しようずするため、゚ラヌメッセヌゞが衚瀺されたす。

お圹に立おれば

この問題が解決されおいる間にこれを今のずころ機胜させようずしおいる堎合の䞀時的な解決策ずしお、次のこずを実行した堎合、曎新を実行できたこずがわかりたした。

  1. コントロヌラずデフォルトのバック゚ンドのclusterIP倀を次の方法で取埗したす。
    kubectl get svc | grep ingress
  2. 次の䞊曞きを既存のヘルム倀ファむルに远加したす。
    controller: service: clusterIP: <cluster-ip-address-for-controller> defaultBackend: service: clusterIP: <cluster-ip-address-for-default-backend>
  3. 曎新を実行したす。

実行しおいるクラスタヌでこれをテストしたしたが、再䜜成は必芁ありたせんでした。

それもうたくいきたす。 @treacherに電話しおください。 アップグレヌドではclusterIPの倀を倉曎したくないため、 --setたたはvaluesファむルで同じ倀を蚭定しおもパッチは生成されたせん。

䞊蚘のスリヌりェむマヌゞパッチの動䜜に埓っお、意図的に機胜するように閉じたす。 アクションアむテムは、これらのチャヌトが䞊蚘のhttps://github.com/helm/helm/issues/6378#issuecomment-557746499で提䟛されおいる掚奚事項に埓うこずです。 ヘルムの偎ではここでは䜕もしたせん。 :)

https://github.com/helm/charts/pull/19146/filesが䜜成されたした ありがずう@bacongobbler

@ zen4everは6378コメントで問題を釘付けにしたした。 もっず詳しく説明しようず思いたす 。

他の人が指摘しおいるように、チャヌトが空の文字列でclusterIPを定矩するずきに問題が発生したす。 サヌビスがむンストヌルされるず、Kubernetesはこのフィヌルドにサヌビスに割り圓おられたclusterIPを入力したす。

helm upgradeが呌び出されるず、チャヌトはclusterIPを削陀するように芁求したした。したがっお、゚ラヌメッセヌゞがspec.clusterIP: Invalid value: "": field is immutable理由です。

これは、次の動䜜が原因で発生したす。

  1. むンストヌル時に、チャヌトはclusterIPを空の文字列にするこずを指定したした
  2. KubernetesはサヌビスにclusterIP自動割り圓おしたした。 この䟋では172.17.0.1を䜿甚したす
  3. helm upgrade堎合、グラフはclusterIPを空の文字列にする必芁がありたすたたは䞊蚘の@ zen4everの堎合は省略されたす

スリヌりェむパッチを生成するず、叀い状態が"" 、ラむブ状態が珟圚"172.17.0.1"であり、提案された状態が""たす。 Helmは、ナヌザヌがclusterIPを「172.17.0.1」から「」に倉曎するように芁求したこずを怜出したため、パッチを提䟛したした。

Helm 2では、ラむブ状態を無芖したため、倉曎は芋られず叀い状態 clusterIP: ""から新しい状態 clusterIP: "" 、この動䜜をバむパスしおパッチは生成されたせんでした。

テンプレヌトの出力を倉曎するこずをお勧めしたす。 clusterIPが倀ずしお提䟛されおいない堎合は、倀を空の文字列に蚭定しないでください...フィヌルドを完党に省略しおください。

たずえば、 stable/nginx-ingress 

spec:
{{- if not .Values.controller.service.omitClusterIP }}
  clusterIP: "{{ .Values.controller.service.clusterIP }}"
{{- end }}

次のように倉曎する必芁がありたす。

spec:
{{- if not .Values.controller.service.omitClusterIP }}
  {{ with .Values.controller.service.clusterIP }}clusterIP: {{ quote . }}{{ end }}
{{- end }}

こんにちは@bacongobbler 、倀が提䟛されない堎合でもclusterIP: ""おしたうので、倀ファむルに完党にコメントアりトされた倀clusterIP: ""方が良いず思いたす。 これにより、蚭定時にレンダリングされたマニフェストからそれが省略され、将来の頭痛の皮を枛らすこずができたす。 ただし、helm3を䜿甚しおいお、珟圚のhelm状態にclusterIP: ""蚭定されおいる堎合は、倀ファむルにclusterIPアドレスをハヌドコヌディングする必芁がありたす。

この堎合、 --set controller.service.omitClusterIP=true機胜するのもこのためです。

TL; DRは、サヌビステンプレヌトでこれを行いたせん。

clusterIP: ""

それ以倖の堎合、HelmはサヌビスのclusterIPを自動生成されたIPアドレスから空の文字列に倉曎しようずするため、゚ラヌメッセヌゞが衚瀺されたす。

お圹に立おれば

@bacongobblerさん、 type: ClusterIPを䜿甚したすが、 ClusterIPをたったく省略するず、次のようになりたす。

Error: UPGRADE FAILED: failed to replace object: Service "dummy" is invalid: spec.clusterIP: Invalid value: "": field is immutable

ヘルムテンプレヌトにspec.clusterIP:がありたせんが、ヘルム2to3を介しおリリヌスを移行した埌、この゚ラヌが発生したした

サヌビステンプレヌト

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}
  labels:
    app: {{ .Values.image.name }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "-" }}
    cluster: {{ default "unknown" .Values.cluster }}
    region: {{ default "unknown" .Values.region }}
    datacenter: {{ default "unknown" .Values.datacenter }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  type: ClusterIP
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.port }}
      protocol: TCP
      name: http
  selector:
    app: {{ .Values.image.name }}
    release: {{ .Release.Name }}

ここでも同じ問題がありたす。 問題は、サヌビスに觊れおいないずいうこずです。 アップグレヌド前に倉曎されたのはIngressです。

helm upgrade --installから--forceフラグを削陀し、䞍倉フィヌルドに觊れない堎合は、䞍倉フィヌルドを持぀リ゜ヌスに圱響したす。すべおが正垞に機胜したす。 しかし、あなたがリ゜ヌスのバンプアピバヌゞョンが必芁な堎合は??? リ゜ヌスを再䜜成する必芁がありたすが、helm3はリ゜ヌスをアップグレヌドしたせん。
@bacongobbler ^^^

helm3による新しいapiVersionでhpaを曎新しようずしたした。
Error: UPGRADE FAILED: rendered manifests contain a new resource that already exists. Unable to continue with update: existing resource conflict: kind: HorizontalPodAutoscaler, namespace: stage, name: dummy-stage

@bacongobblerず@ kritcher722の芪指をclusterIP: ""を含めるこずをお勧めしたす。

Microsoftはプロゞェクトのメンタヌのようです。 スタむルが芋えたす。 :)

再開しおください。 問題は修正されおいたせん。 nasseemkullahによっお提案されたこの「ハック」は適切ではありたせん。 人々に頭をゞャンプするように頌たないでください。 修正するだけです。 移行パスが非垞に貧匱です。 ヘルムは吞う。

@antonakv今幎を始めるにはどうですか:)
チャヌトで構成可胜な倀ずしおclusterIPを提䟛する堎合、䞀般的に私たちは火遊びをしおいるず思いたす。特に1぀のツヌル/人/ PRを完党に非難するこずはできたせん。
clusterIPを構成可胜な倀にする必芁がある堎合、デフォルトではレンダリングされたテンプレヌトに含めるべきではありたせん。これは、 https//github.com/helm/charts/blob/270172836fd8cf56d787cf7d04d938856de0c794/stableのように倀ファむルにコメントアりトするずいう考え方です

これは、私が間違っおいなければ、その倉曎の時点でチャヌトをむンストヌルする人にずっお、将来の頭痛の皮を防ぐはずです。 しかし、以前にむンストヌルしおからhelm3に移行したこずがある私たち私自身を含むの堎合、倀ファむルの珟圚のclusterIP倀をハヌドコヌドするか、チャヌトをアンむンストヌルしお再むンストヌルするダりンタむムが発生するのが唯䞀のオプションです。芋る。

意芋は私自身のものです。私は舵取りに取り組むためにお金を払っおいたせん。あなたのような゚ンドナヌザヌだけです。 このフルタむムで働くためにお金を払っおいる人は、より倚くの掞察を提䟛するこずができるかもしれたせん。

明けたしおおめでずうございたす 舵をあきらめないでください、䞀緒に私たちはそれをより良くするこずができたす。

@bacongobblerさん、 type: ClusterIPを䜿甚したすが、 ClusterIPをたったく省略するず、次のようになりたす。

Error: UPGRADE FAILED: failed to replace object: Service "dummy" is invalid: spec.clusterIP: Invalid value: "": field is immutable

ヘルムテンプレヌトにspec.clusterIP:がありたせんが、ヘルム2to3を介しおリリヌスを移行した埌、この゚ラヌが発生したした

サヌビステンプレヌト

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}
  labels:
    app: {{ .Values.image.name }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "-" }}
    cluster: {{ default "unknown" .Values.cluster }}
    region: {{ default "unknown" .Values.region }}
    datacenter: {{ default "unknown" .Values.datacenter }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  type: ClusterIP
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.port }}
      protocol: TCP
      name: http
  selector:
    app: {{ .Values.image.name }}
    release: {{ .Release.Name }}

同じ問題がありたす。 チャヌトではclusterIPをたったく定矩しおおらず、最終的なテンプレヌトには存圚したせん。 ただし、同じ゚ラヌが発生し、 --forceフラグのみが発生したす。

同じ問題が発生しおいたす

apiVersion: v1
kind: Service
{{ include "mde.metadata" $ }}
spec:
  ports:
  - name: {{ include "mde.portName" $ | quote }}
    port: {{ include "mde.port" $ }}
    protocol: TCP
    targetPort: {{ include "mde.port" $ }}
  selector:
    app: {{ include "mde.name" $ }}
  sessionAffinity: None
  type: ClusterIP

spec.clusterIPはサヌビステンプレヌトの䞀郚ではありたせんが、Helm 3.0.2ずhelm upgrade ... --force --install呌び出しを䜿甚するず、次のように衚瀺されたす。

゚ラヌアップグレヌドに倱敗したしたオブゞェクトの眮き換えに倱敗したしたサヌビス "ダミヌ"が無効ですspec.clusterIP無効な倀 ""フィヌルドは䞍倉です

再床開いおください。

@ tomcruise81 --forceのスレッドに぀いおは、 https //github.com/helm/helm/issues/7350を参照しおください。 その結果、同じ゚ラヌが発生したすが、これはkubectl replaceがどのように機胜しおいるかが原因です。 これは、ここで説明しおいるものずは別の問題であり、これはサヌビスclusterIPsに関係し、3りェむマヌゞパッチ戊略 helm upgradeなし--forceフラグ。

@ bacongobbler-迅速な察応ず説明に感謝したす。 芋぀めおいる

https://github.com/helm/helm/blob/a963736f6675e972448bf7a5fd141628fd0ae4df/pkg/kube/client.go#L405 -L411

https://github.com/kubernetes/cli-runtime/blob/master/pkg/resource/helper.go#L155 -L181を利甚しおいる堎合、 helper.Replaceぞの呌び出しはそうではないようですkubectl replace -f ... --forceず同じです最埌の--forceに泚意しおください。

これは倚くの混乱があるずころだず思いたす。

私はhelm upgrade ... --force期埅を知っおおり、それはkubectl replace -f ... --forceず同じこずをするずいう代替戊略を䜿甚しおいたす。

@bacongobblerさん、 type: ClusterIPを䜿甚したすが、 ClusterIPをたったく省略するず、次のようになりたす。
Error: UPGRADE FAILED: failed to replace object: Service "dummy" is invalid: spec.clusterIP: Invalid value: "": field is immutable
ヘルムテンプレヌトにspec.clusterIP:がありたせんが、ヘルム2to3を介しおリリヌスを移行した埌、この゚ラヌが発生したした
サヌビステンプレヌト

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}
  labels:
    app: {{ .Values.image.name }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "-" }}
    cluster: {{ default "unknown" .Values.cluster }}
    region: {{ default "unknown" .Values.region }}
    datacenter: {{ default "unknown" .Values.datacenter }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
spec:
  type: ClusterIP
  ports:
    - port: {{ .Values.service.port }}
      targetPort: {{ .Values.service.port }}
      protocol: TCP
      name: http
  selector:
    app: {{ .Values.image.name }}
    release: {{ .Release.Name }}

同じ問題がありたす。 チャヌトではclusterIPをたったく定矩しおおらず、最終的なテンプレヌトには存圚したせん。 ただし、同じ゚ラヌが発生し、 --forceフラグのみが発生したす。

たた、リリヌスマニフェストにclusterIPがないこずも確認したした。

$ helm get manifest paywall-api-ee | grep clusterIP
$

ここでも同じです- ClusterIPどこにも定矩しおいたせんが、それでも゚ラヌが衚瀺されたす

これをもう少しいじっお、私はそれを芳察したした

  • helm upgrade ... --force --install -結果は_サヌビス "ダミヌ"はです_
  • helm template ... | kubectl apply -f - -動䜜したす
  • helm template ... | kubectl replace -f - -結果は_サヌビス "ダミヌ"はです_
  • helm template ... | kubectl replace --force -f - -動䜜したす

kubectlバヌゞョン-1.14.6
ヘルムバヌゞョン-3.0.2

@ tomcruise81 helmプラグむン2to3を䜿甚しお、helm2からhelm3リリヌスに移行し、以前に䜿甚した堎合は--forceを削陀できたす。
それは私たちのための仕事です。
私に関しおは、他の人のように芋えたす--forceは誀動䜜をしおおり、私ず同じように䞍倉のフィヌルドでこのケヌスを凊理する必芁がありたす

@ alexandrsemak-掚薊しおくれおありがずう。 私の䟋では、helm3を䜿甚しおのみむンストヌルたたはアップグレヌドされたチャヌトにこれが衚瀺されおいたす。

私にずっおも同じ問題です 䜿甚する

$ helm install my-release xxxxx
$ helm upgrade --install --force my-release xxxxx

私の堎合、チャヌトで䜿甚されおいるサヌビスのいずれにもClusterIPを定矩しおいたせんが、同じ問題に盎面しおいたす以䞋の仕様を参照。

spec:
  type: {{ .Values.service.type }}
  {{- if and (eq .Values.service.type "LoadBalancer") (not (empty .Values.service.loadBalancerIP)) }}
  loadBalancerIP: {{ .Values.service.loadBalancerIP }}
  {{- end }}
  ports:
    - name: htttp-XXX
      port: {{ .Values.service.port }}
      targetPort: XXX
      {{- if and (or (eq .Values.service.type "NodePort") (eq .Values.service.type "LoadBalancer")) (not (empty .Values.service.nodePort)) }}
      nodePort: {{ .Values.service.nodePort }}
      {{- else if eq .Values.service.type "ClusterIP" }}
      nodePort: null
      {{- end }}
  selector:
    app.kubernetes.io/name: XXX
    app.kubernetes.io/instance: {{ .Release.Name }}

他のナヌザヌが以前に蚀ったように、その理由は、KubernetesがサヌビスにクラスタヌIPを最初に自動割り圓おし䟋 clusterIP: 10.96.26.65 、アップグレヌドしようずするずclusterIP: ""ず競合するためです。 テンプレヌトではこれを生成しおいないこずに泚意しおください clusterIP: ""

この@bacongobblerを再床開いおください

同じ問題がありたす。

@ juan131 @Ronsevet  remove -- force意味が倉わりたした。

カスタムチャヌトで同じ問題に盎面しおいたす。
clusteripはどこにも定矩しおいたせん。
ヘルムv3.0.2
kubectl 1.14.8

問題は、ポッドが䜜成されお実行されおいおも、チャヌトが倱敗した状態のたたになるこずがあるこずです。 同じリリヌスをアップグレヌドしようずするず、匷制的に機胜したせん。
ポッドが実行されおいるため、リリヌスを削陀しお再䜜成するこずはできたせん。
「力」を䜿う方法が必芁です

私も同じです-サヌビスにラベルを远加したずころ、この゚ラヌが発生したした。 たた、ClusterIPをどこにも定矩しおいたせん-問題を再床開いおください

@bacongobblerチャヌトの䞀郚ずしおStorageClassesをデプロむしおおり、StorageClassのパラメヌタヌは䞍倉です。 したがっお、次のリリヌスでは、いく぀かのStorageClassパラメヌタヌの倀を曎新するず、 helm upgrade --forceも倱敗したす。
StorageClassesの曎新でこのケヌスを凊理する方法がわかりたせん。 助蚀がありたすか

Error: UPGRADE FAILED: failed to replace object: StorageClass.storage.k8s.io "ibmc-s3fs-standard-cross-region" is invalid: parameters: Forbidden: updates to parameters are forbidden.

helm upgrade --force StorageClassの匷制削陀ず再䜜成に䜿甚されたため、helmV2では正垞に機胜しおいたした。

https://github.com/helm/helm/issues/6378#issuecomment -557746499に蚘茉されおいる説明の結果ではない症状が発生しおいる堎合は、新しい問題を開いお、調査結果ず再珟方法を教えおください。私たちの偎でそれ

OPによっお発生した問題は、チャヌトがむンストヌル時にClusterIPを空の文字列に蚭定する䞊蚘のシナリオが原因でした。 --forceフラグを䜿甚しお蚀及した他のシナリオなど、この特定のケヌスが発生する可胜性のある他のシナリオが存圚する可胜性は十分にありたす。 蚺断ず解決策は以前に提䟛されたアドバむスずは異なる可胜性があるため、これらのケヌスは個別に議論する必芁がありたす。

ありがずう

@mssachanは、ナヌスケヌスに぀いお7082ず helm install —forceの動䜜に䌌たkubectl replace —forceを実装するこずを目的ずしおいたす。

@mssachanは、ナヌスケヌスに぀いお7082ず helm install —forceの動䜜に䌌たkubectl replace —forceを実装するこずを目的ずしおいたす。

これが起こっおいるのは良いこずです。 --forceフラグを省略しおも、チャヌトをアップグレヌドするずきに゚ラヌが発生したす。 たずえば、 cert-manager 

2020-03-05 12:15:19 CRITICAL: Command returned [ 1 ] exit code and error message [ Error: UPGRADE FAILED: cannot patch "cert-manager-cainjector" with kind Deployment: Deployment.apps "cert-manager-cainjector" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"cainjector", "app.kubernetes.io/instance":"cert-manager", "app.kubernetes.io/managed-by":"Helm", "app.kubernetes.io/name":"cainjector"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable && cannot patch "cert-manager" with kind Deployment: Deployment.apps "cert-manager" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"cert-manager", "app.kubernetes.io/instance":"cert-manager", "app.kubernetes.io/managed-by":"Helm", "app.kubernetes.io/name":"cert-manager"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable && cannot patch "cert-manager-webhook" with kind Deployment: Deployment.apps "cert-manager-webhook" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"webhook", "app.kubernetes.io/instance":"cert-manager", "app.kubernetes.io/managed-by":"Helm", "app.kubernetes.io/name":"webhook"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable

@mssachanは、ナヌスケヌスに぀いお7082ず helm install —forceの動䜜に䌌たkubectl replace —forceを実装するこずを目的ずしおいたす。

これが起こっおいるのは良いこずです。 --forceフラグを省略しおも、チャヌトをアップグレヌドするずきに゚ラヌが発生したす。 たずえば、 cert-manager 

2020-03-05 12:15:19 CRITICAL: Command returned [ 1 ] exit code and error message [ Error: UPGRADE FAILED: cannot patch "cert-manager-cainjector" with kind Deployment: Deployment.apps "cert-manager-cainjector" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"cainjector", "app.kubernetes.io/instance":"cert-manager", "app.kubernetes.io/managed-by":"Helm", "app.kubernetes.io/name":"cainjector"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable && cannot patch "cert-manager" with kind Deployment: Deployment.apps "cert-manager" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"cert-manager", "app.kubernetes.io/instance":"cert-manager", "app.kubernetes.io/managed-by":"Helm", "app.kubernetes.io/name":"cert-manager"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable && cannot patch "cert-manager-webhook" with kind Deployment: Deployment.apps "cert-manager-webhook" is invalid: spec.selector: Invalid value: v1.LabelSelector{MatchLabels:map[string]string{"app":"webhook", "app.kubernetes.io/instance":"cert-manager", "app.kubernetes.io/managed-by":"Helm", "app.kubernetes.io/name":"webhook"}, MatchExpressions:[]v1.LabelSelectorRequirement(nil)}: field is immutable

@ sc250024ヘルムv2をv3にアップグレヌドした埌、たったく同じ問題が発生したす。 アップグレヌドの進行はスムヌズで゚ラヌはありたせんでした。その埌、cert-managerをhelmからアップグレヌドしようずしたしたが、同じ出力で倱敗したした。

# helm upgrade cert-manager jetstack/cert-manager --namespace cert-manager --atomic --cleanup-on-fail

# helm version
version.BuildInfo{Version:"v3.1.1", GitCommit:"afe70585407b420d0097d07b21c47dc511525ac8", GitTreeState:"clean", GoVersion:"go1.13.8"}

--forceが䜿甚されおいない堎合、たたはclusterIP呚りにオプションが蚭定されおいない堎合の回避策。 これは私のサヌビスマニフェストです

apiVersion: v1
kind: Service
metadata:
  name: "{{ .Values.deploymentBaseName }}-{{ .Values.skaffoldUser }}"
  labels:
    name: "{{ .Values.deploymentBaseName }}-{{ .Values.skaffoldUser }}"
spec:
  ports:
    - port: {{ .Values.servicePort }}
      targetPort: {{ .Values.containerPort }}
      protocol: TCP
      name: http
    - name: debugger-http
      port: {{ .Values.debuggerPort }}
      targetPort: {{ .Values.debuggerPort }}
      protocol: TCP
  selector:
    app: "{{ .Values.deploymentBaseName }}-{{ .Values.skaffoldUser }}"
  type: ClusterIP

@davidfernandezmこれに察する解決策を芋぀けたこずがありたすか 私の偎でも同じこずがわかり、私のサヌビスはあなたのサヌビスずたったく同じように定矩されおいたす。 clusterIPオプションは蚭定されおいたせんが、Helmはアップグレヌドに倱敗したす。

こっちも䞀緒

これも取埗しお、䞊蚘の2぀のコメントを再確認しおください。

詳现情報を提䟛しおください。 原因や、この問題がどのように発生するかを理解せずにお手䌝いするこずはできたせん。 ありがずう。

@antonakvこの問題は7956ず重耇しおいたす
@bacongobbler詳现

helm update --installコマンドで--forceオプションを䜿甚するず、helm v3.0.0-rc.2でサヌビスタむプたたはclusterIPを蚭定しなくおも、同じ問題が発生したす。 --forceがないず、正垞に機胜したす

涌しい 私はあなたの答えからむンスピレヌションを埗たした。helmfileyamlのforce: ..行にコメントする必芁がありたす。

helmDefaults:
  tillerless: true
  verify: false
  wait: true
  timeout: 600
  # force: true <---- THI ONE IS COMMENTED

それは動䜜したす🎉

私は䞊蚘のすべおを詊したしたが、どれもうたくいきたせんでした。 チャヌトからnginx-ingressを無効にし、アップグレヌドを実行し、再床有効にしおから、再床アップグレヌドする必芁がありたした。 これにより、クラりドプロバむダヌによっお割り圓おられたIPアドレスが倉曎されたしたが、害はありたせんでした。

helm update --installコマンドで--forceオプションを䜿甚するず、helm v3.0.0-rc.2でサヌビスタむプたたはclusterIPを蚭定しなくおも、同じ問題が発生したす。 --forceがないず、正垞に機胜したす

最善の解決策、それは私のために働きたす、ありがずう

同じ問題が発生しおおり、回避策を芋぀けるこずができたせんでした。
再珟するのはずおも簡単です

helm install in stable/inbucket 
helm upgrade in stable/inbucket 
Error: UPGRADE FAILED: cannot patch "in-inbucket" with kind Service: Service "in-inbucket" is invalid: spec.clusterIP: Invalid value: "": field is immutable

なぜ私は思っおいた--force 、ここでは動䜜したせん、それが想定されおいないforce resource updates through a replacement strategyこれは、サヌビスを陀去亀換する必芁があり、亀換の戊略がある堎合は

@bacongobbler https://github.com/helm/helm/issues/7956を確認した埌、このスレッドに

以前のすべおのコメント投皿者ず同様に、テンプレヌトには「clusterIP」がたったくありたせんが、-forceフラグが䜿甚されおいる堎合、最新のHelmでぱラヌが発生したす。

ヘルムバヌゞョン3.4.1

「helm-nkube-system getmanifest CHART_NAME | grepclusterIP」は結果を衚瀺したせん。

゚ラヌ
field is immutable && failed to replace object: Service "SERVICE_NAME" is invalid: spec.clusterIP: Invalid value: "": field is immutable

https://github.com/helm/helm/issues/6378#issuecomment -557746499で提䟛されおいるのず同じ説明が、@ nick4fakeの堎合にも圓おはたりたす。 違いは、 --forceを䜿甚するず、完党にレンダリングされたマニフェストを取埗しお、珟圚のラむブオブゞェクトを匷制的に䞊曞きするようにKubernetesに芁求しおいるこずです。 マニフェストにはclusterIPフィヌルドが含たれおいないため、Kubernetesはそれを取埗し、ラむブオブゞェクトからclusterIPフィヌルドを削陀しようずしおいるず想定したす。したがっお、゚ラヌInvalid value: "": field is immutable たす。

@bacongobblerここで䜕かを芋逃しおしたったら、本圓に申し蚳ありたせん

「テンプレヌトの出力を倉曎するこずをお勧めしたす。倀ずしおclusterIPが提䟛されおいない堎合は、倀を空の文字列に蚭定しないでください...フィヌルドを完党に省略しおください。」

それで、解決策は䜕ですか これは、clusterIPフィヌルドが静的な倀に蚭定されおいない堎合、「-force」フラグをたったく䜿甚できないこずを意味したすか

Kubernetesに関する限り、はい。

私の理解によるず、これはKubernetesの問題です。これは、「匷制的に䞊曞きする」こずは「削陀しお再䜜成する」こずず同じように動䜜しないためです。 アップストリヌムのバグはありたすか

䞀方、Helmも誀解を招く可胜性がありたす。これは、 --forceが「眮換戊略を通じおリ゜ヌスの曎新を匷制する」ず説明されおいるためです。 実際には眮換は行われたせんが、リ゜ヌスを匷制的に䞊曞きしようずするだけですフラグに--force-overwriteずいう名前を付ける方がよいでしょう。 匷制的な眮換は、削陀しお再䜜成するように芋えたすフラグ--force-recreateがある可胜性がありたす。 もちろん、 --force-recreateリ゜ヌスに䜿甚するのは少し危険かもしれたせんが、垞に成功したす。

ずにかく、Helmはそのようなタむプの問題に察するフォヌルバック回避策を実装するこずができたす。 珟圚の動䜜 --force-overwriteずしお蚘述が倱敗し、䞍倉のフィヌルド゚ラヌを怜出した堎合、リ゜ヌスを削陀しお再䜜成する必芁がありたす --force-recreate 。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

antoniaklja picture antoniaklja  Â·  3コメント

vdice picture vdice  Â·  3コメント

tjquinno picture tjquinno  Â·  3コメント

hobti01 picture hobti01  Â·  3コメント

mikhno-s picture mikhno-s  Â·  3コメント