周六本人生日和朋友喝酒去了,给大家说声抱歉,两天没有更新,希望大家可以谅解!
今天我们主要讲解k8s中的Label,Doployment,Horizontal Pod Aitoscaler(HPA).在讲解中途,我们会穿插一些小的实例,使大家可以更加的了解。
Label:一个Label是一个Key-Value的键值对,Label可以被附加到各种资源对象上(Pod,Node,Service,RC)
Label:一个Label可以定义任意数量个标签,通常在资源对象定义时确定,可以在对象创建后动态添加或删除。
Label:通过给指定的资源对象捆绑一个或多个不同的Label来实现多维度的资源分组管理功能。
Label:给某个资源对象定义一个标签,我们可以通过Label Selector(标签选择器)查看和筛选。生产环境中常用的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:基于等式(Equality-based)的筛选标签的例子:
◎ name=redis-slave:匹配所有具有标签name=redis-slave的资源对象。
◎ env!=production:匹配所有不具有标签env=production的资源对象,比如env=test就是满足此条件的标签之一
后者则使用集合操作(Set-based)类表达式匹配标签,下面是一些具体的例子。
◎ name in(redis-master, redis-slave):匹配所有具有标签name=redis-master或者name=redis-slave的资源对象。
◎ name not in(php-frontend):匹配所有不具有标签name=php-frontend的资源对象
Label Selector 在k8s中重要使用场景如下:
◎ kube-controller进程通过在资源对象RC上定义的Label Selector来筛选要监控的Pod副本数量,使Pod副本数量始终符合预期设定的全自动控制流程。
◎ kube-proxy进程通过Service的Label Selector来选择对应的Pod,自动建立每个Service到对应Pod的请求转发路由表,从而实现Service的智能负载均衡机制。
◎ 通过对某些Node定义特定的Label,并且在Pod定义文件中使用NodeSelector这种标签调度策略,kube-scheduler进程可以实现Pod定向调度的特性。
完整的rc.yarm
apiVersion: v1
kind: ReplicationController
metadata:
name: frontend
spec:
replicas: 1
selector:
tier: frontend
template:
metadata:
labels: #可以自己定义key-value
app: app-demo
tier: frontend #前端架构
spec:
containers:
- name: tomcat-damo
image: tomcat
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
env: #环境变量
- name: GET_HOSTS_FROM
value: dns
创建方法:
kubectl create -f tomcatdemo-rc.yaml
查看方法
Deployment:在内部使用了Replica Set来实现目的,无论从Deployment的作用与目的、YAML定义,还是从它的具体命令行操作来看,我们都可以把它看作RC的一次升级,两者的相似度超过90%。
Deployment:相对于RC的一个最大升级是我们可以随时知道当前Pod“部署”的进度。
Deployment:典型的使用场景有以下几个:
◎ 创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建。
◎ 检查Deployment的状态来看部署动作是否完成(Pod副本数量是否达到预期的值)。
◎ 更新Deployment以创建新的Pod(比如镜像升级)。
◎ 如果当前Deployment不稳定,则回滚到一个早先的Deployment版本。
◎ 暂停Deployment以便于一次性修改多个PodTemplateSpec的配置项,之后再恢复Deployment,进行新的发布。
◎ 扩展Deployment以应对高负载。
◎ 查看Deployment的状态,以此作为发布是否成功的指标。
◎ 清理不再需要的旧版本ReplicaSets。
我们来运行一个例子来直观感受Deployment的概念
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: frontend
spec:
replicas: 1
selector:
matchLabels:
tier: frontend
matchExpressions:
- {key: tier, operator: In, values: [frontend]}
template:
metadata:
labels:
app: app-demo
tier: frontend #前端架构
spec:
containers:
- name: tomcat-damo2
image: tomcat
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8081
env: #环境变量
- name: GET_HOSTS_FROM
value: dns
kubectl create -f tomcat-deployment.yarml
小结:
看到这里大家今天的内容理解了吗?没有理解可以自行百度慢慢消化哦,如果有什么不懂得可以在下面评论,周一至周五晚12点之前博主会更新出一篇关于k8s的讲解文章,博主晚上看到评论中的问题,会第一时间为大家解答哦
谢谢大家的支持!