系列文章:
总目录索引:九析带你轻松完爆 istio 服务网格系列教程
目录
1 前言
2 邀约
3 节点调度
3.1 节点打标
3.2 编写 pod
4 kiali 亲和性调度
4.1 举个例子
4.2 节点亲和性调度(NodeAffinity)
4.3 kiali 节点亲和性调度
1 前言
如果你对博客有任何疑问,请告诉我。
2 邀约
你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:
3 节点调度
在开始 kiali 亲和性调度之前,先演示一个简单的例子介绍 pod 选择调度到指定 node:
3.1 节点打标
使用命令查看当前所有 k8s 节点:
kubectl get nodes
命令截图如下:
现在给 k8s-w-206 这个节点打上一个标签,标签内容为 name: jiuxi,命令如下:
kubectl label node k8s-w-206 name=jiuxi
3.2 编写 pod
编写 pod 资源文件 jiuxi-pod.yaml,文件中使用 nodeSelector 指定该 pod 要调度到 k8s-w-206 节点之上:
apiVersion: v1
kind: Pod
metadata:
labels:
app: busybox
name: busybox
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
command: [ "/bin/sh", "-c", "sleep 3600" ]
nodeSelector:
name: jiuxi
部署 jiuxi-pod.yaml,发现 pod 果然被调度到了 k8s-w-206 这个 node,截图如下:
4 kiali 亲和性调度
上面举例 pod 使用 nodeSelector 选择 node,这就是最简单的 k8s 调度方式。而 kiali 调度方式复杂一些,使用的是节点亲和性调度策略,使用如下命令查看:
kubectl get deployments.apps kiali -n istio-system -o yaml
命令执行结果部分显示如下:
4.1 举个例子
举一个生活的例子,以前去医院看病,病人(pod)不能挑医生(node),排队叫到谁就是谁,冷冰冰完全没有亲和性而言;如今可以网上挂号了,病人也可以挑选中意的医生,这样就有了亲和性,说明社会进步了。
当然病人在挑选医生的过程中也会有两种情况:一种是硬性(required),比如非要某医生,即使他忙,也愿意一直等下去;还有一种是软性(prefered),比如优先选择某医生,但是如果真不行,其他医生也未尝不可。
4.2 节点亲和性调度(NodeAffinity)
下面的理论可以对照上面的例子。
节点亲和性,也就是 NodeAffinity,用来控制 pod 部署或者不能部署在哪台机器上。
节点亲和性调度策略分为硬策略分为软策略和硬策略两种方式。硬策略是如果没有满足条件的节点,就会不断重试直到条件满足了为止;软策略是如果没有满足条件的节点,pod 就会忽略这条规则,继续完成调度过程。
节点亲和性软硬策略的语法分别介绍如下。
-
硬策略(关键字 require):
requiredDuringSchedulingIgnoredDuringExecution:
pod 必须部署到满足条件的节点上,如果节点不满足条件,就不停重试。IgnoreDuringExecution 表示 pod 部署成功后,如果节点标签发生了变化,不再满足 pod 指定的条件,pod 仍会在此节点继续运行
-
软策略(关键字 prefer):
preferredDuringSchedulingIgnoredDuringExecution:
pod 优先部署到满足条件的节点,如果节点不满足条件,就忽略这些条件,调度到其他节点。
IgnoredDuringExecution 表示 pod 部署成功后,如果节点标签发生变化,不再满足 pod 指定条件,pod 仍会在此节点继续运行
4.3 kiali 节点亲和性调度
kiali 节点亲和性调度如下图所示:
由图可知,kiali pod 有两个节点亲和性调度策略,一个软策略,一个硬策略。硬策略要求节点 beta.kubernetes.io/arch 标签值必须是 amd64, ppc64le,s390x 三个值之一,如果节点不满足此硬策略,pod 就会一直处于 pending 状态;当满足了此硬策略之后,pod 调度还要经过软策略调度,即:软策略要求节点 beta.kubernetes.io/arch 标签值为 amd64,ppc64le 和 s390x,并且不偏不倚,权重都是 2。