k8s中deployment资源的yaml文件介绍

yaml介绍

基本语法

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进不允许使用tab,只允许使用空格
  • 缩进的空格数不重要,只要相同层级的元素左对齐即可

数据类型

  • 对象

    对象键值对使用冒号结构表示key: value,冒号后面要加一个空格

    key: child-key1: value1child-key2: value2
    
  • 数组

    -开头的行表示构成一个数组

    - value1
    - value2
    - value2
    
  • 纯量

    字符串、布尔值、整数、浮点数、Null、时间、日期

deployment的yaml文件介绍

deployment总共包含5个属性

  1. apiVersion:资源的版本号
  2. kind:资源的类型
  3. metadata:资源的元数据信息
  4. spec:资源的规格说明和预期状态
  5. status:资源的实际状态

metadata

metadata:annotations:                            # 自定义注释列表generation: labels:                                    # 标签,用于标识该资源app: version: name:                                      # deployment名称,同一个命名空间下该名称不可重复namespace:                                 # deploymetn所属命名空间resourceVersion:selfLink:uid:

在线服务场景中,会同时存在多个版本的模型服务,每个版本的模型服务都会对应一个deployment,所有版本的模型服务共用一个service。此时,通过labels:app:deploymentservice进行关联,又通过app+version对同一service下不同的deployment进行区分。

