kubernetes - 将 Helm 3 用于使用 kubectl 部署的现有资源

标签 kubernetes kubernetes-helm amazon-eks

我们曾经使用普通的 kubectl 命令来部署 kubernetes 资源,用于服务、部署、配置映射等。现在我们需要开始使用 Helm 3 并将其集成到我们的管道中,但是当我尝试运行 helm upgrade 命令时,它给出了以下错误:Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: namespace: default
因此,这些资源从未使用 helm 创建,因为它通常是使用 kubcetl apply 命令创建的。

只需要知道如何在管道中使用 Helm 而无需重新创建 k8s 资源。作为我发现让它工作的唯一解决方法是删除资源并使用 Helm 重新部署它们。

下面是我试过的命令:helm upgrade --atomic --debug --install --force test .
谢谢,
阿里

最佳答案

查看 helm3 的这个特性 Adopt resources into release with correct instance and managed-by labels
如果现有资源具有正确的 meta.helm.sh/release-name 和 meta.helm.sh/release-namespace 注释,并且与标签匹配,则在尝试创建目标集群中已存在的资源时,Helm 将不再出错选择器 app.kubernetes.io/managed-by=Helm。这有助于零停机迁移到 Helm 3 以管理现有部署,并允许 Helm “采用”其先前创建的现有资源。
为了允许 Helm 采用现有资源,添加发布元数据和 managed-by 标签:

KIND=deployment
NAME=my-app-staging
RELEASE=staging
NAMESPACE=default
kubectl annotate $KIND $NAME meta.helm.sh/release-name=$RELEASE
kubectl annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE
kubectl label $KIND $NAME app.kubernetes.io/managed-by=Helm

关于kubernetes - 将 Helm 3 用于使用 kubectl 部署的现有资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61177820/

相关文章:

ubuntu - 如何在 digitalocean 上的集群中设置存储类别

kubernetes-helm - 在 Helm 模板中编码整数

amazon-web-services - AWS EKS : Service(LoadBalancer) running but not responding to requests

kubernetes - 如何在不中断部署的情况下刷新工作人员的 secret ?

kubernetes - 监控 Kubernetes 作业

kubernetes - 检查我的 Kafka 和 Zookeeper 功能和连接

kubernetes - Kubectl get nodes return "the server doesn' t have a resource type "nodes""

kubernetes - PersistentVolume 无效 : spec: Required value: must specify a volume type

java - 为什么 active /就绪性探测失败?

kubernetes - Nginx Ingress 在 Kubernetes 上返回 502 Bad Gateway