k8s的策略

这篇具有很好参考价值的文章主要介绍了k8s的策略。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

集群调度:

Scheduler的调度算法:

预算策略

过滤出合适的节点

优先策略

选择部署的节点

NodeName:硬策略,不走调度策略,node1

nodeSelector:根据节点的标签选择,会走一个调度算法

只要是走调度算法,在不满足预算策略的情况下,所有的pod都是pending

Node节点的亲和性:

硬策略:必须满足的条件。匹配原则根据节点的标签

软策略:尽量满足,而不是一定满足

以上说的都是node节点

接下来我们来说pod的

亲和性和反亲和性:

调度策略:      匹配标签         操作符                      拓扑域   调度目标

Node的亲和性: 主机标签        in¬in exists doesNotExist Gt Lt 不支持    指定主机

Pod 的亲和性    pod的标签      in notin exists doesnotexist       支持     pod和指定标签的pod部署在同一拓扑图

Pod的反亲和性  pod的标签      in notin exists doesnotexist       支持

拓扑域:

k8s集群节点当中的一个组织结构,可以根据节点的物理关系或者逻辑关系进行划分,可以用来表示节点之间的空间关系,网络关系或者其他类型的关系

标签,主机标签

Pod

注意点:

Pod的亲和性和策略,在配置时,必须加上拓扑域的关键字topologykey,指向节点标签

Pod亲和性的策略分为硬策略和软策略

Pod亲和性的notin可以替代反亲和性

Pod亲和性主要是为了把相关联的pod部署在同一节点

你在进行部署的时候怎么考虑node节点:

污点和容忍可以配合node节点一块使用

演示:

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

演示:

k8s的策略,kubernetes,容器,云原生

解析:

k8s的策略,kubernetes,容器,云原生

添加标签

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

另外一种方式:

硬策略:

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

软策略写法:

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

反亲和性:

软策略:

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

硬策略:

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

污点:

是node的调度机制,不是pod

被设为污点的节点,不会部署pod

污点和亲和性相反,亲和性是尽量选择和一定选择

污点的节点一定不被选择吗?

Taint三种:

  1. NoSchedule:k8s不会把pod调度到这个节点上
  2. preferNoSchedule:如果污点类型是他,只是尽量避免把pod部署在该节点上,而不是一定
  3. NoExecute:如果污点类型是它的话,k8s将会把该节点pod驱逐出去,而且也不会调度到这个节点,基于控制器创建的pod,虽然被驱逐,会在其他节点部署,自主pod会被直接杀死

注意点:节点服务器需要维护时,服务器关机,节点上的pod将会失效,在工作中我们主要部署pod的方式控制控制器部署,deployment最多的,一旦节点设置被驱逐,控制器创建的pod会在其他节点继续部署

所有的pod都会被驱逐,更命名空间无关,所有的一切都会被驱逐,不论你的创建方式是什么,都会被驱逐,系统集群组件不会被驱逐

查看污点命令:

kubectl describe nodes node01 | grep -i taints

k8s的策略,kubernetes,容器,云原生

清缓存命令

echo 1 > /proc/sys/vm/drop_caches

污点演示三种情况:

第一种:

设置污点

k8s的策略,kubernetes,容器,云原生

删除污点

k8s的策略,kubernetes,容器,云原生

第二种:

尽量不调度

k8s的策略,kubernetes,容器,云原生

第三种:

如果污点类型是它的话,k8s将会把该节点pod驱逐出去,而且也不会调度到这个节点

k8s的策略,kubernetes,容器,云原生

容忍:

即使集群节点上设置了污点,有了容忍机制,依然可以在设置为污点的节点上部署pod

特殊情况,NoExecute依然可以部署pod,但是是有生命周期,时间一到,pod被销毁然后重新拉起。生命周期结束之后,会驱逐一部分pod到其他节点上,有点节点还是会保留在污点节点上。

该节点维护完毕,测试一下节点的工作是否正常

删除所有污点:

k8s的策略,kubernetes,容器,云原生

设置污点:

kubectl taint node master01 key=1:NoSchedule

k8s的策略,kubernetes,容器,云原生

配置容忍:

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

设置为驱逐类型

