Jenkins JCASC Kubernetes插件:为podTemplate添加NodeSelector与Tolerations
解决Jenkins JCASC中PodTemplate与自定义Pod YAML合并的问题
你现有配置存在语法错误——重复了podTemplates键,这会导致部分配置不生效。另外,要正确合并Pod YAML和原有podTemplate,需在podTemplate定义中正确使用yaml字段和yamlStrategy参数,具体配置方式如下:
正确的整合配置示例(merge策略)
agent: enabled: true podTemplates: jenkins-slave-pod: | - name: jenkins-slave-pod label: global-slave serviceAccount: jenkins idleMinutes: "15" yamlStrategy: merge yaml: | apiVersion: v1 kind: Pod spec: nodeSelector: karpenter.sh/provisioner-name: jenkins-provisioner tolerations: - key: "jenkins" operator: "Exists" effect: "NoSchedule" containers: - name: main image: 'xxxxxx.dkr.ecr.us-west-2.amazonaws.com/jenkins-slave:ecs-global' command: "sleep" args: "30d" privileged: true
关键说明
- 修正语法错误:删除重复的
podTemplates键,确保配置层级正确 - yaml字段的使用:仅需把包含
nodeSelector和tolerations的Pod spec部分嵌入yaml字段,无需重复定义已在podTemplate中配置的容器、服务账号等内容 - yamlStrategy选择:
merge:将yaml中的配置与原有podTemplate配置合并,保留原有容器配置的同时,添加nodeSelector和tolerationsoverride:用yaml中的完整Pod定义覆盖原有podTemplate配置,此时需在yaml中包含所有必要字段(如容器、服务账号等)
若使用override策略的配置示例
agent: enabled: true podTemplates: jenkins-slave-pod: | - name: jenkins-slave-pod label: global-slave idleMinutes: "15" yamlStrategy: override yaml: | apiVersion: v1 kind: Pod serviceAccount: jenkins-non-prod spec: nodeSelector: karpenter.sh/provisioner-name: jenkins-provisioner tolerations: - key: "jenkins" operator: "Exists" effect: "NoSchedule" containers: - name: main image: 'xxxxxxxx.dkr.ecr.us-west-2.amazonaws.com/jenkins-slave:ecs-global' command: "sleep" args: "30d" privileged: true
按上述配置后,JCASC即可正确将自定义Pod规格与原有podTemplate合并或覆盖,让nodeSelector和tolerations生效。
内容的提问来源于stack exchange,提问作者EilonA
相关产品推荐
相关产品推荐

