Kubenetes 生产相关知识点

本文详细介绍了Kubernetes中的标签、节点标签、节点污点和容忍度的概念及其重要用途。标签用于逻辑分组资源,LabelSelector提供灵活的查询机制。节点标签用于定向调度Pod,而节点污点和Pod的容忍度则用于控制Pod的调度行为,确保集群的高可用性和资源管理。此外,还讨论了如何通过命令行操作标签和管理资源。
摘要由CSDN通过智能技术生成

1.k8s 为什么有标签,节点,污点,容忍度

推荐阅读链接1
推荐参考链接2

1.1 k8s 什么是标签,是做什么用的?

   所谓标签就是指一个键值数据,在k8s上任何资源都可以拥有标签;我们可以在创建资源时在配置清单中指定,也可以创建好资源以后再使用命令添加标签;有了标签以后,我们后续就可以根据标签来管理对应的资源;一个资源可以拥有多个标签,同时一个标签也可以附加给多个资源。
   我们可以理解为标签就是用来逻辑的对资源进行分组,拥有相同标签的资源为一组;标签的作用是方便用户管理资源;比如在k8s上运行了几百个pod,我们想要管理功能相同的pod,就可以把具有相似功能的pod附加同一个标签,然后要管理这些pod的时,直接指定拥有指定标签的pod即可

1.1.1 Label 标签的概念

    Label(标签)是Kubernetes系统中另外一个核心概念。一个Label是 一个key=value的键值对,其中key与value由用户自己指定。Label可以被 附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对 象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的 资源对象上。Label通常在资源对象定义时确定,也可以在对象创建后 动态添加或者删除。

1.1.2 标签的用法描述

    我们可以通过给指定的资源对象捆绑一个或多个不同的Label来实 现多维度的资源分组管理功能,以便灵活、方便地进行资源分配、调 度、配置、部署等管理工作。例如,部署不同版本的应用到不同的环境 中;监控和分析应用(日志记录、监控、告警)等。一些常用的Label 示例如下:

  • 版本标签:“release”:“stable”、“release”:“canary”。
  • 环境签:“environment”:“dev”、“environment”:“qa”、“environment”:“production”。
  • 架构标签:“tier”:“frontend”、“tier”:“backend”、“tier”:“middleware”。
  • 分区标签:“partition”:“customerA”、“partition”:“customerB”。
  • 质量管控标签:“track”:“daily”、“track”:“weekly”
       Label相当于我们熟悉的“标签”。给某个资源对象定义一个Label, 就相当于给它打了一个标签,随后可以通过Label Selector(标签选择 器)查询和筛选拥有某些Label的资源对象,Kubernetes通过这种方式实 现了类似SQL的简单又通用的对象查询机制。

1.1.3 Label Selector 是什么?

   Label Selector可以被类比为SQL语句中的where查询条件,例如, name=redis-slave这个Label Selector作用于Pod时,可以被类比为select * from pod where pod’s name =‘redis-slave’这样的语句。当前有两种Label Selector表达式:基于等式的(Equality-based)和基于集合的(Set- based),前者采用等式类表达式匹配标签,下面是一些具体的例子:

  • name=redis-slave:匹配所有具有标签name=redis-slave的资源对 象。
  • env!=production:匹配所有不具有标签env=production的资源对 象,比如env=test 就是满足此条件的标签之一;后者则使用集合操作类表达式匹配标签,下面是一些具体的例子。
  • name in(redis-master, redis-slave):匹配所有具有标签 name=redis-master或者name=redis-slave的资源对象。
  • name not in(php-frontend):匹配所有不具有标签name=php-frontend的资源对象。
1.1.3.1 Label Selector 怎么实现复杂筛选?

   通过多个Label Selector表达式的组合实现复杂的条件选择,多 个表达式之间用“,”进行分隔即可,几个条件之间是“AND”的关系,即 同时满足多个条件,比如下面的例子:
以myweb Pod为例,Label被定义在其metadata中:
管理对象RC和Service则通过Selector字段设置需要关联Pod的 Label; 其他管理对象如Deployment、ReplicaSet、DaemonSet和Job则可以在Selector中使用基于集合的筛选条件定义,例如:

  • matchLabels用于定义一组Label,与直接写在Selector中的作用相 同;matchExpressions用于定义一组基于集合的筛选条件,可用的条件 运算符包括In、NotIn、Exists和DoesNotExist。如果同时设置了matchLabels和matchExpressions,则两组条件为 AND关系,即需要同时满足所有条件才能完成Selector的筛选
  • 如果同时设置了matchLabels和matchExpressions,则两组条件为 AND关系,即需要同时满足所有条件才能完成Selector的筛选。

1.1.4 Label Selector在Kubernetes中的重要使用场景

  • kube-controller进程通过在资源对象RC上定义的Label Selector 来筛选要监控的Pod副本数量,使Pod副本数量始终符合预期设定的全自 动控制流程。
  • kube-proxy进程通过Service的Label Selector来选择对应的Pod, 自动建立每个Service到对应Pod的请求转发路由表,从而实现Service的 智能负载均衡机制。
  • 通过对某些Node定义特定的Label,并且在Pod定义文件中使用 NodeSelector这种标签调度策略,kube-scheduler进程可以实现Pod定向调 度的特性。

1.1.5 为什么说Label和Label Selector 共同构成了Kubernetes集群的高可用?

   假设为Pod定义了3个Label:release、 env和role,不同的Pod定义了不同的Label值,如图所示,如果设 置“role=frontend”的Label Selector,则会选取到Node 1和Node 2上的Pod;如果设置“release=beta”的Label Selector,则会选取到Node 2和Node
   使用Label可以给对象创建多组标签,Label和Label Selector 共同构成了Kubernetes系统中核心的应用模型,使得被管理对象能够被 精细地分组管理,同时实现了整个集群的高可用性。
在这里插入图片描述

1.1.6 怎么通过命令标签来管理资源

1.2 k8s 为什么给节点打标签?

    node标签设置后,pod可以根据要求让pod调度到想要的节点上运行,或者不在某节点运行。或者确保pod调度到具有高性能(比如ssd的机器)的节点上。 举个例子:
   对于一些非重要pod(系统)且无特定要求,promethues,aollop,itl ,Skywalking 等。可以用这种方式调度到自己想调度的节点。

1.2.1 怎么给节点打标签?

  • 1.展示节点标签

    kubectl  get node --show-labels=true
    
  • 2.添加节点标签

    kubectl label nodes node1 node=node1
    kubectl label nodes node2 node=node2
    
  • 3.把pod 调度到指定标签(节点)

    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
       name: nginx-select-node1
    spec:
    replicas: 2
    template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        node: node1
      containers:
      - name: nginx-select-node1
        image: nginx:latest
        ports:
        - containerPort: 80
    
  • 4.查看pod 调度结果

    kubectl get pods -A -o wide
    

1.3 k8s 为什么要给节点打污点

(节点)污点和(pod)容忍度参考链接

kubectl taint node node名 key=value:污点三个可选值
NoSchedule : 一定不被调度
PreferNoSchedule : 尽量不被调度
NoExecute : 不会调度,并且还会驱逐Node已有Pod

1.4 k8s 为什么要给pod 设置容忍度

2. kubernetes endpoints是什么?

推荐链接1:
推荐链接2:

3. 如何通过pod 快速找到相关yaml 文件

4. 其他相关问题

pod 容器时区与服务器时区不一致解决办法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值