Helm upgrade --install 没有接受新的变化

Ant*_*ony 5 kubernetes-helm

我在我的构建 CI 中使用下面的命令,以便在每次构建时部署掌舵。但是,我注意到未部署更改。

              helm upgrade --install --force \
              --namespace=default \
              --values=kubernetes/values.yaml \
              --set image.tag=latest \
              --set service.name=my-service \
              --set image.pullPolicy=Always \
              myService kubernetes/myservice
Run Code Online (Sandbox Code Playgroud)

我每次都需要标记图像吗?如果存在相同版本,helm 是否不进行安装?

Raj*_*pta 5

您不必每次都用新标签标记图像。只需添加

date: "{{ now | unixEpoch }}"
Run Code Online (Sandbox Code Playgroud)

spec/template/metadata/labels并设置imagePullPolicy: Always。Helm 会检测部署对象的变化,并且每次都会拉取最新的镜像:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: "{{ .Release.Name }}-{{ .Values.app.frontendName }}-deployment"
  labels:
    app.kubernetes.io/name: {{ .Values.app.frontendName }}
    app.kubernetes.io/instance: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app.kubernetes.io/name: {{ .Values.app.frontendName }}
      app.kubernetes.io/instance: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app.kubernetes.io/name: {{ .Values.app.frontendName }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        date: "{{ now | unixEpoch }}"
    spec:
      containers:
        - name: {{ .Values.app.frontendName }}
          image: "rajesh12/myimage:latest"
          imagePullPolicy: Always
Run Code Online (Sandbox Code Playgroud)

运行helm upgrade releaseName ./my-chart以升级您的版本


pan*_*pan 5

对于 helm 3,该--recreate-pods标志已被弃用。相反,你可以使用

kind: Deployment
spec:
  template:
    metadata:
      annotations:
        rollme: {{ randAlphaNum 5 | quote }}
Run Code Online (Sandbox Code Playgroud)

这将创建一个随机字符串注释,该注释始终会发生变化并导致部署滚动。 Helm - 自动滚动部署


Rya*_*son 0

是的,您需要标记每个版本而不是使用“最新”。Helm 会根据您的参数评估的模板与​​当前部署的模板进行比较。由于两者都是“最新”的,因此看不到任何变化,也不会应用任何升级(除非其他内容发生了变化)。这就是为什么 helm 最佳实践指南建议“容器镜像应该使用固定标签或镜像的 SHA”。(另请参阅https://docs.helm.sh/chart_best_practices/Helm 升级不会拉取新容器