Kubernetes 集群实战(微课版)课件 项目4 部署和运行应用程序_第1页
Kubernetes 集群实战(微课版)课件 项目4 部署和运行应用程序_第2页
Kubernetes 集群实战(微课版)课件 项目4 部署和运行应用程序_第3页
Kubernetes 集群实战(微课版)课件 项目4 部署和运行应用程序_第4页
Kubernetes 集群实战(微课版)课件 项目4 部署和运行应用程序_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Kubernetes集群实战(微课版)工业和信息化精品系列教材——云计算技术项目4

部署和运行应用程序能力CAPACITY要求了解工作负载资源与控制器的概念熟悉Deployment控制器及其用法,学会使用该控制器运行无状态应用程序熟悉DaemonSet控制器及其用法,学会使用该控制器部署集群守护进程熟悉Job控制器及其用法,学会使用该控制器运行一次性任务熟悉CronJob控制器及其用法,学会使用该控制器运行定时任务任务4.2使用DaemonSet部署集群守护进程集任务4.1使用Deployment运行无状态应用程序任务4.3运行一次性任务与定时任务任务4.1使用Deployment运行无状态应用程序任务说明01OPTION02OPTION03OPTION了解工作负载资源类型和控制器的概念了解Deployment控制器及其基本用法学会使用Deployment部署无状态应用程序04OPTION学会管理基于Deployment部署的无状态应用程序任务4.1使用Deployment运行无状态应用程序相关知识4.1.1工作负载资源与控制器常用的内置工作负载资源类型资源类型功能Deployment管理集群中的无状态应用程序,如Web服务StatefulSet管理集群中的有状态应用程序,如MongoDBDaemonSet管理集群中的守护进程集,确保所有节点运行同一个Pod,如日志收集组件Job运行一次性任务CronJob运行周期性任务任务4.1使用Deployment运行无状态应用程序相关知识4.1.1工作负载资源与控制器控制器用于工作负载资源的部署和管理,在更高层次上部署和管理Pod。管理Pod对象。使用标签与Pod关联。实现Pod的运维。任务4.1使用Deployment运行无状态应用程序相关知识4.1.2ReplicationController、ReplicaSet和Deployment任务4.1使用Deployment运行无状态应用程序相关知识4.1.3Deployment的应用场景Deployment所管理的无状态应用程序Pod完全等同多个Pod副本的创建没有确定的顺序。多个Pod副本的名称是随机的。所有Pod副本都是相互等价的,在需要时可以随时被替换。多个Pod副本共享存储。Deployment的典型应用场景Web应用程序API应用程序微服务任务4.1使用Deployment运行无状态应用程序相关知识4.1.4Deployment的基本用法直接使用命令kubectlcreatedeployment名称--image=镜像[选项]主要使用配置文件来创建Deployment创建一个YAML格式的Deployment资源定义文件。使用kubectlcreate或kubectlapply命令基于该文件创建资源。Deployment应用程序生命周期任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.1创建Deployment编写Deployment资源定义文件apiVersion:apps/v1#版本号kind:Deployment#类型为Deploymentmetadata:#元数据

name:nginx-deploylabels:#标签

app:nginxspec:#详细信息

replicas:3#副本数量

strategy:#策略

type:RollingUpdate#滚动更新策略

rollingUpdate:#滚动更新设置

maxSurge:25%#更新过程中允许超出期望Pod副本数的Pod数量,用百分比或整数表示

maxUnavailable:25%#更新过程中不可用的Pod数量上限,用百分比或整数表示任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.1创建Deployment编写Deployment资源定义文件selector:#选择器,指定该控制器管理哪些PodmatchLabels:#匹配规则

app:nginxtemplate:#定义模板,当副本数量不足时会根据模板定义创建Pod副本

metadata:labels:app:nginx#Pod的标签

spec:containers:#容器列表(本例仅定义一个容器)

-name:nginx#容器的名称

image:nginx:1.14.2#容器所用的镜像

