在IBM Cloud Private中,将Pod运行在管理节点上

経緯 原文的中文翻譯有不同的解釋:
1. 這個詞可以指「來龍去脈」,即事件的起因和經過。
2. 経緯也可以表示「經歷」或「經驗」,強調一個人或事物的背景和歷史。

So there are two options for the translation of “経緯” in Chinese:
1. 這個詞可以指「來龍去脈」,即事件的起因和經過。 cí zhǐ “-“, jí de hé .)
2. 経緯也可以表示「經歷」或「經驗」,強調一個人或事物的背景和歷史。 yě “” huò “”, yí huò de hé .)

IBM Cloud Private(ICP)根据用途将Kubernetes节点定义细分。例如,存在用于运行ELK堆栈或Prometheus的管理节点,以及用于运行Ingress的代理节点等特殊用途节点。

现在,运行在管理节点上的ELK等应用是在ICP安装时安装的,但在手册中写道,应用开发者可以根据需要进行额外的安装。为此,也提供了Helm图表。然而,如果通过Helm安装,ELK将被调度到普通的Worker节点而非管理节点。然而,由于管理节点通常具有更多的资源,因此在这里放置和运行运维系的Pod也是可能的。

然而,在Pod清单中使用nodeSelector或nodeAffinity指定Management节点,仍然会出现没有可调度节点的错误。

这次我会记录在这种情况下如何在管理节点上运行Pod的方法。

验证环境 – IBM Cloud Private 2.1.0.3

操作步骤

管理节点无法调度Pod的原因。

因为管理节点的 Taints 被设置为 NoSchedule。

$ kubectl describe node 10.132.20.215 10.132.20.216 | grep Taint
Taints:             dedicated=management:NoSchedule
Taints:             dedicated=management:NoSchedule

为了使用管理节点,需要添加定义。

如果使用Management节点,则将nodeSelector和tolerations添加到Pod的清单中,如下所示。

      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: beta.kubernetes.io/arch
                operator: In
                values:
                - amd64
                - ppc64le
      nodeSelector:        # 追加
        management: "true" # 追加
      tolerations:         # 追加
      - key: dedicated     # 追加
        operator: Equal    # 追加
        value: management  # 追加
        effect: NoSchedule # 追加
      containers:
      - command:

通过这样做,可以将节点设置为管理节点,并允许即使存在NoSchedule的Taints也能够进行调度。

如果Pod已经存在于Worker节点上,只需执行kubectl apply命令即可立即应用设置,并将Pod移动到Management节点。很简单吧。

广告
将在 10 秒后关闭
bannerAds