热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

亲和性_(2022版)一套教程搞定k8s安装到实战|Affinity

篇首语:本文由编程笔记#小编为大家整理,主要介绍了(2022版)一套教程搞定k8s安装到实战|Affinity相关的知识,希望对你有一定的参考价值。视频来源ÿ

篇首语:本文由编程笔记#小编为大家整理,主要介绍了(2022版)一套教程搞定k8s安装到实战 | Affinity相关的知识,希望对你有一定的参考价值。


视频来源:B站《(2022版)最新、最全、最详细的Kubernetes(K8s)教程,从K8s安装到实战一套搞定》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:(2022版)一套教程搞定k8s安装到实战 | 汇总_COCOgsta的博客-CSDN博客



NodeAffinity:节点亲和力


  • RequiredDuringSchedulingIgnoredDuringExecution:硬亲和力,既支持必须部署在指定的节点上,也支持必须不部署在指定的节点上。

  • PreferredDuringSchedulingIgnoredDuringExecution:软亲和力,尽量部署在满足条件的节点上,或者是尽量不要部署在被匹配的节点。

PodAffinity:Pod亲和力


  • A应用B应用C应用,将A应用根据某种策略尽量或者部署在一块。Label


    • A:app=a B:app=b
    • RequiredDuringSchedulingIgnoredDuringExecution:将A应用和B应用部署在一块
    • PreferredDuringSchedulingIgnoredDuringExecution:尽量将A应用和B应用部署在一块

PodAntiAffinity:Pod反亲和力


  • A应用B应用C应用,将A应用根据某种策略尽量或不部署在一块。Label


    • RequiredDuringSchedulingIgnoredDuringExecution:不要将A应用与与之匹配的应用部署在一块
    • PreferredDuringSchedulingIgnoredDuringExecution:尽量。。。

给节点打上label

kubectl label node k8s-node01 kubernetes.io/e2e-az-name=e2e-az1
kubectl label node k8s-node02 kubernetes.io/e2e-az-name=e2e-az2
kubectl label node k8s-node01 another-node-label-key=another-node-label-value
kubectl label node k8s-master01 another-node-label-key=another-node-label-value

编辑Deployment

spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/e2e-az-name
operator: In
values:
- e2e-az1
- e2e-az2
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: another-node-label-key
operator: In
values:
- another-node-label-value

In:部署在满足多个条件的节点上

NotIn:不要部署在满足这些条件的节点上

Exists:部署在具有某个存在key为指定的值的Node节点上

DoesNotExist:和Exists相反

Gt:大于指定的条件(条件为number,不能为string)

Lt:小于指定的条件

编辑Deployment,修改pod亲和性

spec:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: region
operator: In
values:
- beijing
topologyKey: kubernetes.io/hostname

编辑Deployment,修改namspace的pod亲和性

spec:
# 把demo-nginx和kube-system namespace下的符合label为k8s-app=calico-kube-controllers的Pod部署在同一个节点上(拓扑域)
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: k8s-app
operator: In
values:
- calico-kube-controllers
# 如果写了namespace的字段,但是留空,它是匹配所有namespace下的指定label的Pod,如果写了namespace并且制定了值,就是匹配指定namespace下的指定label的Pod。
# 如果没有写namespace,匹配当前namespace
namespaces:
- kube-system
topologyKey: kubernetes.io/hostname

topologyKey:拓扑域,首先说明一点,不同的key不同的value是属于不同的拓扑域。

kube-system->k8s-app=calico-kube-controllers

拓扑域划分演示:

kubectl label node k8s-master01 k8s-node01 jigui=1
kubectl label node k8s-master02 k8s-node02 jigui=2
kubectl label node k8s-master03 jigui=3
kubectl edit deploy demo-nginx
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoreDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- demo-nginx
topologyKey: jigui

扩展到4个pod,其中3个可以找到部署节点,最后一个处于pending状态,因为配置了3个拓扑域,最后一个找不到部署节点

配置为软亲和力

spec:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoreDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- demo-nginx
topologyKey: jigui

 


推荐阅读
  • 本文详细介绍了 Kubernetes 集群管理工具 kubectl 的基本使用方法,涵盖了一系列常用的命令及其应用场景,旨在帮助初学者快速掌握 kubectl 的基本操作。 ... [详细]
  • java文本编辑器,java文本编辑器设计思路
    java文本编辑器,java文本编辑器设计思路 ... [详细]
  • 本文介绍了一种根据目标检测结果,从原始XML文件中提取并分析特定类别的方法。通过解析XML文件,筛选出特定类别的图像和标注信息,并保存到新的文件夹中,以便进一步分析和处理。 ... [详细]
  • Spring Cloud Config 使用 Vault 作为配置存储
    本文探讨了如何在Spring Cloud Config中集成HashiCorp Vault作为配置存储解决方案,基于Spring Cloud Hoxton.RELEASE及Spring Boot 2.2.1.RELEASE版本。文章还提供了详细的配置示例和实践建议。 ... [详细]
  • Node.js 中 GET 和 POST 请求的数据处理
    本文详细介绍了如何在 Node.js 中使用 GET 和 POST 方法来处理客户端发送的数据。通过示例代码展示了如何解析 URL 参数和表单数据,并提供了完整的实现步骤。 ... [详细]
  • 本文详细介绍了ASP.NET缓存的基本概念和使用方法,包括输出缓存、数据缓存及其高级特性,如缓存依赖、自定义缓存和缓存配置文件等。通过合理利用这些缓存技术,可以显著提升Web应用程序的性能。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • 优化SQL Server批量数据插入存储过程的实现
    本文介绍了一种改进的SQL Server存储过程,用于生成批量插入语句。该方法不仅提高了性能,还支持单行和多行模式,适用于SQL Server 2005及以上版本。 ... [详细]
  • 本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 搭建Jenkins、Ant与TestNG集成环境
    本文详细介绍了如何在Ubuntu 16.04系统上配置Jenkins、Ant和TestNG的集成开发环境,涵盖从安装到配置的具体步骤,并提供了创建Windows Slave节点及项目构建的指南。 ... [详细]
  • 尝试执行数据库模式加载时遇到错误'Mysql2::Error: 指定的键太长;最大键长度为767字节'。本文将探讨这一问题的成因及解决方案。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • Docker 自定义网络配置详解
    本文详细介绍如何在 Docker 中自定义网络设置,包括网关和子网地址的配置。通过具体示例展示如何创建和管理自定义网络,以及容器间的通信方式。 ... [详细]
  • 本文深入探讨了JMeter中的参数解析及其线程组插件的应用,重点介绍了聚合报告的各项关键指标,并提供了详细的插件安装步骤。 ... [详细]
author-avatar
墨镜小靖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有