kubectl describe nodes node01 | grep -i taints

kubectl taint node master01 key=1:NoExecute

kubectl taint node node02 key=1:NoSchedule-

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

设置容忍时间

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: nginx2

  name: nginx2

spec:

  replicas: 3

  selector:

    matchLabels:

      app: nginx2

  template:

    metadata:

      labels:

        app: nginx2

    spec:

      containers:

      - image: nginx:1.22

        name: nginx2

      tolerations:

      - key: key

        operator: Equal

        value: "1"

        effect: NoExecute

        tolerationSeconds: 36

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

36秒之后,被驱逐之后,也会出现

k8s的策略,kubernetes,容器,云原生

演示污点容忍机制

kubectl describe nodes node01 | grep -i taints

kubectl taint node node02 key=1:NoExecute-

k8s的策略,kubernetes,容器,云原生

kubectl taint node node01 key=1:NoSchedule

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

第二种情况

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

解析:

k8s的策略,kubernetes,容器,云原生

指定key的值,指标节点的标签,但是不指定污点的类型,那么所有节点上只要包含了这个指定的标签,可以容忍所有的污点

k8s的策略,kubernetes,容器,云原生

没有key,不匹配节点标签,容忍所有污点,但是类型是指定的类型

总结:

Node的亲和性

Pod的亲和性和反亲和性

污点和容忍

总结起来就是如何选择节点部署pod,选择一个期望的节点部署pod

举例:

我有多个master节点:

Kubectl taint node master节点名称k8s的策略,kubernetes,容器,云原生

尽量不往master节点上部署pod,但是不是一定的,防止资源浪费,自定义一个标签

业务维护:

Node02需要维护两个小时,但是这个节点上还有业务pod在运行

就需要把这个节点的污点设置为驱逐

我们部署pod,一般都是使用deployment部署的pod,会在其他节点重新部署,并不是被杀死,自主试的pod会被杀死

一旦节点恢复,一定要把污点去除

Cordon和drain

Cordon:可以直接把节点标记为不可用状态

Drain:排水,把该节点下的pod全部转移到其他的node节点上云霄

一旦执行了drain,被执行的节点就会变成不可调度状态

会驱逐该节点上的所有pod

清空污点

kubectl taint node node02 key=1:NoExecute-

kubectl describe nodes master01 | grep -i taints

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

演示Drain

k8s的策略,kubernetes,容器,云原生

k8s的策略,kubernetes,容器,云原生

解析:

kubectl drain node02 --ignore-daemonsets --delete-emptydir-data --force

Drain:排水,标记node节点为不可调度,然后驱逐pod

--ignore-daemonsets:忽视daemonset部署的pod,daemonset部署的pod还在节点

--delete-local-data:有本地挂载卷的pod会被强制杀死

--force:强制释放,不是控制器管理的pod

k8s的策略,kubernetes,容器,云原生

如何改回来

k8s的策略,kubernetes,容器,云原生

重点:

node亲和性

Pod亲和性

污点:NoExeccute(驱逐)

Cordon和drain

--ignore-daemonset daemonset部署的一般是重要后台运行的,系统pod,所以不动

总结:

Node亲和性

Pod亲和性

Pod反亲和性

污点:NoExecute

容忍

Cordon

Drain

如何部署pod时比较重要的集群调度机制,合理的配置pod的调度机制可以是资源最大化应用文章来源地址https://www.toymoban.com/news/detail-792780.html

