仅升级一个图表\应用程序

时间:2019-08-02 12:14:49

标签: kubernetes-helm

我有一个名为all-services的图表,通常,我会这样做,以部署所有服务(如要求中所述):

helm upgrade prod-allservics all-services/.

这将部署以下服务:

backup-service
counter-service
bridge-service

但是现在我只需要部署服务反服务,而不需要与其他服务打交道。有可能吗?我知道分组确实意味着需要将其一起部署,但是在某些情况下,您可能不想触摸其他图表。

2 个答案:

答案 0 :(得分:1)

您可以在vaule.yaml文件中添加变量以启用服务,例如backupServiceEnabled: true,然后在requirements.yaml文件中为服务添加条件,例如

dependencies: - name: backup-service condition: backupServiceEnabled.enabled

答案 1 :(得分:1)

通常在Kubernetes中,如果提交的对象与已经存在的对象相同,则什么都不会发生。例如,假设您有一个名为all-services-bridge-service的部署,并且提交了一个具有相同名称和内容的相同部署; Kubernetes核心控制器将查看新的Deployment,看到现有Pod与Deployment所要求的完全匹配,并且不执行任何操作。当我说“提交”时,是指kubectl applyhelm upgrade完成的等效工作。

所以说您有一个看起来像Helm的值文件

backup-service:
  tag: 1.2.3
counter-service:
  tag: 1.4.0
bridge-service:
  tag: 3.2.1

其中模板将.Values.tag复制到部署的image:设置中。现在,假设您发布了counter-service并进行了更改

counter-service:
  tag: 1.5.0

您可以放心helm upgrade整件事。是的,它将为其他两个服务生成一个新的部署规范并提交它们,但是由于图像标签(可能还有其他详细信息)相同,因此不会产生任何实际效果。即使有更改,Pods的旋转效果也应该很常规。

如果一次只能升级一个子图对您很重要,则需要将它们升级为顶级图表。 (在其他情况下,我发现管理多个微服务的图表无法很好地工作;例如,如果A需要Redis,而B需要Redis,则同时安装A和B的组合伞图将仅安装一个Redis并分享您可能不想要的内容。)