专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Kubernetes系统化学习之资源清单篇

  1。Kubernetes对象资源
  Kubernetes系统化学习之基本概念篇(一)
  Kubernetes系统化学习之POD原理篇(二)
  Kubernetes系统化学习之资源清单篇(三)
  Kubernetes是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。Kubernetes拥有一个庞大且快速增长的生态系统。
  根据不同的级别,可以将Kubernetes中的资源进行多种分类。以下列举的内容都是Kubernetes中的Object,这些对象都可以在yaml文件中作为一种API类型来配置。工作负载型资源:Pod、ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob服务发现及负载均衡型资源:Service、Ingress配置与存储型资源:Volume、CSI特殊类型的存储卷:ConfigMap、Secret、DownwardAPI集群级别资源:Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding元数据型资源:HPA、PodTemplate、LimitRange2。YML资源文件概览
  当创建Kubernetes对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息,例如名称。当使用KubernetesAPI创建对象时,或者直接创建或者基于kubectl,API请求必须在请求体中包含JSON格式的信息。大多数情况下,需要在。yaml文件中为kubectl提供这些信息。kubectl在发起API请求时,将这些信息转换成JSON格式。
  大体的。yaml文件格式如下所示,其中包含的都是配置yaml文件启动服务必须或者建议配置的字段。apiVersion:v1必选,版本号,例如v1kind:Pod必选,资源类型,例如Podmetadata:必选,元数据name:string必选,Pod名称namespace:stringPod所属的命名空间,默认为defaultlabels:自定义标签列表name:stringspec:必选,Pod中容器的详细定义containers:必选,Pod中容器列表name:string必选,容器名称image:string必选,容器的镜像名称imagePullPolicy:〔AlwaysNeverIfNotPresent〕获取镜像的策略command:〔string〕容器的启动命令列表,如不指定,使用打包时使用的启动命令args:〔string〕容器的启动命令参数列表workingDir:string容器的工作目录volumeMounts:挂载到容器内部的存储卷配置name:string引用pod定义的共享存储卷的名称,需用volumes〔〕部分定义的的卷名mountPath:string存储卷在容器内mount的绝对路径,应少于512字符readOnly:boolean是否为只读模式ports:需要暴露的端口库号列表name:string端口的名称containerPort:int容器需要监听的端口号hostPort:int容器所在主机需要监听的端口号,默认与Container相同protocol:string端口协议,支持TCP和UDP,默认TCPenv:容器运行前需设置的环境变量列表name:string环境变量名称value:string环境变量的值resources:资源限制和请求的设置limits:资源限制的设置cpu:stringCpu的限制,单位为core数,将用于dockerruncpushares参数memory:string内存限制,单位可以为MibGib,将用于dockerrunmemory参数requests:资源请求的设置cpu:stringCpu请求,容器启动的初始可用数量memory:string内存请求,容器启动的初始可用数量lifecycle:生命周期钩子postStart:容器启动后立即执行此钩子,如果执行失败,会根据重启策略进行重启preStop:容器终止前执行此钩子,无论结果如何,容器都会终止livenessProbe:对Pod内各容器健康检查的设置,当探测无响应几次后将自动重启该容器exec:对Pod容器内检查方式设置为exec方式command:〔string〕exec方式需要制定的命令或脚本httpGet:对Pod内个容器健康检查方法设置为HttpGet,需要制定Path、portpath:stringport:numberhost:stringscheme:stringHttpHeaders:name:stringvalue:stringtcpSocket:对Pod内个容器健康检查方式设置为tcpSocket方式port:numberinitialDelaySeconds:0容器启动完成后首次探测的时间,单位为秒timeoutSeconds:0对容器健康检查探测等待响应的超时时间,单位秒,默认1秒periodSeconds:0对容器监控检查的定期探测时间设置,单位秒,默认10秒一次successThreshold:0failureThreshold:0securityContext:privileged:falserestartPolicy:〔AlwaysNeverOnFailure〕Pod的重启策略nodeName:string设置NodeName表示将该Pod调度到指定到名称的node节点上nodeSelector:obeject设置NodeSelector表示将该Pod调度到包含这个label的node上imagePullSecrets:Pull镜像时使用的secret名称,以key:secretkey格式指定name:stringhostNetwork:false是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络volumes:在该pod上定义共享存储卷列表name:string共享存储卷名称(volumes类型有很多种)emptyDir:{}类型为emtyDir的存储卷,与Pod同生命周期的一个临时目录。为空值hostPath:string类型为hostPath的存储卷,表示挂载Pod所在宿主机的目录path:stringPod所在宿主机的目录,将被用于同期中mount的目录secret:类型为secret的存储卷,挂载集群与定义的secret对象到容器内部scretname:stringitems:key:stringpath:stringconfigMap:类型为configMap的存储卷,挂载预定义的configMap对象到容器内部name:stringitems:key:stringpath:string复制代码3。Pod资源字段详解
  在kubernetes中基本所有资源的一级属性都是一样的,主要包含5部分:apiVersion版本,由kubernetes内部定义,版本号必须可以用kubectlapiversions查询到;kind类型,由kubernetes内部定义,版本号必须可以用kubectlapiresources查询到;metadata元数据,主要是资源标识和说明,常用的有name、namespace、labels等;spec描述,这是配置中最重要的一部分,里面是对各种资源配置的详细描述;status状态信息,里面的内容不需要定义,由kubernetes自动生成。apiVersion:版本信息kind:资源类别metadata:资源元数据name:元数据对应的名称namespace:元数据所属的命名空间lables:对资源打上便签供后续使用annotations:主要目的是方便用户阅读查找spec:定义期望状态status:设置当前状态复制代码
  关于Pod的前置知识学习请参考Kubernetes系统化学习之POD原理篇(二)
  创建一个Podvimnginx。yaml复制代码
  nginx。yaml:vimnginx。yamlapiVersion:v1必选,API的版本号kind:Pod必选,类型Podmetadata:必选,元数据name:nginx必选,符合RFC1035规范的Pod名称spec:必选,用于定义Pod的详细信息containers:必选,容器列表name:nginx必选,符合RFC1035规范的容器名称image:nginx:1。15。12必选,容器所用的镜像的地址ports:可选,容器需要暴露的端口号列表containerPort:80端口号复制代码kubectlcreatefnginx。yaml复制代码
  输出结果:kubectlcreatefnginx。yamlpodnginxcreated复制代码
  查看Pod状态kubectlgetponginx复制代码
  输出结果:kubectlgetponginxNAMEREADYSTATUSRESTARTSAGEnginx01ContainerCreating020s复制代码
  使用kubectlrun创建一个Podkubectlrunnginxrunimagenginx:1。15。12复制代码
  在上面的属性中,spec是接下来研究的重点,继续看下它的常见子属性:containers〔〕Object容器列表,用于定义容器的详细信息;nodeName根据nodeName的值将pod调度到指定的Node节点上;nodeSelectormap〔〕根据NodeSelector中定义的信息选择将该Pod调度到包含这些label的Node上;hostNetwork是否使用主机网络模式,默认为false,如果设置为true,表示使用宿主机网络;volumes〔〕Object存储卷,用于定义Pod上面挂在的存储信息;restartPolicy重启策略,表示Pod在遇到故障的时候的处理策略;
  资源清单中常见字段的解释:
  参数名
  字段类型
  说明
  version
  String
  这里是值的是k8sAPI的版本,目前基本上是v1,可以用kubectlapiversions命令查询
  kind
  String
  这里指的是yaml文件定义的资源类型和角色,比如:Pod
  metadata
  Object
  元数据对象,固定值就写metadata
  metadata。name
  String
  元数据对象的名字,这里由我们编写,比如命名Pod的名字
  metadata。namespace
  String
  元数据对象的命名空间,由我们自身定义
  spec
  Object
  详细定义对象,固定值就写spec
  spec。containers〔〕
  list
  这里是spec对象的容器列表定义,是一个列表
  spec。containers〔〕。name
  String
  这里定义容器的名字
  spec。containers〔〕。image
  String
  这里定义要用到的镜像名称
  spec。containers〔〕。imagePullPolicy
  String
  定义镜像拉取策略,有Always,Never,IfNotPresent三个值(1)Always:意思是每次都尝试重新拉取镜像(2)Never:表示仅使用本地镜像(3)IfNotPresent:如果本地有镜像就使用本地镜像,没有就拉取在线镜像,上面三个值都没有设置的话,默认是Always
  spec。containers〔〕。command〔〕
  List
  指定容器启动命令,因为是数组可以指定多个,不指定则使用镜像打包时使用的启动命令
  spec。containers〔〕。args〔〕
  list
  指定容器启动命令参数,因为是数组可以指定多个
  spec。containers〔〕。workingDir
  String
  指定容器的工作目录
  spec。containers〔〕。volumeMounts〔〕
  list
  指定容器内部的存储配置
  spec。containers〔〕。volumeMounts〔〕。name
  String
  指定可以被容器挂载的存储卷的名称
  spec。containers〔〕。volumeMounts〔〕。mountPath
  String
  指定可以被容器挂载的存储卷的路径
  spec。containers〔〕。volumeMounts〔〕。readOnly
  String
  设置存储卷路径的读写模式,ture或者false,默认为读写模式
  spec。containers〔〕。ports〔〕
  list
  指定容器需要用到的端口列表
  spec。containers〔〕。ports〔〕。name
  String
  指定端口名称
  spec。containers〔〕。ports〔〕。containerPort
  String
  指定容器需要监听的端口号
  spec。containers〔〕。ports〔〕。hostPort
  String
  指定容器所在主机需要监听的端口号,默认跟上面containerPort相同,注意设置了hostPort同一台主机无法启动该容器的相同副本(因为主机的端口号不能相同,这样会冲突)
  spec。containers〔〕。ports〔〕。protocol
  String
  指定端口协议,支持tcp和udp,默认值tcp
  spec。containers〔〕。env〔〕
  List
  指定容器运行前需要设置的环境变量列表
  spec。containers〔〕。env〔〕。name
  String
  指定环境变量名称
  spec。containers〔〕。env〔〕。value
  String
  指定环境变量值
  spec。containers〔〕。resources
  Object
  指定资源限制和资源请求的值(这里开始就是设置容器的资源上限)
  spec。containers〔〕。resources。limits
  Object
  指定设置容器的运行时资源的运行上限
  spec。containers〔〕。resources。limits。cpu
  String
  指定cpu的限制,单位为core数,将用于dockerruncpushares参数
  spec。containers〔〕。resources。limits。memory
  String
  指定MEM内存的限制,单位为MIB,GiB
  spec。containers〔〕。resources。requests
  Object
  指定容器启动和调度时的限制设置
  spec。containers〔〕。resources。requets。cpu
  string
  CPU请求,单位为core数,容器启动时初始化可用数量
  spec。containers〔〕。resources。requets。memory
  string
  内存请求,单位为MIB,GiB,容器启动的初始化可用数量
  spec。restartPolicy
  String
  定义Pod的重启策略,可选值为Always,OnFailure,默认为Always,1。Always:Pod一旦终止运行则无论容器是如何终止的,kubelet服务都将重启它,2,OnFailure:只有Pod以非零退出码终止时,kubelet才会重启该容器,如果容器正常结束(退出码为0),则kubelet将不会重启它,3。Never:pod终止后,kubelet将退出码报告给Master,不会重启该pod
  spec。nodeSelector
  object
  定义node的label过滤标签,以key:value格式指定
  spec。imagePullSecrets
  object
  定义pull镜像时使用secret名称,以name:secretkey格式指定
  spec。hostNetwork
  Boolean
  定义是否使用主机网络模式,默认为false,设置true表示使用宿主机网络,不使用docker网桥,同时设置了true将无法再同一台宿主机上启动第二个副本vimnginx。yamlapiVersion:v1必选,API的版本号kind:Pod必选,类型Podmetadata:必选,元数据name:nginx必选,符合RFC1035规范的Pod名称spec:必选,用于定义Pod的详细信息containers:必选,容器列表name:nginx必选,符合RFC1035规范的容器名称image:nginx:1。15。12必选,容器所用的镜像的地址command:可选,容器启动执行的命令sleep10env:必选,容器运行前的环境变量列表name:PASSWORDvalue:123456ports:可选,容器需要暴露的端口号列表containerPort:80端口号volumeMounts:可选,容器内部的存储配置name:confmountPath:usrlocalnginxconf被容器挂载的存储卷的路径resources:可选,容器计算资源limit:cpu:100m容器最大使用的cpu规格memory:512Mi容器最大使用的内存规格复制代码Pod镜像拉取策略
  操作方式
  说明
  Always
  总是拉取,当镜像tag为latest时,且imagePullPolicy未配置,默认为Always
  Never
  不管是否存在都不会拉取
  IfNotPresent
  镜像不存在时拉取镜像,如果tag为非latest,且imagePullPolicy未配置,默认为IfNotPresentvimnginx。yamlapiVersion:v1必选,API的版本号kind:Pod必选,类型Podmetadata:必选,元数据name:nginx必选,符合RFC1035规范的Pod名称spec:必选,用于定义Pod的详细信息containers:必选,容器列表name:nginx必选,符合RFC1035规范的容器名称image:nginx:1。15。12必选,容器所用的镜像的地址imagePullPolicy:IfNotPresent可选,镜像拉取策略ports:可选,容器需要暴露的端口号列表containerPort:80端口号复制代码Pod重启策略
  操作方式
  说明
  Always
  默认策略。容器失效时,自动重启该容器
  OnFailure
  容器以不为0的状态码终止,自动重启该容器
  Never
  无论何种状态,都不会重启vimnginx。yamlapiVersion:v1必选,API的版本号kind:Pod必选,类型Podmetadata:必选,元数据name:nginx必选,符合RFC1035规范的Pod名称spec:必选,用于定义Pod的详细信息containers:必选,容器列表name:nginx必选,符合RFC1035规范的容器名称image:nginx:1。15。12必选,容器所用的镜像的地址imagePullPolicy:IfNotPresent可选,镜像拉取策略ports:可选,容器需要暴露的端口号列表containerPort:80端口号restartPolicy:Never复制代码Pod三种探针
  种类
  说明
  startupProbe
  Kubernetes1。16新加的探测方式,用于判断容器内的应用程序是否已经启动。如果配置了startupProbe,就会先禁用其他探测,直到它成功为止。如果探测失败,Kubelet会杀死容器,之后根据重启策略进行处理,如果探测成功,或没有配置startupProbe,则状态为成功,之后就不再探测
  livenessProbe
  用于探测容器是否在运行,如果探测失败,kubelet会杀死容器并根据重启策略进行相应的处理。如果未指定该探针,将默认为Success
  readinessProbe
  一般用于探测容器内的程序是否健康,即判断容器是否为就绪(Ready)状态。如果是,则可以处理请求,反之EndpointsController将从所有的Service的Endpoints中删除此容器所在Pod的IP地址。如果未指定,将默认为SuccessPod探针的实现方式
  实现方式
  说明
  ExecAction
  在容器内执行一个指定的命令,如果命令返回值为0,则认为容器健康
  TCPSocketAction
  通过TCP连接检查容器指定的端口,如果端口开放,则认为容器健康
  HTTPGetAction
  对指定的URL进行Get请求,如果状态码在200400之间,则认为容器健康vimnginx。yamlapiVersion:v1必选,API的版本号kind:Pod必选,类型Podmetadata:必选,元数据name:nginx必选,符合RFC1035规范的Pod名称spec:必选,用于定义Pod的详细信息containers:必选,容器列表name:nginx必选,符合RFC1035规范的容器名称image:nginx:1。15。12必选,容器所用的镜像的地址imagePullPolicy:IfNotPresentcommand:可选,容器启动执行的命令shcsleep10;nginxgdaemonoff;readinessProbe:可选,健康检查。注意三种检查方式同时只能使用一种。httpGet:接口检测方式path:index。html检查路径port:80scheme:HTTPHTTPorHTTPSinitialDelaySeconds:10初始化时间,健康检查延迟执行时间timeoutSeconds:2超时时间periodSeconds:5检测间隔successThreshold:1检查成功为2次表示就绪failureThreshold:2检测失败1次表示未就绪livenessProbe:可选,健康检查tcpSocket:端口检测方式port:80initialDelaySeconds:10初始化时间timeoutSeconds:2超时时间periodSeconds:5检测间隔successThreshold:1检查成功为2次表示就绪failureThreshold:2检测失败1次表示未就绪ports:可选,容器需要暴露的端口号列表containerPort:80端口号restartPolicy:Never复制代码Pod的preStop和postStartvimnginx。yamlapiVersion:v1必选,API的版本号kind:Pod必选,类型Podmetadata:必选,元数据name:nginx必选,符合RFC1035规范的Pod名称spec:必选,用于定义Pod的详细信息containers:必选,容器列表name:nginx必选,符合RFC1035规范的容器名称image:nginx:1。15。12必选,容器所用的镜像的地址imagePullPolicy:IfNotPresentlifecycle:postStart:容器创建完成后执行的指令,可以是exechttpGetTCPSocketexec:command:shcmkdirdatapreStop:exec:command:shcsleep10ports:可选,容器需要暴露的端口号列表复制代码4。Pod的生命周期
  Pod的生命周期才是Kubernetest资源清单中的重中之重!
  Kubernetes中的基本组件kubecontrollermanager就是用来控制Pod的状态和生命周期的,在了解各种controller之前我们有必要先了解下Pod本身和其生命周期。想要深入理解Pod的实现原理,最好最快的办法就是从Pod的生命周期入手,通过理解Pod创建、重启和删除的原理我们最终就能够系统地掌握Pod的生命周期与核心原理。
  将Pod对象从创建至终的这段时间范围称为Pod的生命周期,它主要包含下面的过程:Pod创建过程运行初始化容器(initcontainer)过程运行主容器(maincontainer)容器启动后钩子(poststart)、容器终止前钩子(prestop)容器的存活性探测(livenessprobe)、就绪性探测(readinessprobe)Pod终止过程InitC(Init容器)
  Pod能够具有多个容器,应用运行在容器里面,但是它也可能有一个或多个先于应用容器启动的Init容器。Init容器与普通的容器非常像,除了如下两点:Init容器总是运行到成功完成为止;每个Init容器都必须在下一个Init容器启动之前成功完成。
  如果Pod的Init容器失败,Kubernetes会不断地重启Pod,直到Init容器成功为止,然而,如果Pod对应的restartPolicy为Never,它不会重新启动。
  因为init容器具有应用程序容器分离的单独镜像,所以它们的启动相关代码具有如下优势:它们可以包含并运行实用工具,但是出于安全考虑,是不建议在应用程序容器镜像中包含这些实用工具的;它们可以包含实用工具和定制化代码来安装,但是不能出现在应用程序镜像中,例如,创建镜像没有必要FROM另一个镜像,只需要在安装过程中使用类似sed,awk,python或dig这样的工具;应用程序镜像可以分离出创建和部署角色,二没有必要联合他们构建一个单独的镜像;init容器使用linuxnamespace,所以相对应用程序容器来说具有不同的文件系统视图,因此,他们能够具有访问secret的权限,二应用程序容器则不能;他们必须在应用程序容器启动之前运行完成,二应用程序容器是并行运行的。所以init容器能够提供了一种简单的阻塞或延迟应用容器的启动的方法,知道满足了一种先决条件;Pod的状态(相位)
  状态
  说明
  Pending(挂起)
  Pod已被Kubernetes系统接收,但仍有一个或多个容器未被创建,可以通过kubectldescribe查看处于Pending状态的原因
  Running(运行中)
  Pod已经被绑定到一个节点上,并且所有的容器都已经被创建,而且至少有一个
  是运行状态,或者是正在启动或者重启,可以通过kubectllogs查看Pod的日志
  Succeeded(成功)
  所有容器执行成功并终止,并且不会再次重启,可以通过kubectllogs查看Pod日志
  Failed(失败)
  所有容器都已终止,并且至少有一个容器以失败的方式终止,也就是说这个容器要么以非零状态退出,要么被系统终止,可以通过logs和describe查看Pod日志和状态
  Unknown(未知)
  通常是由于通信问题造成的无法获得Pod的状态Pod的创建过程用户通过kubectl或其他api客户端提交需要创建的pod信息给apiServer;apiServer开始生成pod对象的信息,并将信息存入etcd,然后返回确认信息至客户端;apiServer开始反映etcd中的pod对象的变化,其它组件使用watch机制来跟踪检查apiServer上的变动;scheduler发现有新的pod对象要创建,开始为Pod分配主机并将结果信息更新至apiServer;node节点上的kubelet发现有pod调度过来,尝试调用docker启动容器,并将结果回送至apiServer;apiServer将接收到的pod状态信息存入etcd中。Pod的终止过程用户向apiServer发送删除pod对象的命令;apiServcer中的pod对象信息会随着时间的推移而更新,在宽限期内(默认30s),pod被视为dead;将pod标记为terminating状态;kubelet在监控到pod对象转为terminating状态的同时启动pod关闭过程;端点控制器监控到pod对象的关闭行为时将其从所有匹配到此端点的service资源的端点列表中移除;如果当前pod对象定义了preStop钩子处理器,则在其标记为terminating后即会以同步的方式启动执行;pod对象中的容器进程收到停止信号;宽限期结束后,若pod中还存在仍在运行的进程,那么pod对象会收到立即终止的信号;kubelet请求apiServer将此pod资源的宽限期设置为0从而完成删除操作,此时pod对于用户已不可见。5。Pod的控制器使用
  我们很少会直接在kubernetes中创建单个Pod。因为Pod的生命周期是短暂的,用后即焚的实体。当Pod被创建后,都会被Kubernetes调度到集群的Node上。直到Pod的进程终止、被删掉、因为缺少资源而被驱逐、或者Node故障之前这个Pod都会一直保持在那个Node上。
  我们需要知道Pod本身是不会自愈修复的。如果Pod运行的Node故障或者是调度器本身故障,这个Pod就会被删除。同样的,如果Pod所在Node因为缺少资源或者Pod处于维护状态,那么Pod也就会被自动驱逐掉。Kubernetes使用更高级的称为Controller的抽象层,来管理Pod实例。虽然可以直接使用Pod,但是在Kubernetes中通常是使用Controller来管理Pod的。Controller可以创建和管理多个Pod,提供副本管理、滚动升级和集群级别的自愈能力。
  需要注意的是,重启Pod中的容器跟重启Pod不是一回事。Pod只提供容器的运行环境并保持容器的运行状态,重启容器不会造成Pod重启。
  Kubernetes使用了一个更高级的称为控制器的抽象,由它处理相对可丢弃的Pod实例的管理工作。因此,虽然可以直接使用Pod,但在Kubernetes中,更为常见的是使用控制器管理Pod。DeploymentStatefulSetDaemonSetDeployment资源清单
  为了更好地解决服务编排的问题,k8s在V1。2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod,而是通过管理replicaset来间接管理pod,即:deployment管理replicaset,replicaset管理pod。所以deployment比replicaset的功能更强大。
  apiVersion:appsv1版本号kind:Deployment类型metadata:元数据name:rs名称namespace:所属命名空间labels:标签controller:deployspec:详情描述replicas:副本数量revisionHistoryLimit:保留历史版本,默认是10paused:暂停部署,默认是falseprogressDeadlineSeconds:部署超时时间(s),默认是600strategy:策略type:RollingUpdates滚动更新策略rollingUpdate:滚动更新maxSurge:最大额外可以存在的副本数,可以为百分比,也可以为整数maxUnavaliable:最大不可用状态的pod的最大值,可以为百分比,也可以为整数selector:选择器,通过它指定该控制器管理哪些podmatchLabels:Labels匹配规则app:nginxpodmatchExpressions:Expression匹配规则{key:app,operator:In,values:〔nginxpod〕}template:模板,当副本数量不足时,会根据下面的模板创建pod副本metadata:labels:app:nginxpodspec:containers:name:nginximage:nginx:1。17。1ports:containerPort:80复制代码Deployment主要功能
  一个简易的Deployment的例子(nginxdeployment。yaml):apiVersion:appsv1kind:Deploymentmetadata:name:nginxdeploymentnamespace:devspec:replicas:3selector:matchLabels:app:nginxpodtemplate:metadata:labels:app:nginxpodspec:containers:name:nginximage:nginx:1。17。1复制代码
  创建deployment〔rootmaster〕kubectlcreatefnginxdeployment。yamldeployment。appsnginxdeploymentcreated〔rootmaster〕kubectlgetdeployndevowideNAMEREADYUPTODATEAVAILABLEAGECONTAINERSIMAGESSELECTORnginxdeployment333316snginxnginx:1。17。1appnginxpod复制代码〔rootmaster〕kubectlgetrsndevNAMEDESIREDCURRENTREADYAGEnginxdeployment5d89bdfbf93332m13s〔rootmaster〕kubectlgetpodndevNAMEREADYSTATUSRESTARTSAGEnginxdeployment5d89bdfbf9k8j9n11Running02m42snginxdeployment5d89bdfbf9vw87k11Running02m42snginxdeployment5d89bdfbf9x7nsm11Running02m42s复制代码
  伸缩扩容〔rootmaster〕kubectlscaledeploynginxdeploymentreplicas5ndevdeployment。appsnginxdeploymentscaled〔rootmaster〕kubectlgetpodndevNAMEREADYSTATUSRESTARTSAGEnginxdeployment5d89bdfbf9bhcns11Running083snginxdeployment5d89bdfbf9cfls711Running083snginxdeployment5d89bdfbf9k8j9n11Running08m54snginxdeployment5d89bdfbf9vw87k11Running08m54snginxdeployment5d89bdfbf9x7nsm11Running08m54s复制代码
  镜像更新
  更新方式
  配置名称
  更新说明
  重建更新
  Recreate
  在创建出新的pod之前会先杀掉所有已存在的pod
  滚动更新(默认)
  RollingUpdate
  杀死一部分,就启动一部分,在更新过程中,存在两个版本podstrategy:指定新的pod替换旧的pod的策略,支持两个属性:type:指定策略类型,支持两种策略Recreate:在创建出新的pod之前会先杀掉所有已存在的podRollingUpdate:滚动更新,就是杀死一部分,就启动一部分,在更新过程中,存在两个版本podrollingUpdate:当type为RollingUpdate时生效,用于为RollingUpdate设置参数,支持两个属性maxUnavailable:用来指定在升级过程中不可用pod的最大数量,默认为25maxSurge:用来指定在升级过程中可以超过期望的pod的最大数量,默认为25复制代码〔rootmaster〕vimnginxdeployment。yaml〔rootmaster〕kubectlapplyfnginxdeployment。yamlWarning:kubectlapplyshouldbeusedonresourcecreatedbyeitherkubectlcreatesaveconfigorkubectlapplydeployment。appsnginxdeploymentconfigured复制代码记录以前的pod〔rootmaster〕kubectlgetpodndevNAMEREADYSTATUSRESTARTSAGEnginxdeployment5d89bdfbf9526wf11Running061snginxdeployment5d89bdfbf9b5x5v11Running064snginxdeployment5d89bdfbf9kc7hb11Running059s更新镜像〔rootmaster〕kubectlsetimagedeploynginxdeploymentnginxnginx:1。17。2ndevdeployment。appsnginxdeploymentimageupdated查看pod状态〔rootmaster〕kubectlgetpodndevNAMEREADYSTATUSRESTARTSAGEnginxdeployment5d89bdfbf9526wf01Terminating02m2snginxdeployment5d89bdfbf9b5x5v11Running02m5snginxdeployment5d89bdfbf9kc7hb01Terminating02mnginxdeployment675d469f8b7vw6x11Running03snginxdeployment675d469f8brzq8201ContainerCreating02snginxdeployment675d469f8bzk4fs11Running05s〔rootmaster〕kubectlgetpodndevNAMEREADYSTATUSRESTARTSAGEnginxdeployment675d469f8b7vw6x11Running038snginxdeployment675d469f8brzq8211Running037snginxdeployment675d469f8bzk4fs11Running040s复制代码
  滚动更新的过程如图:
  版本回退
  deployment支持版本升级过程中的暂停,继续功能以及版本回退等诸多功能,下面具体来看
  kubectlrollout:版本升级相关功能,支持下面的选项:status:显示当前升级状态history:显示升级历史记录pause:暂停版本升级过程resume:继续已经暂停的版本升级过程restart:重启版本升级过程undo:回滚到上一级版本(可以使用torevision回滚到指定版本)查看升级状态〔rootmaster〕kubectlrolloutstatusdeploynginxdeploymentndevdeploymentnginxdeploymentsuccessfullyrolledout查看升级历史(注意:如果只显示版本号说明一开始使用yaml创建文件的时候没有加上record命令)〔rootmaster〕kubectlrollouthistorydeploynginxdeploymentndevdeployment。appsnginxdeploymentREVISIONCHANGECAUSE1kubectlcreatefilenamenginxdeployment。yamlrecordtrue2kubectlcreatefilenamenginxdeployment。yamlrecordtrue版本回滚这里使用torevision1回滚到1版本,如果省略这个选项,则会回退到上个版本〔rootmaster〕kubectlrolloutundodeploynginxdeploymenttorevision1ndevdeployment。appsnginxdeploymentrolledback查看是否回滚成功,发现5序号开头的rs被启动了〔rootmaster〕kubectlgetrsndevNAMEDESIREDCURRENTREADYAGEnginxdeployment5d89bdfbf933331mnginxdeployment675d469f8b00022m复制代码
  金丝雀发布
  deployment支持更新过程中的控制,如暂停(pause)或继续(resume)更新操作。
  比如有一批新的pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新的pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。更新deployment版本,并配置暂停deployment〔rootmaster〕kubectlsetimagedeploynginxdeploymentnginxnginx:1。17。2ndevkubectlrolloutpausedeploynginxdeploymentndevdeployment。appsnginxdeploymentimageupdateddeployment。appsnginxdeploymentpaused查看rs,发现老版本rs没有减少,新版本rs增加一个〔rootmaster〕kubectlgetrsndevNAMEDESIREDCURRENTREADYAGEnginxdeployment5d89bdfbf933344mnginxdeployment675d469f8b11135m在窗口2中查看deploy状态,发现deploy正在等待更新且已经有1个更新好了〔rootmaster〕kubectlrolloutstatusdeploynginxdeploymentndevWaitingfordeploymentnginxdeploymentrollouttofinish:1outof3newreplicashavebeenupdated。。。在窗口1中继续deploy的更新〔rootmaster〕kubectlrolloutresumedeploynginxdeploymentndevdeployment。appsnginxdeploymentresumed查看窗口2的状态Waitingfordeploymentspecupdatetobeobserved。。。Waitingfordeploymentspecupdatetobeobserved。。。Waitingfordeploymentnginxdeploymentrollouttofinish:1outof3newreplicashavebeenupdated。。。Waitingfordeploymentnginxdeploymentrollouttofinish:1outof3newreplicashavebeenupdated。。。Waitingfordeploymentnginxdeploymentrollouttofinish:2outof3newreplicashavebeenupdated。。。Waitingfordeploymentnginxdeploymentrollouttofinish:2outof3newreplicashavebeenupdated。。。Waitingfordeploymentnginxdeploymentrollouttofinish:2outof3newreplicashavebeenupdated。。。Waitingfordeploymentnginxdeploymentrollouttofinish:1oldreplicasarependingtermination。。。Waitingfordeploymentnginxdeploymentrollouttofinish:1oldreplicasarependingtermination。。。deploymentnginxdeploymentsuccessfullyrolledout在窗口1查看rs更新结果,发现老版本均停止,新版本已经创建好〔rootmaster〕kubectlgetrsndevNAMEDESIREDCURRENTREADYAGEnginxdeployment5d89bdfbf900049mnginxdeployment675d469f8b33340m

