删除|23 个必知必会的 Kubernetes 高频面试题( 四 )



11、 标签与标签选择器的作用是什么?标签:是当相同类型的资源对象越来越多的时候 , 为了更好的管理 , 可以按照标签将其分为一个组 , 为的是提升资源对象的管理效率 。
标签选择器:就是标签的查询过滤条件 。 目前API支持两种标签选择器:

  • 基于等值关系的 , 如:“=”、“”“==”、“!=”(注:“==”也是等于的意思 , yaml文件中的matchLabels字段);
  • 基于集合的 , 如:in、notin、exists(yaml文件中的matchExpressions字段);

注:in:在这个集合中;notin:不在这个集合中;exists:要么全在(exists)这个集合中 , 要么都不在(notexists);
使用标签选择器的操作逻辑:
  • 在使用基于集合的标签选择器同时指定多个选择器之间的逻辑关系为“与”操作(比如:- {key: nameoperator: Invalues: [zhangsanlisi
    , 那么只要拥有这两个值的资源 , 都会被选中);
  • 使用空值的标签选择器 , 意味着每个资源对象都被选中(如:标签选择器的键是“A” , 两个资源对象同时拥有A这个键 , 但是值不一样 , 这种情况下 , 如果使用空值的标签选择器 , 那么将同时选中这两个资源对象)
  • 空的标签选择器(注意不是上面说的空值 , 而是空的 , 都没有定义键的名称) , 将无法选择出任何资源;
【删除|23 个必知必会的 Kubernetes 高频面试题】在基于集合的选择器中 , 使用“In”或者“Notin”操作时 , 其values可以为空 , 但是如果为空 , 这个标签选择器 , 就没有任何意义了 。
两种标签选择器类型(基于等值、基于集合的书写方法):
selector:  
  matchLabels:           #基于等值
    app: nginx  
  matchExpressions:         #基于集合
    - {key: nameoperator: Invalues: [zhangsanlisi
     #key、operator、values这三个字段是固定的
    - {key: ageoperator: Existsvalues:   #如果指定为exists , 那么values的值一定要为空

12、 常用的标签分类有哪些?标签分类是可以自定义的 , 但是为了能使他人可以达到一目了然的效果 , 一般会使用以下一些分类:
  • 版本类标签(release):stable(稳定版)、canary(金丝雀版本 , 可以将其称之为测试版中的测试版)、beta(测试版);
  • 环境类标签(environment):dev(开发)、qa(测试)、production(生产)、op(运维);
  • 应用类(app):ui、as、pc、sc;
  • 架构类(tier):frontend(前端)、backend(后端)、cache(缓存);
  • 分区标签(partition):customerA(客户A)、customerB(客户B);
  • 品控级别(Track):daily(每天)、weekly(每周) 。
13、 有几种查看标签的方式?答:常用的有以下三种查看方式:
[root@master ~
# kubectl get pod --show-labels    #查看pod , 并且显示标签内容  
[root@master ~
# kubectl get pod -L envtier      #显示资源对象标签的值  
[root@master ~
# kubectl get pod -l envtier      #只显示符合键值资源对象的pod , 而“-L”是显示所有的pod  

14、 添加、修改、删除标签的命令?#对pod标签的操作
[root@master ~
# kubectl label pod label-pod abc=123     #给名为label-pod的pod添加标签  
[root@master ~
# kubectl label pod label-pod abc=456 --overwrite       #修改名为label-pod的标签  
[root@master ~
# kubectl label pod label-pod abc-             #删除名为label-pod的标签  
[root@master ~
# kubectl get pod --show-labels  
   
#对node节点的标签操作
[root@master ~
# kubectl label nodes node01 disk=ssd      #给节点node01添加disk标签