ãã£ãŒããã€ã³ã¹ããŒã«/ã¢ããã°ã¬ãŒãããã«ã¯ã以äžã䜿çšããŸãã
./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 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
çç±ã§ãã
ããã¯ã次ã®åäœãåå ã§çºçããŸãã
clusterIP
ã空ã®æååã«ããããšãæå®ããŸããclusterIP
èªåå²ãåœãŠããŸããã ãã®äŸã§ã¯172.17.0.1
ã䜿çšããŸã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ã¢ãã¬ã¹ãã空ã®æååã«å€æŽããããšããããããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
ã圹ã«ç«ãŠãã°ïŒ
ãã®åé¡ã解決ãããŠããéã«ãããä»ã®ãšããæ©èœãããããšããŠããå Žåã®äžæçãªè§£æ±ºçãšããŠã次ã®ããšãå®è¡ããå ŽåãæŽæ°ãå®è¡ã§ããããšãããããŸããã
kubectl get svc | grep ingress
controller:
service:
clusterIP: <cluster-ip-address-for-controller>
defaultBackend:
service:
clusterIP: <cluster-ip-address-for-default-backend>
å®è¡ããŠããã¯ã©ã¹ã¿ãŒã§ããããã¹ãããŸããããåäœæã¯å¿ èŠãããŸããã§ããã
ãããããŸããããŸãã @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
çç±ã§ããããã¯ã次ã®åäœãåå ã§çºçããŸãã
- ã€ã³ã¹ããŒã«æã«ããã£ãŒãã¯
clusterIP
ã空ã®æååã«ããããšãæå®ããŸãã- Kubernetesã¯ãµãŒãã¹ã«
clusterIP
èªåå²ãåœãŠããŸããã ãã®äŸã§ã¯172.17.0.1
ã䜿çšããŸã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ã€ã®ã³ã¡ã³ããå確èªããŠãã ããã
詳现æ å ±ãæäŸããŠãã ããã åå ãããã®åé¡ãã©ã®ããã«çºçããããç解ããã«ãæäŒãããããšã¯ã§ããŸããã ããããšãã
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
ïŒã
æãåèã«ãªãã³ã¡ã³ã
helm update --installã³ãã³ãã§--forceãªãã·ã§ã³ã䜿çšãããšãhelm v3.0.0-rc.2ã§ãµãŒãã¹ã¿ã€ããŸãã¯clusterIPãèšå®ããªããŠããåãåé¡ãçºçããŸãã --forceããªããšãæ£åžžã«æ©èœããŸã