我有一个运行中的Azure DevOps管道,该管道使用HELM将映像部署到Kubernetes群集。当集群中没有资源时(第一次部署),该管道将成功执行。在已经存在资源的后续部署中,HELM INSTALL命令导致以下异常。
服务“ myservice-lb”已经存在
现在,我知道这是由于资源已经存在,但是我的问题与如何配置图表有关,以便可以将更改部署到集群。
以前,我只运行KUBECTL APPLY,它足够聪明,可以在有更改的情况下更新Pod和服务,而在没有什么不同的情况下可以忽略。我认为HELM将具有相同类型的功能,但是我不知道如何实现。
当前,我正在使用HELM INSTALL管道任务,该任务指向我的解决方案中的图表。我很乐意发布生成的YAML,但是我觉得这可能是需要在我的DevOps管道中运行的命令。
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
答案 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>