ports:-containerPort:80#容器需要暴露的端口任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.1创建Deployment基于资源定义文件创建Deployment对象#kubectlapply-f/k8sapp/04/nginx-deploy.yamldeployment.apps/nginx-deploycreated测试Deployment对象及其部署的应用程序(1)检查该Deployment对象的状态。#kubectlgetdeployments-owideNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORnginx-deploy0/33312snginxnginx:1.14.2app=nginx(2)检查该Deployment对象的当前部署状态。#kubectlrolloutstatusdeployment/nginx-deploydeployment"nginx-deploy"successfullyrolledout任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.1创建Deployment测试Deployment对象及其部署的应用程序(3)再次检查Deployment对象的状态。(4)查看Deployment创建的ReplicaSet对象。#kubectlgetrsNAMEDESIREDCURRENTREADYAGEnginx-deploy-7fb96c846b3332m51s(5)查看Deployment所创建的Pod对象。(6)访问Nginx应用程序进行实际测试。#curl11......<p><em>Thankyouforusingnginx.</em></p>任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.2测试Deployment的自动修复功能(1)将node01主机关机以模拟故障。(2)稍等片刻,查看Deployment部署的ReplicaSet对象,可以发现有ReplicaSet对象暂时不能提供服务。(3)稍等再次查看ReplicaSet对象,可以发现已经恢复为3个ReplicaSet对象正常运行。(4)进一步查看Deployment资源的Pod对象。node01节点上的Pod对象正在终止运行,而node02节点上自动增加了新的Pod对象。(5)启动node01主机以模拟故障恢复。任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.3更新Deployment(1)将Nginx服务器的Pod所使用的镜像升级为nginx:1.16.1。#kubectlsetimagedeployment.v1.apps/nginx-deploynginx=nginx:1.16.1deployment.apps/nginx-deployimageupdated(2)查看该Deployment对象的更新状态(过程)。#kubectlrolloutstatusdeployment/nginx-deploy(3)查看Deployment对象创建的ReplicaSet对象。(4)查看Deployment资源更新之后新创建的Pod对象。(5)查看该Deployment的详细信息。任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.4回滚Deployment(1)检查Deployment修订历史。#kubectlrollouthistorydeployment/nginx-deploydeployment.apps/nginx-deployREVISIONCHANGE-CAUSE1<none>2<none>(2)查看指定修订版本的详细信息(--revision选项指定版本号)。#kubectlrollouthistorydeployment/nginx-deploy--revision=2(3)回滚到以前的版本,这里是版本1。#kubectlrolloutundodeployment/nginx-deploy--to-revision=1deployment.apps/nginx-deployrolledback任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.5暂停、恢复Deployment的更新(1)暂停Deployment更新。#kubectlrolloutpausedeployment/nginx-deploydeployment.apps/nginx-deploypaused(2)查看Deployment资源的ReplicaSet对象。(3)更新Deployment的镜像。#kubectlsetimagedeployment/nginx-deploynginx=nginx:1.17.1deployment.apps/nginx-deployimageupdated(4)再次查看Deployment的ReplicaSet对象。发现没有创建新的ReplicaSet对象,镜像都是原来的,说明没有更新部署被触发。(5)恢复已暂停的Deployment更新。#kubectlrolloutresumedeployment/nginx-deploydeployment.apps/nginx-deployresumed任务4.1使用Deployment运行无状态应用程序任务实现任务4.1.6扩缩容Deployment修改YAML配置文件里的.spec.replicas字段值,再执行kubectlapply命令实现Pod副本数的动态调整。使用kubectlscale命令直接扩缩容,使用--raplicas选项指定要达到的Pod副本数。#kubectlscaledeployment/nginx-deploy--replicas=5deployment.apps/nginx-deployscaled任务4.2使用DaemonSet部署集群守护进程集任务4.1使用Deployment运行无状态应用程序任务4.3运行一次性任务与定时任务任务4.2使用DaemonSet部署集群守护进程集任务说明01OPTION02OPTION03OPTION了解DaemonSet控制器及其基本用法学会使用DaemonSet部署集群守护进程集学会管理基于DaemonSet部署的守护进程集任务4.2使用DaemonSet部署集群守护进程集相关知识4.2.1什么是DaemonSetDaemonSet确保集群中的全部或部分节点上只运行一个Pod的副本。任务4.2使用DaemonSet部署集群守护进程集相关知识4.2.2DaemonSet的应用场景在每个节点上运行存储守护进程,比如glusterd或ceph。在每个节点上运行日志收集守护进程,比如flunentd或logstash。在每个节点上运行监控守护进程,比如PrometheusNodeExporter或collectd。任务4.2使用DaemonSet部署集群守护进程集任务实现任务4.2.1使用DaemonSet部署日志收集守护进程集(1)创建YAML格式的DaemonSet资源定义文件。kind:DaemonSet#资源类型为DaemonSetmetadata:name:fluentd-elasticsearchnamespace:kube-system#名称空间采用内置的kube-systemlabels:k8s-app:fluentd-logging#DaemonSet资源的标签spec:selector:matchLabels:#必须指定与.spec.template的标签匹配的Pod选择运算符

