博客
关于我
K8S入门学习笔记第六天,nodeSelector,nodeAffinity,Taint,DaemonSet控制器
阅读量:326 次
发布时间:2019-03-04

本文共 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容器

转载地址:http://nhah.baihongyu.com/

你可能感兴趣的文章
mui HTML5 plus 下载文件
查看>>
DSP开发板准备
查看>>
c++中ifstream及ofstream超详细说明
查看>>
c++中explicit和mutable关键字探究
查看>>
c语言结构体字节对齐详解
查看>>
Deep residual learning for image recognition
查看>>
Python 知识点总结篇(3)
查看>>
爬取网易科技滚动新闻
查看>>
vuex modules
查看>>
sleep、wait、yield、join——简介
查看>>
web项目配置
查看>>
基于单片机可控音乐流水灯控制设计-全套资料
查看>>
基于单片机简易信号误差分析设计-全套资料
查看>>
基于单片机简易脉搏测量仪系统设计-毕设课设资料
查看>>
Javascript中String支持使用正则表达式的四种方法
查看>>
【Tool】如何使用 Uniflash 烧写 WIFI 芯片 CC3200
查看>>
纯客户端页面关键字搜索高亮jQuery插件
查看>>
Java温故而知新-反射机制
查看>>
eclipse引用sun.misc开头的类
查看>>
关于EFI系统分区(ESP)你应该知道的3件事
查看>>