1

我正在使用 Jenkins 使用 kubernetes插件版本 1.30.3 将我的 Docker 映像部署到 GKE。到目前为止它工作正常。但现在我试图通过添加节点选择器在 GKE 中选择一个已定义的节点池,但这对我不起作用。这是我的 Jenkins 文件中 podTemplate 的定义:

podTemplate(label: '...', containers: [...],
  volumes: [..],
  nodeSelector: 'cloud.google.com/gke-nodepool: NAME OF THE NODE POOL'
)

你知道为什么这不起作用吗?

我已经检查了结果 pod yaml,它不包括定义的nodeSelector...

4

2 回答 2

0

作为 Leo 回答的补充,标签当前未附加到您的 pod 的一个可能原因是您手动升级或降级节点池以匹配控制平面的版本,GKE 会自动删除您使用kubectl.

要解决此问题,您可以尝试:

  1. 更新您的节点标签,同时特别注意执行此操作的限制。
  2. 因为升级节点池可能会中断在该节点池中运行的工作负载;您可以创建一个具有所需版本的新节点池并迁移工作负载,然后确保标签正确附加,最后删除旧的。

我建议您仔细查看这两个链接:向节点添加标签升级节点池以获取更多详细信息,如果此答案有帮助,请告诉我。

于 2022-02-20T07:47:35.743 回答
0

nodeSelector 提供了一种在 GKE 中使用特定标签约束 pod 的方法。所有节点池都有以下格式的标签:cloud.google.com/gke-nodepool: POOL_NAME. 因此,您可以通过使用 nodeSelector 和您配置的标签来使用特定的节点池, POOL_NAME 如下例所示:

 nodeSelector:
    cloud.google.com/gke-nodepool:default-pool

基于此,您将需要验证标签是否在创建时附加到您的 pod,您可以通过运行以下命令进行检查: kubectl get nodes要获取集群节点的名称,您可以查阅本指南以了解有关如何操作的更多信息为 pod 设置约束。

于 2022-02-18T21:47:54.893 回答