到了这里,关于k8s的策略的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Kubernetes(k8s)网络策略NetworkPolicy

    目录 一.系统环境 二.前言 三.网络策略(NetworkPolicy)简介 四.创建pod和svc 五.没有网络策略的条件下访问pod 六.给pod添加网络策略 6.1 入站网络策略 6.1.1 入站网络策略-pod标签选择器 6.1.2 入站网络策略-namespaceSelector命名空间选择器 6.1.3 入站网络策略-IP地址控制 6.2 出站网络策略

    2024年02月08日
    浏览(39)
  • [kubernetes]-k8s调整镜像清理策略

    导语:k8s在磁盘使用率到达80%之后开始清理镜像,导致服务重启后镜像被删除。记录一下大致调整的方法

    2024年02月06日
    浏览(39)
  • 云原生Kubernetes:K8S概述

    目录 一、理论 1.云原生 2.K8S 3.k8s集群架构与组件 4.K8S网络 二、总结 (1)概念 云原生是一种基于容器、微服务和自动化运维的软件开发和部署方法。它可以使应用程序更加高效、可靠和可扩展,适用于各种不同的云平台。 如果要更直接通俗的来解释下上面的概念,云原生更

    2024年02月10日
    浏览(53)
  • 【云原生 • Kubernetes】认识 k8s、k8s 架构、核心概念点介绍

    目录 一、Kubernetes 简介 二、Kubernetes 架构 三、Kunbernetes 有哪些核心概念? 1. 集群 Cluster 2. 容器 Container 3. POD 4. 副本集 ReplicaSet 5. 服务 service 6. 发布 Deployment 7. ConfigMap/Secret 8. DaemonSet 9. 核心概念总结 Kubernetes 简称 k8s,是支持云原生部署的一个平台,起源于谷歌。谷歌早在十几

    2024年02月03日
    浏览(186)
  • 【云原生、k8s】Calico网络策略

    第四阶段 时  间:2023年8月17日 参加人:全班人员 内  容: Calico网络策略 目录 一、前提配置 二、Calico网络策略基础 1、创建服务 2、启用网络隔离 3、测试网络隔离 4、允许通过网络策略进行访问 三、Calico网络策略进阶 1、创建服务 2、拒绝所有入口流量 3、允许进入Nginx的流

    2024年02月12日
    浏览(43)
  • 【云原生 • Kubernetes】认识 k8s 网络、外部网络访问 k8s 内部服务

    目录 一、认识 Kubernetes 网络 二、外部网络如何访问 k8s 内部服务 1. NodePort 2. Load Balancer 3. Ingress Kubernetes 最底层的网络为节点网络,用来保证 k8s 集群的节点(master 和 worker、worker 节点之间)能够做正常的 IP 寻址和通讯。 Kubernetes 第二层网络就是 Pod 网络,构建于节点网络之上

    2024年01月16日
    浏览(68)
  • 云原生Kubernetes:K8S存储卷

    目录 一、理论 1.存储卷 2.emptyDir 存储卷 3.hostPath卷 4.NFS共享存储 5.PVC 和 PV 6.静态创建PV 7.动态创建PV 二、实验  1.emptyDir 存储卷 2.hostPath卷 3.NFS共享存储 4.静态创建PV 5.动态创建PV 三、问题 1.生成pod一直pending 2.shoumount -e未显示共享目录 3.静态创建pv 报错 4.使用 Deployment 来创建

    2024年02月07日
    浏览(70)
  • 云原生_kubernetes(k8s)介绍

    目录 一、应用部署方式演变 二、k8s介绍 三、k8s的组件 四、k8s中的概念 五、k8s资源管理方式 1、命令式对象管理 2、命令式对象配置 3、声明式对象配置 在部署应用程序的方式上,主要经历了三个时代: 1 、物理机部署: 互联网早期,会直接将应用程序部署在物理机上 优点

    2023年04月13日
    浏览(56)
  • 【云原生K8S】Kubernetes之探针

    目录 一、探针是什么 二、探针类型  Ⅰ、livenessProbe 容器重启策略  Ⅱ、readinessProbe Ⅲ、startupProbe 执行顺序: 字段详情 三、探测机制 Ⅰ、HTTP GET探针 Ⅱ、TCP套接字探针 Ⅲ、Exec探针 探针:是由 kubelet 对容器执行的定期诊断 要执行诊断,则需kubelet 调用由容器实现的 Handler。

    2024年02月09日
    浏览(66)
  • 云原生Kubernetes:K8S安全机制

    目录 一、理论 1.K8S安全机制 2.Authentication认证 3.Authorization授权 4.Admission Control准入控制 5.User访问案例 6.ServiceAccount访问案例 二、实验 1.Admission Control准入控制 2.User访问案例 3.ServiceAccount访问案例 三、问题 1.生成资源报错 2.镜像拉取失败 四、总结 (1)概念 Kubernetes 作为一个分

    2024年02月07日
    浏览(66)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包