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

下载本文档

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

文档简介

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

熟悉Kubernetes基本操作能力CAPACITY要求了解Kubernetes对象和资源学会Kubernetes对象的创建和基本操作熟悉kubectl命令的语法并掌握其基本用法了解Pod的概念和实现机制学会创建和管理Pod任务3.2使用kubectl命令任务3.1理解和使用Kubernetes对象任务3.3创建和管理Pod任务3.1理解和使用Kubernetes对象任务说明01OPTION02OPTION03OPTION了解Kubernetes对象和资源的概念了解Kubernetes对象的描述方法了解Kubernetes对象管理方法04OPTION初步掌握Kubernetes对象的创建方法05OPTION学会使用Kubernetes对象的标签06OPTION学会使用Kubernetes名称空间任务3.1理解和使用Kubernetes对象相关知识3.1.1什么是Kubernetes对象任务3.1理解和使用Kubernetes对象相关知识3.1.2Kubernetes对象的规约和状态spec——指定对象的规约(规格),是必需的字段,用于描述对象的期望状态(DesiredState)。status——描述对象的当前状态(CurrentState),由Kubernetes系统和组件设置并更新。Kubernetes控制平面一直都在积极地管理着对象的实际状态(ActualState),让对象达成所期望的状态。任务3.1理解和使用Kubernetes对象相关知识3.1.3描述Kubernetes对象#必需字段,声明对象使用的API版本apiVersion:apps/v1#必需字段,声明要创建的对象的类别kind:Deployment#必需字段,定义对象的元信息,包括对象名称、使用的标签等metadata:name:nginx-deployment任务3.1理解和使用Kubernetes对象相关知识3.1.3描述Kubernetes对象#必需字段,声明对象的期望状态,如使用的镜像、副本数等spec:selector:matchLabels:app:nginxreplicas:2#运行2个与该模板匹配的Podtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.14.2ports:-containerPort:80任务3.1理解和使用Kubernetes对象相关知识3.1.4Kubernetes对象管理方法管理方法说明示例适用场景指令式命令通过操作指令的形式直接操作Kubernetes对象,所操作的对象在命令的参数中直接指定,操作结果由Kubernetes系统实时管理,不提供配置更改的历史记录kubectlcreatedeploymentnginx--imagenginx项目开发阶段,或在Kubernetes中运行一次性任务,简单易用指令式对象配置将指令发给配置文件,配置文件必须包含YAML或JSON格式的对象完整定义,被操作的对象会由Kubernetes按照配置文件中的定义进行创建或更改kubectlcreate-fnginx.yaml适合生产项目,通过代码管理系统进行管理,可以与流程集成声明式对象配置将对象的定义保存在配置文件,但是并不指定要对该文件执行的操作,对对象执行的操作(create、update、patch、delete)由Kubernetes自动检测出来。基于目录工作,根据目录中若干配置文件执行不同的操作,通过kubectlapply命令应用配置文件来实现kubectlapply-fconfigs/适合生产项目,但使用难度较高,难于调试任务3.1理解和使用Kubernetes对象相关知识3.1.5对象的名称和UID每一个对象都有一个名称来标识在同类资源中的唯一性。名称在同一资源的所有API版本中必须是唯一的。每个对象都有一个不同的UID来标识该对象在整个集群中的唯一性。UID是Kubernetes自动为对象生成的,可以唯一标识该对象的字符串。任务3.1理解和使用Kubernetes对象相关知识3.1.6标签和注解标签标签以键值对的形式附加到各种对象上。一个对象可以定义任意数量的标签,同一个标签也可以被添加到任意数量的对象上。任务3.1理解和使用Kubernetes对象相关知识3.1.6标签和注解标签选择器基于等值的选择器environment=productiontier!=frontend基于集合的选择器environmentin(production,qa)tiernotin(frontend,backend)

