当已经有相同名称的部署,svc等运行时,如何首次部署helm版本。
是否有任何方法可以导入正在运行的配置,而头盔无法处理?
还是删除相同名称的对象是第一次部署Helm发布的唯一解决方案?(我不想更改发布名称,因为这会破坏微服务之间的通信) 删除对象将导致停机,我想避免这种情况。
使用相同名称进行部署时出错:
Error: rendered manifests contain a resource that already exists. Unable to continue with install: Service "abc" in namespace "default" exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name": must be set to "abc"; annotation validation error: missing key "meta.helm.sh/release-namespace": must be set to "default"
他们还有其他方法吗?
谢谢
答案 0 :(得分:0)
解决错误消息和部分问题:
<块引用>当已经有部署、svc 等同名运行时,如何第一次部署 helm 版本。
您不能使用 Helm 部署不是由 Helm 创建的资源。它将为您提供与您遇到的相同的消息。您可以注释未由 Helm 添加的现有资源,以“导入”现有资源并对其进行操作。 请先尝试在测试环境中运行您的工作负载,然后再尝试,因为它可能会重新部署一些资源。
关于如何注释资源已经有类似的答案:
<块引用>查看 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 采用现有资源,添加发布元数据和托管标签:
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
假设以下情况:
Deployment
在 Helm 之外创建(示例如下)。Deployment
中具有等效模板化 templates/
的 Helm Chart(示例如下)。在没有 Helm 的情况下在 Deployment
下创建:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
假设上述文件与 kubectl apply
一起使用,并且它也驻留在图表的 templates/
目录(模板化)中,您将收到以下错误(当您尝试运行 $ helm install release_name .
):
Error: rendered manifests contain a resource that already exists. Unable to continue with install: Deployment "nginx" in namespace "default" exists and cannot be imported into the current release: ...
通过运行我链接的答案中提到的脚本,您可以为 Helm 注释和标记您的资源,以免产生提到的错误消息。
之后,您可以运行 $ helm install release_name .
并为您的资源配置所需的更改。
其他资源: