kubernetes Helm升级不拾取由sed命令完成的值更改

tgabmvqs  于 5个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(57)

我有一个Azure Release管道,它只是将微服务的Helm Chart部署到k8s集群。我正在尝试使用sed命令通过模式匹配来修改请求和限制的值。我已经在本地测试了它,它可以工作,甚至在bash任务中运行它,并在Helm升级任务之前检查cat文件,并且正确完成。
例如,如果values.yaml文件包含以下块

resources: 
   limits:
     cpu: 4000m
     memory: 4000Mi
   requests:
     cpu: 2000m
     memory: 1500Mi

字符串
我运行这个:

sed -e '/limits:/,/requests:/ s/\(cpu: \)[^ ]*/\12000m/'     -e '/limits:/,/requests:/ s/\(memory: \)[^ ]*/\12000Mi/'     -e '/requests:/,/limits:/ {s/\(cpu: \)[^ ]*/\1900m/; s/\(memory: \)[^ ]*/\1900Mi/;}' values.yaml


结果是这样的

resources: 
   limits:
     cpu: 2000m
     memory: 2000Mi
   requests:
     cpu: 900m
     memory: 900Mi


问题是,在helm upgrade任务之后,我再次尝试cat文件,发现它没有改变,原始版本仍然存在。我检查了所有任务中的路径,它是正确的。
我尝试使用多个echo命令

echo -e "resources:" >> values.yaml
echo -e "  limits: \n    cpu: 2000m\n    memory: 2000Mi" >> values.yaml
echo -e "  requests: \n    cpu: 900m\n    memory: 900Mi" >> values.yaml


居然还能用我不知道为什么
sed命令在Azure Release Pipelines中无法正常工作的原因是什么?
编辑:需要使用-i标志,效果很好!

7kqas0il

7kqas0il1#

沿着解决方案,并为社区提供解释
sed命令中使用-i标志是修改文件的正确方法,并确保后续的helm upgrade任务能够获取更改。
-i标志告诉sed就地编辑文件,这意味着直接对文件进行更改,而不是输出到控制台。如果没有-i标志,sed所做的更改仅输出到控制台,而不会保存到文件。
因此,修复方法是

sed -i -e '/limits:/,/requests:/ s/\(cpu: \)[^ ]*/\12000m/' \
       -e '/limits:/,/requests:/ s/\(memory: \)[^ ]*/\12000Mi/' \
       -e '/requests:/,/limits:/ {s/\(cpu: \)[^ ]*/\1900m/; s/\(memory: \)[^ ]*/\1900Mi/;}' \
       values.yaml

字符串
这里,-i标志用于修改values.yaml文件。然后,sed命令用于修改文件的limitsrequests部分的cpumemory值。

相关问题