name:fluentd-elasticsearchtemplate:#创建Pod副本所依据的模板

metadata:labels:#Pod模板必须指定标签

name:fluentd-elasticsearch任务4.2使用DaemonSet部署集群守护进程集任务实现任务4.2.1使用DaemonSet部署日志收集守护进程集(1)创建YAML格式的DaemonSet资源定义文件。spec:tolerations:#容忍度设置,此处设置让该守护进程集在控制平面节点上运行

-key:node-role.kubernetes.io/control-planeoperator:Existseffect:NoSchedule-key:node-role.kubernetes.io/masteroperator:Existseffect:NoSchedulecontainers:-name:fluentd-elasticsearchimage:quay.io/fluentd_elasticsearch/fluentd:v2.5.2#镜像

resources:#容器资源限制

limits:memory:200Mirequests:cpu:100mmemory:200Mi任务4.2使用DaemonSet部署集群守护进程集任务实现任务4.2.1使用DaemonSet部署日志收集守护进程集(1)创建YAML格式的DaemonSet资源定义文件。volumeMounts:#Pod的卷挂载点

-name:varlogmountPath:/var/log-name:varlibdockercontainersmountPath:/var/lib/docker/containersreadOnly:trueterminationGracePeriodSeconds:30volumes:#声明卷(本例定义了两个卷)

-name:varloghostPath:#卷类型为HostPath(主机路径)