partition!partition任务3.1理解和使用Kubernetes对象相关知识3.1.6标签和注解注解使用注解为Kubernetes对象附加任意的非标识的元数据。注解使用键值对的形式进行定义。"metadata":{"annotations":{"key1":"value1","key2":"value2"}}任务3.1理解和使用Kubernetes对象相关知识3.1.7名称空间名称空间进一步组织和划分资源。名称空间为名称提供了一个范围。部分全局资源是不属于任何名称空间。名称空间适用于存在很多跨多个团队或项目的用户的场景。任务3.1理解和使用Kubernetes对象任务实现任务3.1.1创建Kubernetes对象使用指令式命令创建Deployment对象#kubectlcreatedeploymentnginx--imagenginx:1.14.2deployment.apps/nginxcreated#kubectlgetdeploymentNAMEREADYUP-TO-DATEAVAILABLEAGEnginx1/11151s#kubectlgetpodNAMEREADYSTATUSRESTARTSAGEnginx-896b88869-bmchg1/1Running076s#kubectldeletedeploymentnginxdeployment.apps"nginx"deleted任务3.1理解和使用Kubernetes对象任务实现任务3.1.1创建Kubernetes对象使用指令式对象配置创建Deployment对象#kubectlcreate-f/k8sapp/03/nginx-deployment.yamldeployment.apps/nginx-deploymentcreated#kubectlgetdeploymentNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-deployment2/2222m41s#kubectlgetpodNAMEREADYSTATUSRESTARTSAGEnginx-deployment-7fb96c846b-6pgv91/1Running02m52snginx-deployment-7fb96c846b-sqrdr1/1Running02m52s#kubectldelete-f/k8sapp/03/nginx-deployment.yamldeployment.apps"nginx-deployment"deleted任务3.1理解和使用Kubernetes对象任务实现任务3.1.1创建Kubernetes对象使用声明式对象配置创建Deployment对象#kubectlapply-f/k8sapp/03/nginx-deployment.yamldeployment.apps/nginx-deploymentcreated#kubectlgetdeploymentNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-deployment2/22236s修改该YAML文件,将其中的副本数定义修改为3。#kubectlapply-f/k8sapp/03/nginx-deployment.yamldeployment.apps/nginx-deploymentconfigured#kubectlgetdeploymentNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-deployment3/333106s任务3.1理解和使用Kubernetes对象任务实现任务3.1.1创建Kubernetes对象使用声明式对象配置创建Deployment对象#kubectlgetpodNAMEREADYSTATUSRESTARTSAGEnginx-deployment-7fb96c846b-4cmnr1/1Running0118snginx-deployment-7fb96c846b-mrr9n1/1Running034snginx-deployment-7fb96c846b-njfbf1/1Running0118s#kubectldelete-f/k8sapp/03/nginx-deployment.yamldeployment.apps"nginx-deployment"deleted任务3.1理解和使用Kubernetes对象任务实现任务3.1.2操作对象的标签为对象添加标签创建名为nginx-a的Pod对象并为其添加标签app=nginx。#kubectlrunnginx-a--image=nginx-lapp=nginxpod/nginx-acreated编写Pod配置文件nginx-label.yaml。apiVersion:v1kind:Podmetadata:name:nginx-blabels:#为Pod设置两个Labelapp:nginxenv:prodspec:containers:-name:nginximage:nginx基于该配置文件创建Pod对象。#kubectlcreate-f/k8sapp/03/nginx-label.yamlpod/nginx-bcreated任务3.1理解和使用Kubernetes对象任务实现任务3.1.2操作对象的标签修改对象的标签#kubectllabelpodnginx-aenv=debug--overwritepod/nginx-alabeled修改对象的标签#kubectllabelpodnginx-aversion-pod/nginx-aunlabeled操作具有指定标签的对象#kubectldeletepod-lapp=nginxpod"nginx-a"deletedpod"nginx-b"deleted任务3.1理解和使用Kubernetes对象任务实现任务3.1.3操作名称空间查看集群中当前所有的名称空间列表#kubectlgetnamespacesNAMESTATUSAGEdefaultActive22d#默认名称空间kube-node-leaseActive22d#用于与各节点相关的租约(Lease)对象kube-publicActive22d#主要由集群使用kube-systemActive22d#系统创建对象所使用的名称空间kubernetes-dashboardActive22d#Dashboard所用名称空间任务3.1理解和使用Kubernetes对象任务实现任务3.1.3操作名称空间通过配置文件创建名称空间编写配置文件test-ns.yaml。apiVersion:v1kind:Namespacemetadata:name:test-ns基于该配置文件创建名为test-ns的名称空间。#kubectlcreate-f/k8sapp/03/test-ns.yamlnamespace/test-nscreated#kubectlgetnamespacetest-nsNAMESTATUSAGEtest-nsActive13s任务3.2使用kubectl命令任务3.1理解和使用Kubernetes对象任务3.3创建和管理Pod任务3.2使用kubectl命令任务说明01OPTION02OPTION03OPTION了解kubectl命令的基本用法了解kubectl命令的语法要素熟悉kubectl命令的基本使用任务3.2使用kubectl命令相关知识3.2.1kubectl命令的基本用法kubectl[command][TYPE][NAME][flags]command——对资源执行操作的子命令,如create、get、describe、delete。TYPE——要操作的资源(或对象)类型。NAME——要操作的资源的名称。任务3.2使用kubectl命令相关知识3.2.2kbectl常用子命令子命令用法说明applykubectlapply-fFILENAME[flags]从配置文件或stdin对资源应用配置更改attachkubectlattachPOD-cCONTAINER[-i][-t][flags]挂接到正在运行的容器,查看输出流或与容器(stdin)交互createkubectlcreate-fFILENAME[flags]从配置文件或stdin对创建资源deletekubectldelete(-fFILENAME|TYPE[NAME|/NAME|-llabel|--all])[flags]基于文件、标准输入或通过指定标签选择器、名称、资源选择器或资源本身,删除资源describekubectldescribe(-fFILENAME|TYPE[NAME_PREFIX|/NAME|-llabel])[flags]显示资源的详细状态execkubectlexecPOD[-cCONTAINER][-i][-t][flags][--COMMAND[args...]]对Pod中的容器执行命令任务3.2使用kubectl命令相关知识3.2.3kbectl所支持的资源类型资源名称缩写名API分组及其版本是否属于名称空间资源类型configmapscmv1是ConfigMapendpointsepv1是Endpointseventsevv1是Eventnamespacesnsv1否Namespacenodesnov1否Nodepersistentvolumeclaimspvcv1是PersistentVolumeClaimpersistentvolumespvv1否PersistentVolumepodspov1是Podsecrets

