Ank*_*ora 8 kubernetes kubernetes-helm
当已存在同名运行的部署、svc 等时,如何首次部署 helm 版本。
有什么方法可以导入正在运行的配置,该配置不是由 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"
Run Code Online (Sandbox Code Playgroud)
他们还有其他方法吗?
谢谢
解决错误消息和部分问题:
当已存在同名运行的部署、svc 等时,如何首次部署 helm 版本。
您无法使用 Helm 部署不是由 Helm 创建的资源。它会给您提供与您遇到的相同的消息。您可以对 Helm未添加的现有资源进行注释,以“导入”现有资源并对其进行操作。请先尝试在测试环境中运行您的工作负载,然后再尝试,因为它可能会重新部署一些资源。
关于如何注释资源已经有类似的答案:
请参阅 helm3 的此功能将资源采用正确的实例和管理标签进行发布
如果现有资源具有正确的 meta.helm.sh/release-name 和 meta.helm.sh/release-namespace 注释,并且与标签匹配,则在尝试创建目标集群中已存在的资源时,Helm 将不再出错选择器 app.kubernetes.io/management-by=Helm。这有助于零停机迁移到 Helm 3 以管理现有部署,并允许 Helm “采用”之前创建的现有资源。
为了允许 Helm 采用现有资源,请添加发布元数据和管理者标签:
Run Code Online (Sandbox Code Playgroud)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/如下例)。Deployment不使用 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
Run Code Online (Sandbox Code Playgroud)
假设上面的文件与您的图表一起使用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: ...
Run Code Online (Sandbox Code Playgroud)
通过运行我链接的答案中提到的脚本,您可以为 Helm 的资源进行注释和标记,以免产生提到的错误消息。
之后,您可以运行$ helm install release_name .并配置您的资源并进行所需的更改。
其他资源:
| 归档时间: |
|
| 查看次数: |
11807 次 |
| 最近记录: |