系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

目录

1 前言

2 邀约

3 节点调度

    3.1 节点打标

    3.2 编写 pod

4 kiali 亲和性调度

    4.1 举个例子

    4.2 节点亲和性调度(NodeAffinity)

    4.3 kiali 节点亲和性调度


1 前言

        如果你对博客有任何疑问,请告诉我。第十五章 九析带你轻松完爆 service mesh - istio kiali 亲和性调度_第1张图片


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:第十五章 九析带你轻松完爆 service mesh - istio kiali 亲和性调度_第2张图片


3 节点调度

        在开始 kiali 亲和性调度之前,先演示一个简单的例子介绍 pod 选择调度到指定 node:

3.1 节点打标

        使用命令查看当前所有 k8s 节点:

kubectl get nodes

        命令截图如下:第十五章 九析带你轻松完爆 service mesh - istio kiali 亲和性调度_第3张图片

        现在给 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,截图如下:clipboard4.png


4 kiali 亲和性调度

        上面举例 pod 使用 nodeSelector 选择 node,这就是最简单的 k8s 调度方式。而 kiali 调度方式复杂一些,使用的是节点亲和性调度策略,使用如下命令查看:

kubectl get deployments.apps kiali -n istio-system -o yaml

        命令执行结果部分显示如下:第十五章 九析带你轻松完爆 service mesh - istio kiali 亲和性调度_第4张图片

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 节点亲和性调度如下图所示:第十五章 九析带你轻松完爆 service mesh - istio kiali 亲和性调度_第5张图片

        由图可知,kiali pod 有两个节点亲和性调度策略,一个软策略,一个硬策略。硬策略要求节点  beta.kubernetes.io/arch 标签值必须是 amd64, ppc64le,s390x 三个值之一,如果节点不满足此硬策略,pod 就会一直处于 pending 状态;当满足了此硬策略之后,pod 调度还要经过软策略调度,即:软策略要求节点 beta.kubernetes.io/arch 标签值为 amd64,ppc64le 和 s390x,并且不偏不倚,权重都是 2。