spec

  1. spec.progressDeadlineSeconds

    可选字段,表示deployment controller等待多少秒才能确定(通过deployment statusdeployment进程卡住了,单位:秒

  2. spec.replicas

    可选字段,指定期望的pod数量,默认是1

  3. spec.revisionHistoryLimit

    可选字段,用来指定可以保留的旧的ReplicaSet数量,余下的将在后台被当作垃圾收集,用于历史版本回滚

  4. spec.selector

    可选字段,用来指定deployment管理的pod的范围

  5. spec.strategy

    用来指定新的pod替换旧的pod的策略,包括RollingUpdateRecreate两种:

    • RollingUpdate

      • 使用滚动的方式更新pod
      • 通过配置项maxUnavailable来指定在升级过程中不可用pod的最大数量;该值既可以是绝对值,也可以是百分比;通过百分比计算的绝对值向下取整
      • 通过配置项maxSurge来指定可以超过期望的pod数量的最大个数;该值既可以是绝对值,也可以是百分比;通过百分比计算的绝对值向上取整;
    • Recreate
      • 在创建出新的pod之前会先杀掉所有已存在的pod
  6. spec.template

    必填字段,设置deployment控制的pod的样式,它跟 pod有一模一样的schema,是嵌套的类型,并且不需要apiVersionkind字段。

spec.template: metadata:creationTimestamp: nulllabels:app: version: spec:containers:- env:                      # 容器内的环境变量列表,详情见6.1image:                    # 容器所对应镜像的名称imagePullPolicy:          # 容器拉取镜像的策略,详情见6.2name:                     # 容器的名称ports:                    # 容器内部需要暴露的端口号列表- containerPort: 8888     # 端口号 name: aipaas            # 端口号名称protocol: TCP           # 端口协议,支持TCP和UDP,默认TCPreadinessProbe:           # 健康检测,详见6.3resources:                # 资源配置,详见6.4terminationMessagePath: /dev/termination-log #日志保存路径terminationMessagePolicy: FilednsPolicy: ClusterFirst     # DNS策略nodeSelector:               # Pod调度策略,详见6.5restartPolicy:              # 容器重启策略,详见6.6schedulerName:              # 调度器,详见6.7terminationGracePeriodSeconds: # 容器删除策略,详见6.8securityContext: {}

6.1 环境变量

spec.containers.env: - name: VECLIB_MAXIMUM_THREADSvalue: "1"- name: MKL_NUM_THREADSvalue: "1"- name: NUMEXPR_NUM_THREADSvalue: "1"- name: OPENBLAS_NUM_THREADSvalue: "1"- name: OMP_NUM_THREADS value: "1"    - name: NVIDIA_VISIBLE_DEVICESvalue: none- name: ConCurrencyFlagvalue: "false"- name: SERVER_PROCESS_NUMvalue: "1"

VECLIB_MAXIMUM_THREADSMKL_NUM_THREADSNUMEXPR_NUM_THREADSOPENBLAS_NUM_THREADSOMP_NUM_THREADS 这五个环境变量是用于控制多线程的线程个数的,其值等于pod的cpu个数。

NVIDIA_VISIBLE_DEVICES为gpu配置,当pod中不含有gpu时,添加该环境变量并将其设置为none。

ConCurrencyFlagSERVER_PROCESS_NUM为MPS相关的环境变量,详情见6.9

6.2 容器拉取镜像的策略

  • Always:每次都会从镜像仓库拉取镜像
  • Never:仅使用本地镜像
  • IfNotPresent:优先使用本地镜像,若本地镜像不存在,则会拉取仓库镜像

6.3 健康检测

  • livenessProbe:当健康检测不通过时会直接重启容器
  • readinessProbe:当健康检测不通过时会停止向容器发送流量
spec.readinessProbe: httpGet:httpHeaders:- name: Authorizationvalue: Bearer xxxxxxx # tokenpath: /health           # 请求路径port: 8888              # 请求端口scheme: HTTP            # 请求协议initialDelaySeconds: 30   # 容器启动完成后多长时间进行首次健康检测,单位为秒periodSeconds: 30         # 健康监测时间周期,单位为秒,默认10秒一次successThreshold: 1       # 从检测错误到成功需要几次才认为健康检测成功,默认为1次failureThreshold: 2       # 检测失败几次后就认为健康检测失败,默认为3次timeoutSeconds: 3         # 健康检测响应超时时间,单位为秒,默认为1秒

6.4 资源信息

spec.resources: limits:                     # 设置资源上限值cpu: "1"                  # cpu,单位为corememory: "2147483648"      # 内存,单位为Mib/Gib,若不添加单位,则默认为bytenvidia.com/gpu: "1"       # gpurequests:                   # 设置资源必需值cpu: 250m                 # cpu,若不足一个,则需要添加mmemory: "536870912"       # 内存nvidia.com/gpu: "1"       # gpu

6.5 pod调度策略

spec.nodeSelector: node: worker  # pod会调度到有worker标签的node上

6.6 重启策略

  • Always :不管pod以何种方式终止运行都会将其重启

  • Never:不管pod以何种方式终止运行都不会将其重启

  • OnFailure:只有pod以非0退出码退出才会重启

spec.restartPolicy: Always

6.7 调度器

经过预选筛选和优选打分之后,K8S会选择分数最高的node来运行pod,如果最终有多个 node 的分数最高,那么 Scheduler 将从当中随机选择一个 node 来运行pod

spec.schedulerName: default-scheduler

6.8 优雅删除

spec.terminationGracePeriodSeconds: 30

pod的升级(删除)过程:

  1. K8S首先会启动新的pod
  2. 当新的pod进入Ready状态时,K8S会创建Endpoint并将新的pod纳入负载均衡
  3. K8S移除与老pod相关的Endpoint,并且将老pod的状态设置为Terminating,此时将不会有新的请求到达老pod
  4. 同时K8S会给老pod发送SIGTERM信号,并且等待 terminationGracePeriodSeconds 这么长的时间。(默认为30秒)
  5. 超过terminationGracePeriodSeconds等待时间后, K8S会强制结束老pod
  6. 所以,terminationGracePeriodSeconds 要设置一个合适的值,至少保证所有现存的请求能被正确处理并返回程序处理SIGTERM信号,并且保证所有事务完成后再关闭程序

status

表示K8S对象在当前集群中实际的状态,往往通过资源的Controller控制

status: conditions:- lastTransitionTime: "2020-10-27T01:06:52Z"lastUpdateTime: "2020-10-27T01:06:52Z"message: Deployment has minimum availability.reason: MinimumReplicasAvailablestatus: "True"type: Available- lastTransitionTime: "2020-10-27T01:06:52Z"lastUpdateTime: "2020-10-27T01:07:52Z"message: ReplicaSet "uvzobilkwkmsfqca-serving-v1-d9c5f7bdf" has successfully progressed.reason: NewReplicaSetAvailablestatus: "True"type: ProgressingavailableReplicas: 1observedGeneration: 1    # 观察到的实例readyReplicas: 1         # 准备好的实例replicas: 1              # 实例总数updatedReplicas: 1       # 已更新的实例

MPS

使用gpu的在线服务可以通过开启MPS来提升gpu的使用率

# spec.containers.env
- name: ConCurrencyFlagvalue: "True"
- name: SERVER_PROCESS_NUMvalue: "1"lifecycle:preStop:exec:command:- /bin/bash- /model_serving/model_server/stop_mps.shsecurityContext: capabilities:add:- SYS_ADMINprocMount: Default

完整样例

apiVersion: extensions/v1beta1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: "1"creationTimestamp: "2020-11-04T09:00:37Z"generation: 1labels:app: gbavqfbyfltzqfuu-servingversion: v1name: gbavqfbyfltzqfuu-serving-v1namespace: aipaas-modelservingresourceVersion: "121103285"selfLink: /apis/extensions/v1beta1/namespaces/aipaas-modelserving/deployments/gbavqfbyfltzqfuu-serving-v1uid: 34db5072-1e7c-11eb-b71b-fa163efea19e
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app: gbavqfbyfltzqfuu-servingversion: v1strategy:rollingUpdate:maxSurge: 100%maxUnavailable: 100%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: gbavqfbyfltzqfuu-servingversion: v1spec:containers:- env:- name: VECLIB_MAXIMUM_THREADSvalue: "1"- name: MKL_NUM_THREADSvalue: "1"- name: NUMEXPR_NUM_THREADSvalue: "1"- name: NVIDIA_VISIBLE_DEVICESvalue: none- name: OPENBLAS_NUM_THREADSvalue: "1"- name: OMP_NUM_THREADSvalue: "1"image: 172.16.1.222:10004/library/pmml-serving:v1.2imagePullPolicy: IfNotPresentname: gbavqfbyfltzqfuu-serving-v1ports:- containerPort: 8888name: aipaasprotocol: TCPreadinessProbe:failureThreshold: 2httpGet:httpHeaders:- name: Authorizationvalue: Bearer eyJhbG......path: /openscoring/model/servingport: 8888scheme: HTTPinitialDelaySeconds: 30periodSeconds: 30successThreshold: 1timeoutSeconds: 3resources:limits:cpu: "1"memory: "2147483648"requests:cpu: 250mmemory: "536870912"terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstnodeSelector:node: workerrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30
status:availableReplicas: 1conditions:- lastTransitionTime: "2020-11-04T09:00:37Z"lastUpdateTime: "2020-11-04T09:00:37Z"message: Deployment has minimum availability.reason: MinimumReplicasAvailablestatus: "True"type: Available- lastTransitionTime: "2020-11-04T09:00:37Z"lastUpdateTime: "2020-11-04T09:01:36Z"message: ReplicaSet "gbavqfbyfltzqfuu-serving-v1-7bd89cd5c9" has successfullyprogressed.reason: NewReplicaSetAvailablestatus: "True"type: ProgressingobservedGeneration: 1readyReplicas: 1replicas: 1updatedReplicas: 1

deployment的yaml说明相关推荐

  1. Linux新建yaml文件,yaml文件创建pod和deployment

    使用 YAML 文件来定义一个 kubernetes pod,然后再来定义一个 kubernetes deployment. 创建pod的yaml文件定义如下: pod.yaml : apiVersi ...

  2. Deployment详解

    Deployment详解 RC & RS ReplicationController (复制控制器,RC)和ReplicaSet(复制集,RS)是两种简单部署pod的方式,因为在生产环境中,主 ...

  3. kubernetes实战篇之helm示例yaml文件文件详细介绍

    前面完整示例里,我们主要讲解helm打包,部署,升级,回退等功能,关于这里面的文件只是简单介绍,这一节我们详细介绍一下这里面的文件,以方便我们参照创建自己的helm chart. Helm Chart ...

  4. 《三》kubectl命令行管理工具、YAML配置详解

    kubectl命令行管理工具 kubectl自动补全功能设置 执行: 1.yum install -y bash-completion 2.source <(kubectl completion ...

  5. Kubernetes基础:Deployment中ReplicaSet

    Deployment是通过ReplicaSet来进行Pod的管理的,这篇文章通过一个简单的示例,对此进行说明. Deployment的YAML示例 有如下busybox的Deployment的YAML ...

  6. k8s利用deployment部署pod,以及应用更新和回滚操作

    deployment部署pod,也是通过yaml文件的方式部署.deployment通过yaml文件定义需要deploy名称,需要几个pod协助运行,拉取的镜像版本等内容.一般来说一个deployme ...

  7. K8s系列之:Deployment应用实战和Deployment相关命令整理

    K8s系列之:Deployment应用实战和Deployment相关命令整理 一.Pod和Controller关系 二.Deployment应用场景 三.创建deployment的yaml文件 四.根 ...

  8. Kubernetes Deployment

    什么是Deployment? Deployment提供了运行Pod能力,并且为Pod提供滚动升级.伸缩.副本等功能,一般用于运行无状态的应用.目前建议使用Deployment来代替RelicaSet及 ...

  9. 【CKA考试笔记】八、deployment控制器

    文章目录 实验环境 一.deployment的介绍 二.创建deploy及yaml的介绍 三.deployment创建的pod的特性 四.伸缩deploy的副本数 五.HPA 六.变更deploy所用 ...

最新文章

  1. 使用过滤器(Filter)解决请求参数中文乱码问题(复杂方式)
  2. python项目实战:获取本机所有IP地址的方法
  3. 局部保留投影(LPP)推导
  4. linux修改网卡配置不生效怎么解决?
  5. 低水平博士是提升科研生涯的毒药
  6. c#3.0关于JSON简单操作的实用帮助类(泛型实现)
  7. python之虚拟环境
  8. 双子星IPTV管理系统源码
  9. php程序员试卷无答案,2019年最新PHP经典面试题及答案,PHP程序员必看
  10. idea 常用配置和快捷键
  11. [数据结构]二叉搜索树概念及基本操作
  12. python Socket 客户端
  13. java与eclipse不匹配_【JAVA小白】 用eclipse输入格式不匹配的问题
  14. outlook正在使用outlook数据文件(.ost)旧的副本,请退出outlook,删除此文件,然后重启outlook。
  15. 惠普HP DeskJet Ink Advantage 2777 驱动
  16. composer出现Invalid credentials for ‘https://packagist.phpcomposer.com/packages.json’的错误
  17. ISO8583报文(一)
  18. Hadoop分析NCDC气象数据
  19. 【转】bit、Byte、bps、Bps、pps、Gbps的单位详细说明及换算
  20. Mysql官方网站到底该如何下载、安装?(超详细教程)

热门文章

  1. Base64实现加解密
  2. golang 版本升级
  3. 【Python简明教程二十八】PIP
  4. 危险!80% 用户正在考虑放弃 Oracle JDK…
  5. 小程聊微服务-自己动手扩展分布式调用链
  6. 【路径规划】一文学懂五次多项式曲线 Quintic Polynomial
  7. SQLyog-12.5.0 64位 中文 破解版
  8. D:\ANdriod\emulator\qemu\windows-x86_64\qemu-system-i386.exe: Could not open 'C:\Users\榛刓.android\a
  9. GraphQL查询规范
  10. 2022春秋杯 勇者山峰 Misc-Tiger WP