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/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
参数说明:
只有一个pod副本实例时,我们是否也需要deployment来自动创建pod呢?
下图显示了pod、deployment与service的逻辑关系。
多个pod副本组成一个集群来提供服务,客户端如何访问他们呢?
下面是tomcat-service.yaml的Service定义文件:
apiVersion:v1
kind:Service
metadata:
name:tomcat-service
spec:
selector:
name:myweb
ports:
- protocol:TCP
port:8080
targetPort:8080
基本命令:
参数说明:
service如何多个端口同时提供服务?
apiVersion:v1
kind:Service
metadata:
tomcat-service :
spec:
:
myweb :
:
service-port :
TCP :
8080 :
8080 :
name:shutdown-port
TCP :
8005 :
targetPort:8005