v1是Secretservicessvcv1是Servicedaemonsetsdsapps/v1是DaemonSetdeploymentsdeployapps/v1是Deploymentreplicasetsrsapps/v1是ReplicaSetstatefulsetsstsapps/v1是StatefulSetcronjobscjbatch/v1是CronJobjobs

batch/v1是Jobeventsevevents.k8s.io/v1是Eventeventsevevents.k8s.io/v1是Eventstorageclassesscstorage.k8s.io/v1否StorageClass任务3.2使用kubectl命令相关知识3.2.4kbectl命令输出格式输出格式说明-ocustom-columns=<spec>以逗号分隔的自定义列列表输出-ocustom-columns-file=<filename>使用文件中的自定义列模板输出-ojson输出JSON格式的API对象-ojsonpath=<template>输出jsonpath表达式定义的字段-ojsonpath-file=<filename>输出文件中jsonpath表达式定义的字段-oname仅输出资源名称-owide以纯文本格式输出,包含所有附加信息。以Pod为例,输出包含所在节点的信息-oyaml输出YAML格式的API对象任务3.2使用kubectl命令任务实现任务3.2.1熟悉kubectl命令的使用获取kubectl命令的帮助信息kubectl<command>--help执行kubectloptions命令可以查看全局选项。执行kubectlapi-resources命令查看所支持的资源列表。使用kubectl命令行补全功能#yuminstallbash-completion-y#source/usr/share/bash-completion/bash_completion#source<(kubectlcompletionbash)任务2.2部署和使用KubernetesDashboard任务实现任务3.2.2使用kubectl命令辅助生成YAML文件获取特定资源及其字段的规范kubectlexplainresource[.field]...查看特定字段的规范#kubectlexplainpods.spec.containersKIND:PodVERSION:v1......RESOURCE:containers<[]Object>FIELDS:args <[]string>......自动生成YAML文件#kubectlcreatedeploymentnginx-deploy--image=nginx-oyaml--dry-run=client>nginx-deploy.yaml任务3.2使用kubectl命令任务3.1理解和使用Kubernetes对象任务3.3创建和管理Pod任务3.3创建和管理Pod任务说明01OPTION02OPTION03OPTION了解Pod与容器的关系了解Pod的定义了解Pod的生命周期与健康检查机制04OPTION学会创建多容器的Pod05OPTION掌握Pod的基本配置方法任务3.3创建和管理Pod相关知识3.3.1什么是PodPod是Kubernetes创建或部署的最小单位。Pod相当于容器集合,类似于共享名称空间并共享文件系统卷的一组容器。Pod具有联网功能。Pod具有存储功能。Pod被创建后用一个UID来唯一标识,当Pod生命周期结束,被一个等价Pod替代,UID将重新生成。任务3.3创建和管理Pod相关知识3.3.2Pod与容器为什么要使用Pod代替容器作为部署的最小单元容器通常遵循单一性原则。为避免给容器本身额外增加新的属性,Kubernetes引入Pod。一个Pod封装一个或多个容器、存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。任务3.3创建和管理Pod相关知识3.3.2Pod与容器Pod单一容器Pod多容器

Pod任务3.3创建和管理Pod相关知识3.3.2Pod与容器初始化容器在Pod的应用容器(主容器)启动之前要运行的容器,主要完成应用容器的前置工作。提供应用容器镜像中不具备的程序或自定义代码。为应用容器的成功启动提供依赖的前提条件。任务3.3创建和管理Pod相关知识3.3.3Pod的定义apiVersion:v1#API版本号kind:Pod#资源类型Podmetadata:#元数据

name:string#Pod名称

namespace:string#Pod所属的名称空间,默认为defaultlabels:#自定义标签

