Azure devops 无法通过HELM重新部署kubernetes解决方案

Azure devops 无法通过HELM重新部署kubernetes解决方案,azure-devops,kubernetes-helm,Azure Devops,Kubernetes Helm,我有一个工作的Azure DevOps管道,它使用HELM将我的映像部署到Kubernetes集群。当集群中没有资源时(第一次部署时),此管道将成功执行。在已经存在资源的后续部署中,HELM INSTALL命令会导致以下异常 服务“myservice lb”已存在 现在我了解到这是由于已经存在资源,但我的问题涉及如何配置图表,以便将更改部署到集群 以前我只运行KUBECTL APPLY,它足够智能,可以在有变化时更新pod和服务,如果没有变化则忽略。我假设HELM会有相同类型的功能,但我不知道如

我有一个工作的Azure DevOps管道,它使用HELM将我的映像部署到Kubernetes集群。当集群中没有资源时(第一次部署时),此管道将成功执行。在已经存在资源的后续部署中,HELM INSTALL命令会导致以下异常

服务“myservice lb”已存在

现在我了解到这是由于已经存在资源,但我的问题涉及如何配置图表,以便将更改部署到集群

以前我只运行KUBECTL APPLY,它足够智能,可以在有变化时更新pod和服务,如果没有变化则忽略。我假设HELM会有相同类型的功能,但我不知道如何实现

目前,我正在使用HELM安装管道任务,该任务指向我的解决方案中的图表。我很高兴发布生成的YAML,但我觉得它可能是需要在我的DevOps管道中运行的命令


相当确定您需要使用
helm-upgrade
来更新它。要使它在不存在的情况下工作,您可以添加
--安装
开关相当确定您需要使用
头盔升级来更新它。要使它在不存在时工作,您可以添加
--安装
开关不确定是否存在这种情况,但这可能会有所帮助:

1-如果集群中安装了多个tiller(helm server),则必须使用第一次安装时使用的同一台进行升级。如果没有,tiller将无法在其缓存中找到包(因此未安装版本),但将在命名空间中找到资源(因此将启动一个错误)。如果头盔的缓存被破坏/擦除,它也会发生

2-helm的一个已知错误是,如果第一次部署失败,它无法在下一次尝试中正确部署

您可以检查是否有具有以下功能的早期版本:

helm列表
您可以选择要使用的舵柄:

helm列表——舵柄名称空间=
如果发现释放失败,则需要手动删除头盔释放:

helm delete——清除

不确定是否是这种情况,但这可能有助于:

1-如果集群中安装了多个tiller(helm server),则必须使用第一次安装时使用的同一台进行升级。如果没有,tiller将无法在其缓存中找到包(因此未安装版本),但将在命名空间中找到资源(因此将启动一个错误)。如果头盔的缓存被破坏/擦除,它也会发生

2-helm的一个已知错误是,如果第一次部署失败,它无法在下一次尝试中正确部署

您可以检查是否有具有以下功能的早期版本:

helm列表
您可以选择要使用的舵柄:

helm列表——舵柄名称空间=
如果发现释放失败,则需要手动删除头盔释放:

helm delete——清除

这是有道理的,但它仍然给了我同样的错误:[command]/opt/hostedtoolcache/helm/2.14.0/x64/linux-amd64/helm升级--安装--重新创建pods--强制--等待20190603.6/home/vsts/work/5/s/myimage/deployment/myapp错误:发布20190603.6失败:服务“myservice lb”已经存在发布“20190603.6”不存在。现在安装它##[错误]错误:发布20190603.6失败:服务“myservice lb”已经存在##[部分]完成:掌舵升级这真的很奇怪,对我来说它以幂等方式工作,你能共享yaml吗?这是有道理的,但它仍然给我相同的错误:[命令]/opt/hostedtoolcache/helm/2.14.0/x64/linux-amd64/helm升级--安装--重新创建吊舱--强制--等待20190603.6/home/vsts/work/5/s/myimage/deployment/myapp错误:版本20190603.6失败:服务“myservice lb”已存在版本“20190603.6”不存在。现在安装它##[错误]错误:发布20190603.6失败:服务“myservice lb”已经存在##[部分]完成:掌舵升级真奇怪,对我来说它以幂等方式工作,你能分享yaml吗?我想就是这样。我没有超过一个舵柄,但我有一个初始失败的版本。我清除了他们,重新部署。然后我成功地重新部署了图表。我想就是这样。我没有超过一个舵柄,但我有一个初始失败的版本。我清除了他们,重新部署。然后我成功地重新部署了图表。
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    name: myapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      terminationGracePeriodSeconds: 30
      containers:
      - name: myapp
        image: mycontainers.azurecr.io/myapp:latest
        imagePullPolicy: "Always"
        args: ["-w", "-e"]
        ports:
        - containerPort: 5000
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 250m
      imagePullSecrets:
      - name: acr-auth     

---
apiVersion: v1
kind: Service
metadata:
  name: myservice-lb
spec:
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 80
    targetPort: 5000
  selector:
    app: myapp