k8s系列第五篇~k8s资源对象-应用类资源对象(二)
上篇文章主要带大家了解了应用类资源的service与pod,本文将带大家学习应用类资源的label、标签选择器、pod、deployment、service、clusterIP。
1、Label与标签选择器
label(标签)是kubernetes系统中的另一个核心概念,一个label是一个key=value的键值对,其中key与value由用户自己指定。Label可以被附加到各种资源对象上,例如node、pod、service、deployment等,一个资源对象可以定义任意数量的label,同一个label也可以被添加到任意数量的资源对象上。Label通常在资源对象定义时确定,也可以在对象创建后动态增加或删除。可以通过给指定的资源对象捆绑一个或多个不同的label来实现资源分组管理功能,以便灵活、方便地进行资源分配、调度、配置、部署等管理工作,例如:部署不同版本的应用到不同的环境中,以及监控、分析应用等。一些常用的label示例如下:
版本标签:release:stable、release:canary。
环境标签:env:dev、env:pro。
架构标签:tier:frontend、tier:backend。
分区标签:partition:conA、partition:conB。
质量管控标签:track:daily、track:weekly。
给资源对象定义完label后,可以通过label selector(标签选择器)查询和筛选拥有某些label的资源对象,kubernetes通过这种方式实现了类似sql的简单又通用的对象查询机制。Label select可以类比为sql语句中的where查询条件,当前有两种label selector表达式:基于等式的(equality-based)selector表达式和基于集合的(set-based)selector表达式。
name=tomcat,匹配所有具有name=tomcat标签的资源对象。
env!=pro,匹配所有不具有env=pro标签的资源对象。
name in (tomcat,redis),匹配所有具有name=tomcat或者name=redis标签的资源对象。
name not in (tomcat),匹配所有不具有name-tomcat标签的资源对象。
可以通过多个label selector表达式的组合来实现复杂的条件选择,多个表达式之间用”,”进行分隔,几个条件之间是“AND”的关系。
2、pod与deployment
Deployment资源定义示例:
apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentlabels:app: nginxspec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80
参数说明:
只有一个pod副本实例时,我们是否也需要deployment来自动创建pod呢?
下图显示了pod、deployment与service的逻辑关系。
多个pod副本组成一个集群来提供服务,客户端如何访问他们呢?
下面是tomcat-service.yaml的Service定义文件:
apiVersion:v1kind:Servicemetadata:name:tomcat-servicespec:selector:name:mywebports:- protocol:TCPport:8080targetPort:8080
基本命令:
参数说明:
service如何多个端口同时提供服务?
apiVersion:v1kind:Servicemetadata::tomcat-servicespec:::myweb::service-port:TCP:8080:8080name:shutdown-port:TCP:8005targetPort:8005