-name:stringspec:#Pod中容器的详细定义(规约)

containers:#容器列表

-name:string#容器名称

image:string#容器的镜像名称

imagePullPolicy:[Always|Never|IfNotPresent]#获取镜像的策略

command:[string]#容器的启动命令......restartPolicy:[Always|Never|OnFailure]#设置重启策略任务3.3创建和管理Pod相关知识3.3.4Pod的生命周期Pod的阶段Pending(挂起)Running(正在运行)Succeeded(已成功)Failed(已失败)Unknown(未知)任务3.3创建和管理Pod相关知识3.3.4Pod的生命周期容器状态Running(正在运行)Terminated(已终止)Waiting(等待)容器重启策略AlwaysOnFailureNever任务3.3创建和管理Pod相关知识3.3.4Pod的生命周期Pod的状况状况说明PodScheduled调度就绪,Pod已经被调度到某节点PodHasNetwork网络就绪,Pod沙箱被成功创建并且配置了网络ContainersReadyPod中所有容器都已就绪Initialized所有的初始化容器都已成功完成ReadyPod可以为请求提供服务,并且应该被添加到对应服务的负载均衡池中任务3.3创建和管理Pod相关知识3.3.5Pod的健康检查机制探测器探测结果Success(成功)Failure(失败)Unknown(未知)探测器类型livenessProbe(存活探测器)readinessProbe(就绪探测器)startupProbe(启动探测器)探测机制exechttpGettcpSocket任务3.3创建和管理Pod任务实现任务3.3.1创建多容器的Pod(1)创建定义Pod的配置文件two-containers-pod.yaml。apiVersion:v1kind:Podmetadata:name:two-containers-podspec:#Pod级配置

restartPolicy:Nevervolumes:#定义共享数据的卷

-name:shared-dataemptyDir:{}#emptyDir类型的卷

containers:#容器级配置

#第1个容器配置

-name:nginx-containerimage:nginxvolumeMounts:#挂载共享卷

-name:shared-datamountPath:/usr/share/nginx/html#挂载路径任务3.3创建和管理Pod任务实现任务3.3.1创建多容器的Pod(1)创建定义Pod的配置文件two-containers-pod.yaml。#第2个容器配置

-name:busybox-containerimage:busyboxvolumeMounts:#挂载共享卷

-name:shared-datamountPath:/pod-data#挂载路径

#容器启动命令及参数

command:["/bin/sh"]args:["-c","echoHellofromthebusyboxcontainer>/pod-data/index.html"]任务3.3创建和管理Pod任务实现任务3.3.1创建多容器的Pod(2)基于上述配置文件创建Pod。#kubectlapply-f/k8sapp/03/two-containers-pod.yaml(3)查看Pod及其容器的信息。#kubectlgetpodtwo-containers-pod--output=yaml(4)进入nginx容器的Shell,使用curl向Nginx服务器发起请求。kubectlexec-ittwo-containers-pod-cnginx-container--/bin/bashroot@two-containers:/#curllocalhostHellofromthebusyboxcontainer(5)使用curl向Pod的IP地址发起请求。#curl6Hellofromthebusyboxcontainer(6)删除该Pod。#kubectldelete-f/k8sapp/03/two-container-pod.yaml任务3.3创建和管理Pod任务实现任务3.3.2为Pod及其容器指定资源配额为Pod容器设置CPU和内存配额apiVersion:v1kind:Podmetadata:name:resources-limit-podspec:containers:-name:nginximage:nginxresources:#资源配额

limits:#限制资源(上限)cpu:200m#CPU限制

memory:400Mi#内存限制

requests:#请求资源(下限)cpu:100mmemory:200Mi任务3.3创建和管理Pod任务实现任务3.3.2为Pod及其容器指定资源配额为Pod容器设置CPU和内存配额-name:stressimage:polinux/stressresources:#资源配额

limits:#限制资源(上限),也可以用字符串表示

memory:"200Mi"requests:#请求资源(下限)memory:"100Mi"command:["stress"]args:["--vm","1","--vm-bytes","150M","--vm-hang","1"]任务3.3创建和管理Pod任务实现任务3.3.3实现Pod容器的健康检查spec:containers:-name:liveness-probe-podimage:nginxlivenessProbe:#定义存活探测器

httpGet:path:/port:80initialDelaySeconds:10#容器启动后10秒开始探测

timeoutSeconds:2#容器必须在2秒内作出相应反馈给探测器,否则视为探测失败

periodSeconds:30#探测周期,每30秒探测一次

successThreshold:1#连续探测1次成功表示成功

failureThreshold:3#连续探测3次失败表示失败THANKSKubernetes集群实战(微课版)工业和信息化精品系列教材——云计算技术项目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:

温馨提示

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

评论

0/150

提交评论