美文网首页
k8s 亲和度

k8s 亲和度

作者: 与狼共舞666 | 来源:发表于2022-09-02 16:27 被阅读0次
kind: Pod
metadata:
        name: pod-node-affinity-demo
        namespace: default
        labels:
            app: myapp
            tier: frontend
spec:
    containers:
    - name: myapp
      image: ikubernetes/myapp:v1
    affinity:
         nodeAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
                   nodeSelectorTerms:
                   - matchExpressions:
                     - key: zone
                       operator: In
                       values:
                       - foo
                       - bar

以上内容表示将 pod-node-affinity-demo调度到一个拥有标签zone是foo/bar的node节点上,kubectl apply -f pod-nodeaffinity-demo.yaml创建后,查看pod,kubectl get pods -o wide | grep pod-node,显示pod的状态是pending挂起,因为此处是required应亲和(与此对应的是软亲和preferred),所以必须满足调度条件才会完成调度。

[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   0/1     Pending   0          20s   <none>   <none>   <none>           <none>

接着,对任意一个node工作节点打一个类似的zone标签,例如对node1节点打标签,如下所示:

[root@master1 pods]# kubectl label nodes node1 zone=bar
node/node1 labeled
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   0/1     ContainerCreating   0          11m   <none>   node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   0/1     ContainerCreating   0          11m   <none>   node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   0/1     ContainerCreating   0          11m   <none>   node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   0/1     ContainerCreating   0          11m   <none>   node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   0/1     ContainerCreating   0          11m   <none>   node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   0/1     ContainerCreating   0          11m   <none>   node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo   1/1     Running   0          11m   172.16.166.131   node1   <none>           <none>

可以看到经过对node1打标签后满足了pod-nodeaffinity-demo的调度条件,开始在node1上调度创建,最终显示running状态。
例二(nodeAffinity软亲和):

apiVersion: v1
kind: Pod
metadata:
        name: pod-node-affinity-demo-2
        namespace: default
        labels:
            app: myapp
            tier: frontend
spec:
    containers:
    - name: myapp
      image: ikubernetes/myapp:v1
    affinity:
        nodeAffinity:
            preferredDuringSchedulingIgnoredDuringExecution:
            - preference:
               matchExpressions:
               - key: zone1
                 operator: In
                 values:
                 - foo1
                 - bar1
              weight: 60

直接运行,结果是在node1节点上调度创建完成,由此可见nodeAffinity(preferred)软亲和并不一定需要满足对应的匹配表达式条件,调度所需条件更低更试用。
Node节点亲和性针对的是pod和node的关系,Pod调度到node节点的时候匹配的条件


[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo     1/1     Running             0          19m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   0/1     ContainerCreating   0          17s   <none>           node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo     1/1     Running             0          19m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   0/1     ContainerCreating   0          21s   <none>           node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo     1/1     Running             0          19m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   0/1     ContainerCreating   0          22s   <none>           node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo     1/1     Running             0          19m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   0/1     ContainerCreating   0          24s   <none>           node1   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod-node
pod-node-affinity-demo     1/1     Running   0          19m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   1/1     Running   0          26s   172.16.166.132   node1   <none>           <none>

例三(podAffinity亲和度,前提条件是依据一个已经创建运行的pod作为参照标准)

apiVersion: v1
kind: Pod
metadata:
  name: pod-first
  labels:
    app2: myapp2
    tier: frontend
spec:
    containers:
    - name: myapp
      image: ikubernetes/myapp:v1
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-second
  labels:
    app: backend
    tier: db
spec:
    containers:
    - name: busybox
      image: busybox:latest
      imagePullPolicy: IfNotPresent
      command: ["sh","-c","sleep 3600"]
    affinity:
      podAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
              matchExpressions:
              - {key: app2, operator: In, values: ["myapp2"]}
           topologyKey: kubernetes.io/hostname
[root@master1 pods]# kubectl apply -f pod-required-affinity-demo.yaml 
pod/pod-first created
pod/pod-second created
[root@master1 pods]# kubectl get pods -o wide | grep pod
pod-first                  0/1     ContainerCreating   0          27s   <none>           node2   <none>           <none>
pod-node-affinity-demo     1/1     Running             0          33m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   1/1     Running             0          14m   172.16.166.132   node1   <none>           <none>
pod-second                 0/1     ContainerCreating   0          25s   <none>           node2   <none>           <none>
[root@master1 pods]# kubectl get pods -o wide | grep pod
pod-first                  1/1     Running   0          37s   172.16.104.4     node2   <none>           <none>
pod-node-affinity-demo     1/1     Running   0          33m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   1/1     Running   0          14m   172.16.166.132   node1   <none>           <none>
pod-second                 1/1     Running   0          35s   172.16.104.5     node2   <none>           <none>

上面说明第一个pod调度到哪,第二个pod也调度到哪,这就是pod节点亲和性
例四

apiVersion: v1
kind: Pod
metadata:
  name: pod-first
  labels:
    app1: myapp1
    tier: frontend
spec:
    containers:
    - name: myapp
      image: ikubernetes/myapp:v1
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-second
  labels:
    app: backend
    tier: db
spec:
    containers:
    - name: busybox
      image: busybox:latest
      imagePullPolicy: IfNotPresent
      command: ["sh","-c","sleep 3600"]
    affinity:
      podAntiAffinity:
         requiredDuringSchedulingIgnoredDuringExecution:
         - labelSelector:
              matchExpressions:
              - {key: app1, operator: In, values: ["myapp1"]}
           topologyKey: kubernetes.io/hostname
[root@master1 pods]# kubectl apply -f pod-required-anti-affinity-demo.yaml

[root@master1 pods]# kubectl get pods -o wide | grep node
pod-first                  1/1     Running   0          42s   172.16.104.6     node2   <none>           <none>
pod-node-affinity-demo     1/1     Running   0          56m   172.16.166.131   node1   <none>           <none>
pod-node-affinity-demo-2   1/1     Running   0          37m   172.16.166.132   node1   <none>           <none>
pod-second                 1/1     Running   0          42s   172.16.166.133   node1   <none>           <none>

显示两个pod不在一个node节点上,这就是pod节点反亲和性

相关文章

  • k8s 亲和度

    以上内容表示将 pod-node-affinity-demo调度到一个拥有标签zone是foo/bar的node节...

  • K8S高级调度——亲和性和反亲和性

    K8S高级调度——亲和性和反亲和性 参考: Assigning Pods to Nodes Inter-pod t...

  • Kubernetes 亲和与反亲和实用示例

    K8S亲和与反亲和简介 [1] nodeSelector 提供了一种非常简单的方法来将 pod 约束到具有特定标签...

  • k8s的亲和和反亲和

    亲和和反亲和,包含两种类型:“节点亲和”和“pod间亲和/反亲和” 为何要做node亲和 我们在日常工作中经常会遇...

  • Node Affinity 节点亲和性解读

    NodeAffinity 节点亲和性作为 k8s 一种高级调度策略,其设计目标“决定 Pod 可以部署在哪些主机上...

  • k8s伸缩与亲和

    [toc] 一、HPA与弹性伸缩 1.1 scale scale命令可以使用命令行通过控制器调整副本数 1.2 H...

  • k8s 亲和性和反亲和性

    亲和性和反亲和性 node 亲和性 node亲和性策略表示pod部署到符合某些条件的node上. 上面的这个例子表...

  • 【光@教育思考】朱永新:理想课堂的六纬度

    理想课堂的“六度”,即参与度、亲和度、自由度、整合度、延展度、练习度。 理解好这六个纬度,或者朝...

  • k8s调度-亲和性和反亲和性

    一、解释 一般来说,pod的调度过程会经历如下过程: 但有时候,这种调度需要人为干涉,以便完成更加符合预期的调度,...

  • 我的课堂我作主

    构筑理想课堂的六个维度,简称“六度”:参与度、亲和度、自由度、整合度、练习度、延展度。理想课堂应是学生全...

网友评论

      本文标题:k8s 亲和度

      本文链接:https://www.haomeiwen.com/subject/nwmenrtx.html