在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节点。很简单吧。