path:/var/log-name:varlibdockercontainershostPath:path:/var/lib/docker/containers任务4.2使用DaemonSet部署集群守护进程集任务实现任务4.2.1使用DaemonSet部署日志收集守护进程集(2)基于上述YAML文件创建DaemonSet。#kubectlapply-f/k8sapp/04/fluentd-daemonset.yamldaemonset.apps/fluentd-elasticsearchcreated(3)查看该DaemonSet的Pod部署。#kubectlgetpods--namespace=kube-system-lname=fluentd-elasticsearch-owideNAMEREADYSTATUSRESTARTSAGEIPNODE……fluentd-elasticsearch-c72vq1/1Running02m11s20node02……fluentd-elasticsearch-szffp1/1Running02m11s69node01……fluentd-elasticsearch-v49961/1Running02m11s05master01……(4)进一步查看该DaemonSet对象的详细信息。#kubectldescribedaemonsetfluentd-elasticsearch--namespace=kube-system任务4.2使用DaemonSet部署集群守护进程集任务实现任务4.2.2管理DaemonSet部署的集群守护进程集对DaemonSet执行滚动更新操作#kubectlgetds/fluentd-elasticsearch-ogo-template='{{.spec.updateStrategy.type}}{{"\n"}}'-nkube-systemRollingUpdate#kubectlsetimageds/fluentd-elasticsearchfluentd-elasticsearch=quay.io/fluentd_elasticsearch/fluentd:v2.6.0-nkube-systemdaemonset.apps/fluentd-elasticsearchimageupdated#kubectlrolloutstatusds/fluentd-elasticsearch-nkube-systemWaitingfordaemonset"fluentd-elasticsearch"rollouttofinish:1outof3newpodshavebeenupdated...任务4.2使用DaemonSet部署集群守护进程集任务实现任务4.2.2管理DaemonSet部署的集群守护进程集对DaemonSet执行回滚操作#kubectlrollouthistoryds/fluentd-elasticsearch-nkube-systemdaemonset.apps/fluentd-elasticsearchREVISIONCHANGE-CAUSE1<none>2<none>#kubectlrolloutundods/fluentd-elasticsearch-nkube-systemdaemonset.apps/fluentd-elasticsearchdaemonset.apps/fluentd-elasticsearchrolledbackdaemonset.apps/fluentd-elasticsearchrolledback#kubectlrolloutstatusds/fluentd-elasticsearch-nkube-systemdaemonset"fluentd-elasticsearch"successfullyrolledout任务4.2使用DaemonSet部署集群守护进程集任务实现任务4.2.2管理DaemonSet部署的集群守护进程集删除DaemonSet#kubectldeletedsfluentd-elasticsearch-nkube-systemdaemonset.apps"fluentd-elasticsearch"deleted#kubectlgetpods-nkube-system-lname=fluentd-elasticsearch-owideNoresourcesfoundinkube-systemnamespace.任务4.2使用DaemonSet部署集群守护进程集任务4.1使用Deployment运行无状态应用程序任务4.3运行一次性任务与定时任务任务4.3运行一次性任务与定时任务任务说明01OPTION02OPTION03OPTION了解Job控制器及其基本用法了解CronJob控制器及其基本用法学会使用Job控制器运行一次性任务04OPTION学会使用CronJob控制器运行定时任务任务4.3运行一次性任务与定时任务相关知识4.3.1Job与一次性任务Job负责批量处理短暂的一次性任务。Kubernetes支持的Job类型类型completionsparallelism说明用例非并行Job11创建一个Pod直至其成功结束数据库迁移指定成功运行次数的Job>=21依次创建一个Pod运行直至指定次数的成功结束处理工作队列的Pod指定成功运行次数的并行Job>=2>=2依次创建多个Pod运行直至指定次数的成功结束多个Pod同时处理工作队列带有工作队列的并行Job1>=2创建一个或多个Pod直至有一个成功结束多个Pod同时处理工作队列任务4.3运行一次性任务与定时任务相关知识4.3.2CronJob与定时任务CronJob在Job的基础上增加了时间调度,用于创建基于特定时间间隔重复调度的Job。调度时间设置分钟(m)小时(h)日期(dom)月份(mon)星期(dow)并发策略设置Allow:允许任务并发运行,这是默认设置。Forbid:禁止并发运行,如果上一次运行尚未完成,则跳过下一次运行。Replace:取消当前正在运行的任务并用新的任务替换它。CronJob资源的使用限制任务4.3运行一次性任务与定时任务任务实现任务4.3.1使用Job运行一次性任务创建一次性任务(1)创建Job资源定义文件。apiVersion:batch/v1#如果Kubernetes版本低于1.21,则改用batch/v1beta1kind:Job#资源类型为Jobmetadata:name:picalcspec:template:#创建Pod所依据的模板

spec:containers:#容器运行任务

-name:picalcimage:perl:5.34.0command:["perl","-Mbignum=bpi","-wle","printbpi(1500)"]restartPolicy:NeverbackoffLimit:4#指定Job失败后进行重试的次数(2)基于上述YAML文件创建Job对象。#kubectlcreate-f/k8sapp/04/picalc-job.yaml任务4.3运行一次性任务与定时任务任务实现任务4.3.1使用Job运行一次性任务测试一次性任务(1)监视所创建的Job对象。#kubectlgetjobs--watchNAMECOMPLETIONSDURATIONAGEpicalc1/15s11s(2)查看所创建的Pod。#kubectlgetpod-owideNAMEREADYSTATUSRESTARTSAGEIPNODE……picalc-zsnjc0/1Completed068s04node02……(3)查看该Pod的日志。#kubectllogs-fpicalc-z9gg93.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582……任务4.3运行一次性任务与定时任务任务实现任务4.3.1使用Job运行一次性任务删除Job对象Job完成后Job对象也一样被保留下来,以便用户查看其状态。删除该Job对象。#kubectldeletejobs/picalcjob.batch"picalc"deleted任务4.3运行一次性任务与定时任务任务实现任务4.3.2使用CronJob运行定时任务创建定时任务(1)创建CronJob资源定义文件。apiVersion:batch/v1#如果Kubernetes版本低于1.21,则改用batch/v1beta1kind:CronJob#资源类型为CronJobmetadata:name:hellospec:schedule:"*/1****"#时间调度,这里为每分钟执行一次#通过Job模板指定需要运行的任务。CronJob基于Job进行实现,以下就是Job资源的定义

jobTemplate:spec:template:任务4.3运行一次性任务与定时任务任务实现任务4.3.2使用CronJob运行定时任务创建定时任务(1)创建CronJob资源定义文件。spec:containers:-name:hello

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论