K8S入门学习笔记第六天,nodeSelector,nodeAffinity,Taint,DaemonSet控制器
发布日期:2021-05-07 07:25:14 浏览次数:15 分类:精选文章

本文共 2443 字,大约阅读时间需要 8 分钟。

nodeSelector和nodeAffinity作用分别是什么?

nodeSelector:节点选择器用于将Pod调度到匹配label的node上,如果没有匹配的标签会调度失败。完全匹配节点标签,固定到pod的特定节点。nodeAffinity:节点亲和器

具体用法如下

1.创建标签
kubectl  label  node    cka-node  disktype=gpu

#给 cka-node这个节点打上一个 disktype=ssd的标签

2.检查标签
kubectl get  node  --show-labels  #查看所有标签kubectl get node  -l  disktype=gpu   #指定key查找标签

在这里插入图片描述

3.在pod.yaml中指定标签

在这里插入图片描述

至此只顶你标签创建 pod完成
nodeAffinity:节点亲和类型去nodeSelector,可以根据节点上的标签来约束pod调度到哪些节点
特点:
匹配有更多的逻辑组合,不只是字符串的完全相等
调度分为软策略和硬策略,而不是硬性要求
required:必须满足
preferred:尝试满足,但不保证

Taint(污点)

Taints :避免pod调度到特定node上

设置污点

kubectl  taint node  [node]   key=value:[effect][effect]有三个可选值1.Noschedule:一定不能被调度2.PreferNoSchedule:尽量不要被调度3.NoExecute:不仅不会被调度,还会驱逐Node上已有的Pod
Taint用法
1.打污点Taint
kubectl taint  node cka-node  gpu=yes:NoSchedule
2.查看污点
kubectl describe node  | grep  Taint

在这里插入图片描述

3.测试
[root@CKA-master ~]# cat pod.yaml apiVersion: v1kind: Podmetadata:  labels:    run: nginx  name: nginx-gpuspec:  nodeSelector:    porttype: "ssd"  containers:  - image: nginx    name: nginx-ssd    resources: {   }  dnsPolicy: ClusterFirstkubectl  apply -f  pod.yaml

在这里插入图片描述

kubectl describe pod nginx-gpu#检查原因
在这里插入图片描述
发现节点有污点无法容忍,所以无法正常启动

4.更新pod

在这里插入图片描述

容忍这个污点

apiVersion: v1kind: Podmetadata:  labels:    run: nginx  name: nginx-tolerationsspec:  tolerations:    - key: "gpu"             #key等于gpu      operator: "Equal"      #相等      value: "yes"           #value=yes      effect: "NoSchedule"   #污点标签  nodeSelector:    disktype: "gpu"        #指定标签  containers:  - image: nginx    name: nginx-ssd    resources: {   }  dnsPolicy: ClusterFirst
5.去掉污点
kubectl taint  node  cka-node  gpu:NoSchedule-

在这里插入图片描述

6.忽略污点精确分配

增加 nodeName: "cka-node"的配置

apiVersion: v1kind: Podmetadata:  labels:    run: nginx  name: nginx-nodespec:  nodeName:  "cka-node"  containers:  - image: nginx    name: nginx-ssd    resources: {   }  dnsPolicy: ClusterFirst
7.DaemonSet

DaemonSet功能:

1.在每个Node上运行一个Pod
2.新加入的Node也同样会自动运行一个Pod
应用场景:网络插件,监控Agent,日志Agent

7.1创建daemonset.yaml文件
apiVersion: apps/v1kind: DaemonSetmetadata:  labels:    app: nginx  name: nginxspec:  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      tolerations:                  #容忍master节点的污点        - effect: NoSchedule        #容忍master节点的污点          operator: Exists          #容忍master节点的污点      containers:      - image: nginx        name: nginx        resources: {   }

#启动 kubectl apply -f daemonset.yaml

7.2验证是不是每个节点都部署了nginx

kubectl get pods -o wide

在这里插入图片描述
启动完成,每个节点会生成一个nginx容器

上一篇:L2-1 包装机 (25 分)
下一篇:单词数

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月04日 06时06分16秒