Files
kuboard-press/t/cka/daily/005.md
huanqing.shao ef26d62190 CKA 006、CICD
2019-11-27 22:59:16 +08:00

6.2 KiB
Raw Blame History

vssueId, sharingTitle, description, meta
vssueId sharingTitle description meta
170 CKA备考打卡 - 每日一题 - Day 5 CKA备考打卡 - 每日一题 - Day 5
name content
keywords Kubernetes,K8S,CKA,Certified Kubernetes Administrator

CKA每日一题 --- Day 5

::: tip 考题

通过命令行创建两个deployment。

  • 需要集群中有2个节点
  • 第1个deployment名称为cka-1122-01使用nginx镜像有2个pod并配置该deployment自身的pod之间在节点级别反亲和
  • 第2个deployment名称为cka-1122-02使用nginx镜像有2个pod并配置该deployment的pod与第1个deployment的pod在节点级别亲和

最好提交最精简的deployment yaml如果评论被限制请提交反亲和性配置块yaml也可多次评论提交

:::

答案及解析

答案

第一个deploymentcka-1122-01

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cka-1122-01
  name: cka-1122-01
spec:
  replicas: 2
  selector:
    matchLabels:
      app: cka-1122-01
  template:
    metadata:
      labels:
        app: cka-1122-01
    spec:
      containers:
      - image: nginx
        name: cka-1122-01  
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - cka-1122-01
              topologyKey: "kubernetes.io/hostname"

第二个deploymentcka-1122-02

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cka-1122-02
  name: cka-1122-02
spec:
  replicas: 2
  selector:
    matchLabels:
      app: cka-1122-02
  template:
    metadata:
      labels:
        app: cka-1122-02
    spec:
      containers:
      - image: nginx
        name: cka-1122-02
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - cka-1122-01
            topologyKey: "kubernetes.io/hostname"

最终调度结果:

NAME                           READY     STATUS    RESTARTS   AGE       IP           NODE
cka-1122-01-5df9bdf8c9-qwd2v    1/1      Running      0       8m     10.192.4.2     node-1
cka-1122-01-5df9bdf8c9-r4rhs    1/1      Running      0       8m     10.192.4.3     node-2  
cka-1122-02-749cd4b846-bjhzq    1/1      Running      0       10m    10.192.4.4     node-1
cka-1122-02-749cd4b846-rkgpo    1/1      Running      0       10m    10.192.4.5     node-2  

解析

考点k8s中的高级调度及用法。

亲和性和反亲和性调度官方文档:

https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

中文文档: https://kuboard.cn/learning/k8s-intermediate/config/assign-pod-node.html

将 Pod 调度到特定的 Node 上nodeSelector

nodeSelector是节点选择约束的最简单推荐形式。nodeSelector是PodSpec下的一个字段。它指定键值对的映射。为了使Pod可以在节点上运行该节点必须具有每个指定的键值对作为label。

CKA每日一题_Day5

语法格式map[string]string

作用: 匹配node.labels 排除不包含nodeSelector中指定label的所有node 匹配机制 —— 完全匹配

nodeSelector 升级版nodeAffinity

节点亲和性在概念上类似于nodeSelector它可以根据节点上的标签来限制Pod可以被调度在哪些节点上。

CKA每日一题_Day5

**红色框为硬性过滤:**排除不具备指定label的node在预选阶段起作用

**绿色框为软性评分:**不具备指定label的node打低分 降低node被选中的几率在优选阶段起作用

与nodeSelector关键差异

引入运算符InNotIn labelselector语法 支持枚举label可能的取值如 zone in [az1, az2, az3...] 支持硬性过滤和软性评分

硬性过滤规则支持指定多条件之间的逻辑或运算 软性评分规则支持 设置条件权重值

让某些 Pod 分布在同一组 Node 上podAffinity

Pod亲和性和反亲和性可以基于已经在节点上运行的Pod上的标签而不是基于节点上的标签来限制Pod调度的节点。

规则的格式为:

如果该X已经在运行一个或多个满足规则Y的Pod则该Pod应该或者在反亲和性的情况下不应该在X中运行。

Y表示为LabelSelector。X是一个拓扑域例如节点机架云提供者区域云提供者区域等。

CKA每日一题_Day5

红框硬性过滤排除不具备指定pod的node组在预选阶段起作用绿框软性评分不具备指定pod的node组打低分 降低该组node被选中的几率在优选阶段起作用

与nodeAffinity的关键差异

定义在PodSpec中亲和与反亲和规则具有对称性 labelSelector的匹配对象为Pod 对node分组依据label-key=topologyKey每个labelvalue取值为一组

硬性过滤规则,条件间只有逻辑与运算

避免某些 Pod 分布在同一组 Node 上podAntiAffinity

CKA每日一题_Day5

与podAffinity的差异

匹配过程相同

最终处理调度结果时取反 即 podAffinity中可调度节点在podAntiAffinity中为不可调度 podAffinity中高分节点在podAntiAffinity中为低分

CKA 考试每日一题系列,全部内容由 我的小碗汤 创作,本站仅做转载