kubernetes-Helm升级会忽略名称空间配置

问题描述 投票:1回答:1

我使用k8s并使用gitlab部署我的应用程序。例如,我的群集具有名称空间production。如果我最初安装了该应用程序,则运行:

$ helm install --name super-app -f values.yml ./Path/To/Project/helm

由于此命令将在helm值中指定,因此将成功安装该应用程序在名称空间生产中。

replicaCount: 3
imagePullSecret: regcred
namespace: production

在项目掌舵图中,我使用默认名称空间:

replicaCount: 3
imagePullSecret: regcred
namespace: default

当我从gitlab ci运行程序运行以下命令时:

helm upgrade -f ./values.yaml --set image.tag=master-$DOCKER_IMAGE_TAG super-app ./helm

在values.yaml中再次指定了名称空间生产,我得到以下结果:

Release "super-app has been upgraded.
LAST DEPLOYED: Wed Oct 23 12:15:36 2019
NAMESPACE: production
STATUS: DEPLOYED

RESOURCES:
==> v1/ConfigMap
NAME        DATA  AGE
super-app  1     0s

==> v1/Deployment
NAME        READY  UP-TO-DATE  AVAILABLE  AGE
super-app  0/3    3           0          0s

==> v1/Pod(related)
NAME                        READY  STATUS             RESTARTS  AGE
super-app-5d6dc6c9d-25q9g  0/1    ContainerCreating  0         0s
super-app-5d6dc6c9d-tdfhh  0/1    ContainerCreating  0         0s
super-app-5d6dc6c9d-z7h96  0/1    ContainerCreating  0         0s

==> v1/Secret
NAME        TYPE    DATA  AGE
super-app  Opaque  0     0s

==> v1/Service
NAME        TYPE          CLUSTER-IP      EXTERNAL-IP  PORT(S)         AGE
super-app  LoadBalancer  10.100.115.194  <pending>    8080:32645/TCP  0s

现在,该应用程序已部署在默认名称空间中,而不是在生产环境中。即使现有应用程序(在helm upgrade命令之前)正在生产名称空间中运行。 Helm只是在默认名称空间中创建一个新的服务和应用程序。相同的逻辑适用于其他应用程序,为什么k8会忽略我的名称空间配置?

谢谢

kubernetes continuous-integration gitlab-ci kubernetes-helm
1个回答
2
投票

尽管尚未在Chart Best Practices中进行记录,但此问题(#5465)解决了名称空间注意事项:

通常,模板不应定义名称空间。这是因为Helm将对象安装到--namespace随附的名称空间中旗。通过省略此信息,它还提供了模板后期渲染操作具有一定的灵活性(例如helm template | kubectl create --namespace foo -f -

如所引,最好的选择是将--namespace添加到安装/升级命令中,而不是在模板上进行定义。

© www.soinside.com 2019 - 2024. All rights reserved.