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

时间:2019-06-03 18:23:52

标签: azure-devops kubernetes-helm

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

  

服务“ myservice-lb”已经存在

现在,我知道这是由于资源已经存在,但是我的问题与如何配置图表有关,以便可以将更改部署到集群。

以前,我只运行KUBECTL APPLY,它足够聪明,可以在有更改的情况下更新Pod和服务,而在没有什么不同的情况下可以忽略。我认为HELM将具有相同类型的功能,但是我不知道如何实现。

当前,我正在使用HELM INSTALL管道任务,该任务指向我的解决方案中的图表。我很乐意发布生成的YAML,但是我觉得这可能是需要在我的DevOps管道中运行的命令。

enter image description here

enter image description here

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

2 个答案:

答案 0 :(得分:3)

可以肯定,您需要使用helm upgrade进行更新。要使其不存在,可以添加--install开关

答案 1 :(得分:0)

不确定是否是这种情况,但这也许会有所帮助:

1-如果您的集群中安装了多个分hel(舵机服务器),则升级必须使用与第一次安装相同的分same进行。如果不是,则分will将在其缓存中找不到包(因此未安装发行版),但将在名称空间中找到资源(因此将启动错误)。如果头盔的缓存被破坏/擦除,也会发生

2-掌舵的一个已知错误是,如果第一次部署失败,它将无法正确部署以进行下一次尝试

您可以使用以下方法检查是否存在以前的版本:

helm list

您可以选择与之配合使用的分till:

helm list --tiller-namespace=<namespace>

如果发现发布失败,则需要手动删除头盔的发布:

helm delete --purge <release-name>