我是靠谱客的博主 还单身草莓,最近开发中收集的这篇文章主要介绍kubernetes的调度、节点选择器、pod的容忍策略 8月17日学习笔记一、k8s调度过程二、调度的两种方式三、pod的可能状态与原因四、容忍affinity,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 一、k8s调度过程
    • 1、一个pod创建的流程
    • 1、ETCD的3个阶段:
  • 二、调度的两种方式
    • 2、nodeName
    • 2、nodeSelector
    • 3、总结
  • 三、pod的可能状态与原因
  • 四、容忍affinity
    • 1、node容忍

一、k8s调度过程

在这里插入图片描述

1、一个pod创建的流程

  1. 客户要创建资源时,会发给APIserver,APIserver会把pod资源的属性信息写入到etcd
  2. etcd记载完成后,会返回记载完成制定发给APIserver
  3. APIserver触发watch机制,发给scheduler信息,我要创建pod资源,请你给我调度分配
  4. scheduler进行评判,通过调度算法算出来的,并把将要绑定的pod所在的node节点IP等信息返回给APIserver
  5. APIserver调动etcd,写入pod和nodeIP等信息,etcd即在完成,再返回状态给APIserver
  6. APIserver又会通过watch机制,分配到指定的node节点当中,通过kubelet绑定对应的node节点,分配对应的pod地址,下载镜像时触发docker run 找到docker下载基础镜像,完成后,容器状态反馈给kubelet;

1、ETCD的3个阶段:

  • 记录pod的元数据
  • 记录pod分配的节点信息
  • 记录pod的状态信息

二、调度的两种方式

注: nodename这种方式可以无视污点调度,而nodeselector这种方式不可以无视污点
去除污点命令:

 kubectl taint node master node-role.kubernetes.io/master-

2、nodeName

用于将pod调度到制定的node名称上,跳过调度器直接分配

kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx-test
  name: nginx-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-test
    spec:
      nodeName: master
      containers:
      - image: nginx
        name: nginx

测试:
在这里插入图片描述

2、nodeSelector

首先给node打标签:

 kubectl label node master job=master

yaml文件修改如下

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: nginx-test
  name: nginx-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-test
    spec:
      nodeSelector:
        job: master
      containers:
      - image: nginx
        name: nginx
       

测试:在这里插入图片描述

3、总结

可以通过nodeselector,taints和tolerations (污点与容忍) nodeAffinity,podAffinity(亲和性)

三、pod的可能状态与原因

phase(相位)
在这里插入图片描述

在这里插入图片描述

四、容忍affinity

1、node容忍

问题:不调度到host值为node1的节点

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-test
  name: nginx-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: nginx-test
    spec:
      containers:
      - image: nginx
        name: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - name: http
          containerPort: 80
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
                - key: host
                  operator: NotIn
                  values:
                  - node1

第二个例子:节点IN在有一个标签job=master

      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
                - key: job
                  operator: In
                  values:
                  - master

最后

以上就是还单身草莓为你收集整理的kubernetes的调度、节点选择器、pod的容忍策略 8月17日学习笔记一、k8s调度过程二、调度的两种方式三、pod的可能状态与原因四、容忍affinity的全部内容,希望文章能够帮你解决kubernetes的调度、节点选择器、pod的容忍策略 8月17日学习笔记一、k8s调度过程二、调度的两种方式三、pod的可能状态与原因四、容忍affinity所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部