K8S之污点和容忍度

污点 taints 是定义在node节点 上的键值型属性数据,用于让节点拒绝将Pod调度运行于其上,除非Pod有接纳节点污点的容忍度。容忍度 tolerations 是定义在Pod 上的键值属性数据,用于配置可容忍的污点,且调度器将Pod调度至其能容忍该节点污点的节点上或没有污点的节点上 。
对于nodeAffinity无论是硬策略(硬亲和)还是软策略(软亲和)方式,都是调度 pod 到预期节点上,而Taints恰好与之相反,如果一个节点标记为 Taints ,除非 pod 也被标识为可以容忍污点节点,否则该Taints 节点不会被调度 pod。
节点亲和性,是 pod 的一种属性(偏好或硬性要求),它使 pod 被吸引到一类特定的节点。Taint 则相反,它使节点 能够 排斥 一类特定的 pod Taint 和 toleration 相互配合,可以用来避免 pod 被分配到不合适的节点上。每个节点上都可以应用一个或多个taint ,这表示对于那些不能容忍这些 taint 的 pod,是不会被该节点接受的。如果将 toleration 应用于pod上,则表示这些 pod 可以(但不要求)被调度到具有匹配 taint 的节点上

定义污点和容忍度

污点定义于 nodes.spec.taints 属性。容忍度定义于 pods.spec.tolerations 属性。
使用 kubectl taint 命令可以给某个 Node 节点设置污点,Node 被设置上污点之后就和 Pod 之间存在了一种相斥的关系,可以让 Node 拒绝 Pod 的调度执行,甚至将 Node 已经存在的 Pod 驱逐出去 。
语法: key=value:effect

查看node节点名称 
kubectl get nodes 

查看master节点详细信息:通过观taints察属性,发现master节点默认被打上一个污点。 
kubectl describe nodes k8s-master01

effect定义排斥等级

NoSchedule ,不能容忍,但仅影响调度过程,已调度上去的pod不受影响,仅对新增加的pod生效。
解释说明:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上 。 PreferNoSchedule ,柔性约束,节点现存Pod不受影响,如果实在是没有符合的节点,也可以调度上来。 解释说明:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上 。 NoExecute ,不能容忍,当污点变动时,Pod对象会被驱逐。
解释说明:表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的Pod 驱逐出去

全部资源文件清档

本案例用于演示创建、删除污点及驱逐pod的过程。
污点语法

创建污点:语法规则 
kubectl taint nodes node1 key1=value1:NoSchedule 

删除污点:语法规则 
kubectl taint nodes node1 key1:NoSchedule-

deploymentdemo控制器
产生10个副本

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: deploymentdemo 
  labels: 
    app: deploymentdemo 
spec: 
  replicas: 10 
  template: 
    metadata: 
      name: deploymentdemo 
      labels: 
        app: deploymentdemo 
    spec: 
      containers: 
        - name: deploymentdemo 
          image: nginx:1.17.10-alpine 
          imagePullPolicy: IfNotPresent 
          ports: 
            - containerPort: 80 
      restartPolicy: Always 
  selector: 
    matchLabels: 
      app: deploymentdemo

设置污点

观察每个节点pod运行情况 
kubectl get pods -o wide 

在某一个节点创建污点并驱逐pod 
kubectl taint nodes k8s-node03 offline=testtaint:NoExecute 

查看pod被驱逐过程 
kubectl get pods -o wide 

删除污点 
kubectl taint nodes k8s-node03 offline=testtaint:NoExecute-

查看节点污点信息 
kubectl describe nodes k8s-node03
在Pod上定义容忍度时:
  1. 等值比较 容忍度与污点在key、value、effect三者完全匹配
  2. 存在性判断 key、effect完全匹配,value使用空值
    一个节点可配置多个污点,一个Pod也可有多个容忍度

全部资源文件清档
本案例用于演示创建、删除及驱逐pod的过程。
设置污点

在某一个节点创建污点 
kubectl taint nodes k8s-node03 offline=testtaint:NoSchedule 

查看节点污点信息 
kubectl describe nodes k8s-node03

deploymentdemo控制器
产生10个副本

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: deploymentdemo 
  labels: 
    app: deploymentdemo 
spec: 
  replicas: 10 
  template: 
    metadata: 
      name: deploymentdemo 
      labels: 
        app: deploymentdemo 
    spec: 
      containers:
        - name: deploymentdemo 
          image: nginx:1.17.10-alpine 
          imagePullPolicy: IfNotPresent 
          ports: 
            - containerPort: 80 
      restartPolicy: Always 
  selector: 
    matchLabels: 
      app: deploymentdemo

查看部署情况

部署控制器 
kubectl apply -f deploymentdemo.yml 

查看是否有pod被部署到k8s-node03节点 
kubectl get pods -o wide 

删除控制器 
kubectl delete -f deploymentdemo.yml

设置pod容忍度

Pod.spec.tolerations属性: 
... 
    spec: 
      tolerations: 
        - key: "offline" 
          operator: "Equal" 
          value: "testtaint" 
          effect: "NoSchedule" 
      containers: 
...

完整控制器清单

apiVersion: apps/v1 
kind: Deployment 
metadata: 
  name: deploymentdemo 
  labels: 
    app: deploymentdemo 
  spec: 
    replicas: 10 
    template: 
      metadata: 
        name: deploymentdemo 
        labels: 
          app: deploymentdemo 
      spec: 
        tolerations: 
          - key: "offline"
            operator: "Equal" 
            value: "testtaint" 
            effect: "NoSchedule" 
        containers: 
          - name: deploymentdemo 
            image: nginx:1.17.10-alpine 
            imagePullPolicy: IfNotPresent 
            ports: 
              - containerPort: 80 
        restartPolicy: Always 
  selector: 
    matchLabels: 
      app: deploymentdemo

部署控制器

部署控制器
kubectl apply -f deploymentdemo.yml 

查看pod详细信息 
kubectl get pods -o wide 

删除控制器 
kubectl delete -f deploymentdemo.yml 

删除污点 
kubectl taint nodes k8s-node03 offline=testtaint:NoSchedule-
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容