首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在专用节点池上调度kube-dns

在专用节点池上调度kube-dns
EN

Stack Overflow用户
提问于 2018-06-20 02:14:53
回答 1查看 1K关注 0票数 5

我有一个在GCP上运行的集群,目前完全由可预占的节点组成。我们遇到了kube-dns变得不可用的问题(可能是因为某个节点被抢占了)。我们希望通过将kube-dns pods移动到更稳定的节点来提高DNS的弹性。

是否可以在仅包含不可抢占节点的节点池上调度系统集群关键pod,如kube-dns (或kube-system名称空间中的所有pod)?我对使用亲和性或反亲和性或污染很谨慎,因为这些pod是在集群引导时自动创建的,所做的任何更改都可能被Kubernetes版本升级破坏。有没有办法做到这一点,可以在升级过程中持续下去?

EN

回答 1

Stack Overflow用户

发布于 2018-07-11 05:55:59

解决方案是将污染和容忍度与节点亲和性结合使用。我们创建了第二个节点池,并向可抢占池添加了一个污点。

Terraform配置:

代码语言:javascript
复制
resource "google_container_node_pool" "preemptible_worker_pool" {
  node_config {
    ...
    preemptible     = true

    labels {
      preemptible = "true"
      dedicated   = "preemptible-worker-pool"
    }

    taint {
      key    = "dedicated"
      value  = "preemptible-worker-pool"
      effect = "NO_SCHEDULE"
    }
  }
}

然后,我们使用tolerationnodeAffinity来允许现有工作负载在受污染的节点池上运行,从而有效地强制集群关键pod在未受污染(不可抢占)的节点池上运行。

Kubernetes配置:

代码语言:javascript
复制
spec:
  template:
    spec:
      # The affinity + tolerations sections together allow and enforce that the workers are
      # run on dedicated nodes tainted with "dedicated=preemptible-worker-pool:NoSchedule".
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: dedicated
                operator: In
                values:
                - preemptible-worker-pool
      tolerations:
      - key: dedicated
        operator: "Equal"
        value: preemptible-worker-pool
        effect: "NoSchedule"
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50934637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档