我有一个名为all-services的图表,通常,我会这样做,以部署所有服务(如要求中所述):
helm upgrade prod-allservics all-services/.
这将部署以下服务:
backup-service
counter-service
bridge-service
但是现在我只需要部署服务反服务,而不需要与其他服务打交道。有可能吗?我知道分组确实意味着需要将其一起部署,但是在某些情况下,您可能不想触摸其他图表。
答案 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 apply
或helm 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并分享您可能不想要的内容。)