amy*_*myJ 10 kubernetes kubernetes-helm
我第一次尝试运行 Helm。我有 deployment.yaml、service.yaml 和 ingress.yaml 文件以及 values.yaml 和 chart.yaml。
部署.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: abc
namespace: xyz
labels:
app: abc
app.kubernetes.io/managed-by: {{ .Release.Service }}
spec:
replicas: 3
template:
spec:
containers:
- name: abc
image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
ports:
-
containerPort: 8080
Run Code Online (Sandbox Code Playgroud)
服务.yaml
apiVersion: v1
kind: Service
metadata:
name: abc
labels:
app.kubernetes.io/managed-by: {{ .Release.Service }}
namespace: xyz
annotations:
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: {{ .Values.service.sslCert }}
spec:
ports:
- name: https
protocol: TCP
port: 443
targetPort: 8080
- name: http
protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
selector:
app: abc
Run Code Online (Sandbox Code Playgroud)
入口.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: "haproxy-ingress"
namespace: xyz
labels:
app.kubernetes.io/managed-by: {{ .Release.Service }}
annotations:
kubernetes.io/ingress.class: alb
Run Code Online (Sandbox Code Playgroud)
从我所见,我认为我没有错过推杆,app.kubernetes.io/managed-by但仍然出现错误:
Run Code Online (Sandbox Code Playgroud)rendered manifests contain a resource that already exists. Unable to continue with install: Service "abc" in namespace "xyz" 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"
它在本地正确呈现文件。
helm list --all --all-namespaces什么都不返回。请帮忙。
Rtm*_*tmY 32
下面的错误很常见:
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 ..
Run Code Online (Sandbox Code Playgroud)
因此,我将提供更长一点的解释以及该主题的背景。
您似乎试图创建已经存在并在 Helm 外部创建的资源(可能使用kubectl)。
Helm 不允许一项资源由多个部署拥有。
图表创建者有责任确保图表仅产生独特的资源。
选项 1 - 按照错误消息并添加meta.helm.sh注释:
正如此 PR 中所述:将资源采用正确的实例和管理标签进行发布
meta.helm.sh/release-name如果现有资源具有正确的注释,并且与meta.helm.sh/release-namespace标签选择器匹配,则在尝试创建目标集群中已存在的资源时,Helm 将不再出错app.kubernetes.io/managed-by=Helm。
这有助于零停机迁移到 Helm 3 以管理现有部署,并允许 Helm “采用”之前创建的现有资源。
(*) 我认为meta.helm.sh范围现在是一种不太常见的方法。
选项 2 - 添加app.kubernetes.io/instance标签:
从不同的 Helm 图表提供商(例如Bitnami、Nginx 入口控制器、External-Dns )中可以看出- 两个标签的组合:
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
Run Code Online (Sandbox Code Playgroud)
(*) 注意:有一些 CD 工具(例如ArgoCD)会自动设置app.kubernetes.io/instance标签并使用它来确定应用程序中的哪些资源。
选项 3 - 删除旧资源。
它可能与您的特定情况相关,其中旧资源可能不再相关。
共享标签和注释共享一个共同的前缀:app.kubernetes.io。
没有前缀的标签对用户来说是私有的。共享前缀可确保共享标签不会干扰自定义用户标签。
为了充分利用这些标签,它们应该应用于每个资源对象。
该app.kubernetes.io/managed-by标签用于描述用于管理应用程序操作的工具 - 例如:helm。
请阅读推荐标签部分的更多信息。
不会。
首先,如前所述,这些标签并不是 Helm 特有的,而且 Helm 本身从不要求存在特定标签。
另一方面,Helm 文档建议使用以下标准标签。app.kubernetes.io/managed-by是其中之一,应该设置为{{ .Release.Service }}以便查找 Helm 管理的所有资源。
因此,图表维护者的职责是添加这些标签。
许多 Helm 图表提供商将它们添加到_helpers.tpl文件中并允许所有资源include使用:
labels: {{ include "my-chart.labels" . | nindent 4 }}
Run Code Online (Sandbox Code Playgroud)
Kam*_*san 11
您已经abc在给定的命名空间(命名空间xyz)中有一些资源(服务),您正在尝试通过舵图安装这些资源(服务)。
清理这些东西并通过helm install.
$ kubectl delete service -n <namespace> <service-name>
$ kubectl delete deployment -n <namespace> <depoyment-name>
$ kubectl delete ingress -n <namespace> <ingress-name>
Run Code Online (Sandbox Code Playgroud)
一旦您通过掌舵部署了这些资源,您将能够执行helm update更改属性。
"app.kubernetes.io/managed-by"从你的 yaml 中删除这个标签,这将由掌舵添加。
小智 7
这里的技巧是to chase the error message。例如,在下面的情况下,错误消息指出命名空间“xyz”中的“服务”有问题
Unable to
continue with install: Service "abc" in namespace "xyz" 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)
只需使用以下命令从提到的命名空间中删除相同的服务:
kubectl -n xyz delete svc abc
Run Code Online (Sandbox Code Playgroud)
然后再次尝试安装/部署。可能会出现类似的问题,但对于不同的资源,如下例所示:
Release "nok-sec-sip-tls-crd" does not exist. Installing it now.
Error: rendered manifests contain a resource that already exists. Unable to continue with install: Role "nok-sec-sip-tls-crd-role" in namespace "debu" exists and cannot be imported into the current release: invalid ownership metadata; annotation validation error: key "meta.helm.sh/release-name" must equal "nok-sec-sip-tls-crd": current value is "nok-sec-sip"
Run Code Online (Sandbox Code Playgroud)
再次使用 kubectl 命令并删除错误消息中提到的资源。例如,在上述情况下,应使用以下命令删除错误资源:
kubectl delete role nok-sec-sip-tls-crd-role -n debu
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20312 次 |
| 最近记录: |