徐志摩英年早逝,梁启超曾训斥他性情浮躁,用情不专徐志摩,你这个人性情浮躁,所以在学问上面没有成就你这个人用情不专,以致离婚再娶1926年,徐志摩的导师梁启超作为证婚人,在徐志摩和陆小曼的婚礼上致辞时,说过这样一句话。只有了解了徐五家合用一把刀伟大的征服者成吉思汗曾预言我的子孙们将穿绣金的衣服,吃山珍海味,骑着骏马,拥有美丽的妻妾。同时,骑在马背上打天下的他,深忧未来的子孙在奢糜的皇宫中,享受繁华,不屑习练弯弓射箭,不思iOS16。2正式版推送时间曝光,新功能提前揭晓更耗电在iOS16。1正式版之后,苹果在上周向iPhone手机推送了iOS16。2beta1首个测试版升级更新,大家的iPhone手机有没有升级更新到iOS16。2beta1测试版。因为什么是VR三维数字沙盘?随着全息数字展厅在各行业的应用,极具视觉体验和趣味互动的展示形态受到大量消费者的喜爱,其中各类技术应用也让很多商家较为感兴趣,这篇文章草履虫科技小编和各位聊聊VR三维数字沙盘!什么多了半个G有啥作用?5。5G或将开启元宇宙的大门5。5G是什么?为什么可能是开启元宇宙的大门?最近,一场行业论坛引发了很多5。5G的讨论。大家可能比较懵圈,感觉才换的5G手机?怎么又来个5。5G?今天,我们就用通俗的方式来了解一四核战芯入门,WIFI6路由现在有新选择很多朋友在升级WiFi6路由器后发现,虽然峰值网速上有很大的提升,但网络还是容易卡,WiFi信号并不稳定。这可能是因为路由器芯片不够强,市面上的WiFi6路由器普遍使用的是双核1G官宣了,腾讯与央企联姻,却不是网传的剧本2号,沪指再次站上3000点。另外,成交量放大到10521亿,破万亿了,维持万亿成交量,反弹则还能继续。成交量是不会骗人的。从成交量看,市场被激活了。再看两个消息。一,北京举行马拉蜗牛等不及了在我们的传统观念中,蜗牛往往有积跬步以至千里的意象,虽然节奏缓慢但一步一个脚印努力前行。苏州蜗牛数字科技股份有限公司并不像手游浪潮中依靠一两款游戏成功上市发家致富幸运儿,从2012苹果被曝已冻结招聘,直至2023年9月Tech星球11月2日消息,据报道,三位知情人士今日称,苹果公司已经暂停了几乎所有的招聘,直至明年9月。这些知情人士称,苹果各部门的员工已被告知,公司在未来几个月内不会招聘新员工,中信南非否认收购腾讯,大股东今年累计减持390万股头条创作挑战赛11月2日,针对中信集团正组团与南非报业集团(Naspers)谈判以收购其持有的全部腾讯股份的传闻。Naspers集团旗下子公司Prosus发布声明回应,该文章并不符双十一想找性价比机型?OPPO这三款个顶个实惠,不花冤枉钱双十一的预售活动已经接近尾声了,大家想必都做好了买买买的准备,而作为大家使用最频繁的数码产品,手机是每年大家都会关注的焦点。今年的手机领域的产品琳琅满目,以至于大家在挑选的时候经常
高启盛与裴鸿鹄,毒贩与军人的PK娱评大赏狂飙中的高启盛,高学历,高智商,但确实一个毫无底线的疯批,他的坏很外在,他的疯透露在他说话和行动的细节,只要能赚钱,底线可以从有到无。网络图片特殊荣耀,一个高智商的军人裴鸿回合制策略游戏酋长的女儿Steam页面开放回合制策略游戏酋长的女儿(ChieftainsDaughter)Steam页面开放,游戏将于12月发售,支持简体中文。这是一款战术回合制策略游戏,挑战玩家领导一支具有基地建设小队管僵尸毁灭工程近战武器介绍1(棍类武器)游戏中有很多种物品可以作为近战武器,按照游戏中对于近战武器熟练度的划分,可以分为长棍短棍长刀短刀长矛斧子共6类,但是实际上比较容易获得且作战效果好的武器也就那么几种,本文会陆续介绍历史沉钩,文革故事,往事不堪回首修江坝(三)工地上的人都走光了。马历史刘小伙和我,拿着破筐来到鱼翻花的泡子走下水去。筐是马历史加工过的,他用铁锹砍齐上面残破的筐檐,在底上掏出个大窟窿,破筐就变成了一个鱼插笼。弯弯曲曲的泡子连故事婆家6口人不请自来,儿媳拒绝他们进门8天3万,招待不起导语元宵还没有过完,刘女士就和老公订了高铁回到了上海。刘女士和老公公刚到上海,婆家6口人也一起过来了。刘女士都没有邀请他们,他们不请自来,刘女士苦笑真是一群不懂事的亲戚。1hr婆婆苏纳克正式宣布再敢偷渡到英国,就送一张飞往卢旺达的单程机票乘坐一艘小船从法国偷渡到英国,你可能会得到一张飞往卢旺达的单程机票。据环球时报报道,英国首相苏纳克将颁布新法,禁止非法移民进入英国,如果实在赶不走,就让内政大臣把难民打包送到卢旺达军校学员穿搭图鉴一款服饰演绎一段青春故事身穿迷彩是他们青春的模样衣着军绿是他们荣誉的颜色一款服饰演绎一段青春故事让我们跟随科大学员一起领略军装的风采常服作为军校学员出镜率最高的着装常服可是大有讲究的短袖夏常服长袖夏常服春龙湖再获ESG评级机构Sustainalytics风险分数下调保持境内房企最优评分表现近日,全球领先的环境社会与企业管治(ESG)评级及研究公司Sustainalytics发布最新评级报告。报告显示,龙湖集团继续保持低风险评级,ESG风险分数从15。8分进一步下调至365个师德故事麓山高岭彭思颖碎碎念里有大爱快要早读了,赶紧吃早餐,不要再闲聊了哦!课前诵读要认真读大声读。诵读是为了让大家积累更多的语言知识,大声读才能更好地展现咱们的精气神。领诵员,准备!中午进入食堂要先排队洗手。食堂地曼苏阿拉姆上海为我提供了一个充分展示自我能力的舞台老外讲故事另眼观盛会(68)姓名MansoorAlam中文名曼苏阿拉姆国籍巴基斯坦职业浙江天正电气股份有限公司大客户销售经理党的二十大报告中提到,中国坚持对外开放的基本国策,坚定奉行互利共赢的开放战略,不断以英国每月看英超需82。99英镑许多球迷也选择找盗链进行观赛考虑到英超转播权即将再次面临竞标,TheAthleticUK就球迷需要支付的费用进行了核算。首先,英超的380场比赛中有200场在英国的电视上播出。这200场比赛被分成7个套餐,天
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网