老铁们,大家好,相信还有很多朋友对于deploy是什麼意思和pod控制器-deploy的相关问题不太懂,没关系,今天就由我来为大家分享分享deploy是什麼意思以及pod控制器-deploy的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
deployment跟别的控制器不一样的是,deployment通过管理replicaset,来管理pod,deloyment比replicaset的功能更加强大,理所应当的给划归重点
deploy的资源清单文件大概看一下以备不时之需
apiVersion:apps/v1#版本号\nkind:Deployment#类型\nmetadata:#元数据\nname:#rs名称\nnamespace:#所属命名空间\nlabels:#标签\ncontroller:deploy\nspec:#详情描述\nreplicas:3#副本数量\nrevisionHistoryLimit:3#保留历史版本\npaused:false#暂停部署,默认是false\nprogressDeadlineSeconds:600#部署超时时间(s),默认是600\nstrategy:#策略\ntype:RollingUpdate#滚动更新策略\nrollingUpdate:#滚动更新\nmaxSurge:30%#最大额外可以存在的副本数,可以为百分比,也可以为整数\nmaxUnavailable:30%#最大不可用状态的Pod的最大值,可以为百分比,也可以为整数\nselector:#选择器,通过它指定该控制器管理哪些pod\nmatchLabels:#Labels匹配规则\napp:nginx-pod\nmatchExpressions:#Expressions匹配规则\n-{key:app,operator:In,values:[nginx-pod]}\ntemplate:#模板,当副本数量不足时,会根据下面的模板创建pod副本\nmetadata:\nlabels:\napp:nginx-pod\nspec:\ncontainers:\n-name:nginx\nimage:nginx:1.17.1\nports:\n-containerPort:80
我们创建yaml看看
vipc-deployment.yaml\n\napiVersion:apps/v1\nkind:Deployment\nmetadata:\nname:pc-deployment\nnamespace:dev\nspec:\nreplicas:3\nselector:\nmatchLabels:\nrun:nginx-pod\ntemplate:\nmetadata:\nlabels:\nrun:nginx-pod\nspec:\ncontainers:\n-name:nginx\nimage:nginx:1.17.1
上节的pod创建以后是挂起状态我刚刚解决了,重启治百病,我重启了一下系统,又启动了一下minikube现在终于是可以正常创建pod了
[qq@k8snode1~]$kubectlgetpod,deploy-ndev\nNAMEREADYSTATUSRESTARTSAGE\npod/nginx-64b7c758f4-c4mfv1/1Running04m14s\npod/nginx-64b7c758f4-khpp51/1Running04m14s\npod/nginx-64b7c758f4-rdk7w1/1Running04m14s\npod/pc-deployment-774fccff58-lf5q21/1Running02m12s\npod/pc-deployment-774fccff58-sm28t1/1Running02m12s\npod/pc-deployment-774fccff58-xxh4v1/1Running02m12s\n\nNAMEREADYUP-TO-DATEAVAILABLEAGE\ndeployment.apps/nginx3/3334m14s\ndeployment.apps/pc-deployment3/3332m12s\n
我们就继续了乌拉乌拉
我之前说过了,deploy通过管理rs来管理pod\n下面我们就可以看我创建的deploy创建的rs和pod了\n[qq@k8snode1~]$kubectlgetpod,deploy,rs-ndev\nNAMEREADYSTATUSRESTARTSAGE\npod/pc-deployment-774fccff58-lf5q21/1Running010m\npod/pc-deployment-774fccff58-sm28t1/1Running010m\npod/pc-deployment-774fccff58-xxh4v1/1Running010m\n\nNAMEREADYUP-TO-DATEAVAILABLEAGE\ndeployment.apps/pc-deployment3/33310m\n\nNAMEDESIREDCURRENTREADYAGE\nreplicaset.apps/pc-deployment-774fccff5833310m\n
教材上说的用命令手动添加pod\n[root@k8s-master01~]#kubectlscaledeploypc-deployment--replicas=5-ndev\ndeployment.apps/pc-deploymentscaled\n\n\n为啥啊,我直接改文件不香吗,说实话我可能写出来有点困难,看懂还是比较简单的吧\n[qq@k8snode1~]$kubectleditdeploypc-deployment-ndev\ndeployment.apps/pc-deploymentedited\n------replicas:6副本数量改了个6,有啥难的\n[qq@k8snode1~]$kubectlgetpod,deploy,rs-ndev\n#可以看到加了3个pod,其他的基本没变\nNAMEREADYSTATUSRESTARTSAGE\npod/pc-deployment-774fccff58-bb7zx1/1Running04m34s\npod/pc-deployment-774fccff58-j2m6w1/1Running04m34s\npod/pc-deployment-774fccff58-lf5q21/1Running022m\npod/pc-deployment-774fccff58-sm28t1/1Running022m\npod/pc-deployment-774fccff58-xxh4v1/1Running022m\npod/pc-deployment-774fccff58-zfkkm1/1Running04m34s\n\nNAMEREADYUP-TO-DATEAVAILABLEAGE\ndeployment.apps/pc-deployment6/66622m\n\nNAMEDESIREDCURRENTREADYAGE\nreplicaset.apps/pc-deployment-774fccff5866622m
镜像更新
[qq@k8snode1~]$kubectlgetpod-ndev-w\n#首先认识一下持续更新的命令,实乃神器啊,认识一下\nNAMEREADYSTATUSRESTARTSAGE\npc-deployment-774fccff58-bb7zx1/1Running09m48s\npc-deployment-774fccff58-j2m6w1/1Running09m48s\npc-deployment-774fccff58-lf5q21/1Running027m\npc-deployment-774fccff58-sm28t1/1Running027m\npc-deployment-774fccff58-xxh4v1/1Running027m\npc-deployment-774fccff58-zfkkm1/1Running09m48s
deployment支持两种更新策略:重建更新和滚动更新,可以通过strategy指定策略类型,支持两个属性:
strategy:指定新的Pod替换旧的Pod的策略,支持两个属性:type:指定策略类型,支持两种策略Recreate:在创建出新的Pod之前会先杀掉所有已存在的PodRollingUpdate:滚动更新,就是杀死一部分,就启动一部分,在更新过程中,存在两个版本PodrollingUpdate:当type为RollingUpdate时生效,用于为RollingUpdate设置参数,支持两个属性:maxUnavailable:用来指定在升级过程中不可用Pod的最大数量,默认为25%。maxSurge:用来指定在升级过程中可以超过期望的Pod的最大数量,默认为25%。
编辑pc-deployment.yaml,在spec节点下添加更新策略
spec:\nstrategy:#策略\ntype:Recreate#重建更新
删除掉deploy刚好,我们看一下删除的时候pod的状态,注意,此处开了两个终端
一个终端执行命令,一个终端查看状态\nkubectlgetpod-ndev-w\n
[qq@k8snode1~]$kubectldeletedeploypc-deployment-ndev\ndeployment.apps"pc-deployment"deleted\n#这边一个删除命令\n另一边就有反应了\n[qq@k8snode1~]$kubectlgetpod-ndev-w\nNAMEREADYSTATUSRESTARTSAGE\npc-deployment-774fccff58-bb7zx1/1Running09m48s\npc-deployment-774fccff58-j2m6w1/1Running09m48s\npc-deployment-774fccff58-lf5q21/1Running027m\npc-deployment-774fccff58-sm28t1/1Running027m\npc-deployment-774fccff58-xxh4v1/1Running027m\npc-deployment-774fccff58-zfkkm1/1Running09m48s\npc-deployment-774fccff58-sm28t1/1Terminating032m\npc-deployment-774fccff58-xxh4v1/1Terminating032m\npc-deployment-774fccff58-j2m6w1/1Terminating014m\npc-deployment-774fccff58-zfkkm1/1Terminating014m\npc-deployment-774fccff58-bb7zx1/1Terminating014m\npc-deployment-774fccff58-lf5q21/1Terminating032m\npc-deployment-774fccff58-lf5q20/1Terminating032m\npc-deployment-774fccff58-lf5q20/1Terminating032m\npc-deployment-774fccff58-lf5q20/1Terminating032m\npc-deployment-774fccff58-j2m6w0/1Terminating014m\npc-deployment-774fccff58-j2m6w0/1Terminating014m\npc-deployment-774fccff58-j2m6w0/1Terminating014m\npc-deployment-774fccff58-bb7zx0/1Terminating014m\npc-deployment-774fccff58-bb7zx0/1Terminating014m\npc-deployment-774fccff58-bb7zx0/1Terminating014m\npc-deployment-774fccff58-xxh4v0/1Terminating032m\npc-deployment-774fccff58-xxh4v0/1Terminating032m\npc-deployment-774fccff58-xxh4v0/1Terminating032m\npc-deployment-774fccff58-zfkkm0/1Terminating014m\npc-deployment-774fccff58-zfkkm0/1Terminating014m\npc-deployment-774fccff58-zfkkm0/1Terminating014m\npc-deployment-774fccff58-sm28t0/1Terminating032m\npc-deployment-774fccff58-sm28t0/1Terminating032m\npc-deployment-774fccff58-sm28t0/1Terminating032m\n#这个自己看一下就好
我们继续改文件
把这一段粘贴到这里来\n\nnamespace:dev\nspec:\nstrategy:#策略\ntype:Recreate#重建更新\nreplicas:3\nselector:\n
[qq@k8snode1~]$kubectlapply-fpc-deployment.yaml\ndeployment.apps/pc-deploymentcreated\n看看状态pod从挂起,到容器创建,到运行\npc-deployment-774fccff58-npx7s0/1Pending00s\npc-deployment-774fccff58-npx7s0/1Pending00s\npc-deployment-774fccff58-wgdpd0/1Pending01s\npc-deployment-774fccff58-lnfr60/1Pending01s\npc-deployment-774fccff58-wgdpd0/1Pending01s\npc-deployment-774fccff58-lnfr60/1Pending01s\npc-deployment-774fccff58-npx7s0/1ContainerCreating01s\npc-deployment-774fccff58-wgdpd0/1ContainerCreating01s\npc-deployment-774fccff58-lnfr60/1ContainerCreating01s\npc-deployment-774fccff58-npx7s1/1Running04s\npc-deployment-774fccff58-wgdpd1/1Running04s\npc-deployment-774fccff58-lnfr61/1Running04s\n
[qq@k8snode1~]$kubectleditdeploypc-deployment-ndev\ndeployment.apps/pc-deploymentedited\n我把版本号改成了1.17.1\n\n看状态\npc-deployment-774fccff58-lnfr61/1Running04s\n\npc-deployment-774fccff58-lnfr61/1Terminating04m44s\npc-deployment-774fccff58-npx7s1/1Terminating04m44s\npc-deployment-774fccff58-wgdpd1/1Terminating04m44s\n\npc-deployment-774fccff58-wgdpd0/1Terminating04m45s\npc-deployment-774fccff58-wgdpd0/1Terminating04m45s\npc-deployment-774fccff58-wgdpd0/1Terminating04m45s\n\npc-deployment-774fccff58-lnfr60/1Terminating04m45s\npc-deployment-774fccff58-lnfr60/1Terminating04m46s\npc-deployment-774fccff58-lnfr60/1Terminating04m46s\n\npc-deployment-774fccff58-npx7s0/1Terminating04m46s\npc-deployment-774fccff58-npx7s0/1Terminating04m46s\npc-deployment-774fccff58-npx7s0/1Terminating04m46s\n\npc-deployment-5d776b56ff-j4cq40/1Pending00s\npc-deployment-5d776b56ff-j4cq40/1Pending00s\n\npc-deployment-5d776b56ff-47qrc0/1Pending00s\n\npc-deployment-5d776b56ff-mgqdk0/1Pending00s\npc-deployment-5d776b56ff-mgqdk0/1Pending00s\n\npc-deployment-5d776b56ff-47qrc0/1Pending00s\n\npc-deployment-5d776b56ff-j4cq40/1ContainerCreating01s\npc-deployment-5d776b56ff-47qrc0/1ContainerCreating01s\npc-deployment-5d776b56ff-mgqdk0/1ContainerCreating02s\n\npc-deployment-5d776b56ff-j4cq41/1Running040s\npc-deployment-5d776b56ff-47qrc1/1Running042s\npc-deployment-5d776b56ff-mgqdk1/1Running045s\n\n\n再查一下你会发现,之前的rs还在,这是为回滚准备的\n[qq@k8snode1~]$kubectlgetpod,deploy,rs-ndev\nNAMEREADYSTATUSRESTARTSAGE\npod/pc-deployment-5d776b56ff-47qrc1/1Running013m\npod/pc-deployment-5d776b56ff-j4cq41/1Running013m\npod/pc-deployment-5d776b56ff-mgqdk1/1Running013m\n\nNAMEREADYUP-TO-DATEAVAILABLEAGE\ndeployment.apps/pc-deployment3/33318m\n\nNAMEDESIREDCURRENTREADYAGE\nreplicaset.apps/pc-deployment-5d776b56ff33313m\nreplicaset.apps/pc-deployment-774fccff5800018m\n
滚动更新
spec:\nstrategy:#策略\ntype:RollingUpdate#滚动更新策略\nrollingUpdate:\nmaxSurge:25%\nmaxUnavailable:25%
[qq@k8snode1~]$kubectleditdeploypc-deployment-ndev\ndeployment.apps/pc-deploymentedited\n\n\n\npc-deployment-5d776b56ff-mgqdk1/1Running045s\npc-deployment-785c7c59f6-fv7690/1Pending00s\npc-deployment-785c7c59f6-fv7690/1Pending00s\npc-deployment-785c7c59f6-fv7690/1ContainerCreating00s\npc-deployment-785c7c59f6-fv7691/1Running032s\npc-deployment-785c7c59f6-j69pm0/1Pending00s\npc-deployment-5d776b56ff-47qrc1/1Terminating019m\npc-deployment-785c7c59f6-j69pm0/1Pending00s\npc-deployment-785c7c59f6-j69pm0/1ContainerCreating00s\npc-deployment-5d776b56ff-47qrc0/1Terminating019m\npc-deployment-5d776b56ff-47qrc0/1Terminating019m\npc-deployment-5d776b56ff-47qrc0/1Terminating019m\npc-deployment-785c7c59f6-j69pm1/1Running02s\npc-deployment-5d776b56ff-mgqdk1/1Terminating019m\npc-deployment-785c7c59f6-85n4f0/1Pending01s\npc-deployment-785c7c59f6-85n4f0/1Pending01s\npc-deployment-785c7c59f6-85n4f0/1ContainerCreating01s\npc-deployment-785c7c59f6-85n4f1/1Running01s\npc-deployment-5d776b56ff-mgqdk0/1Terminating019m\npc-deployment-5d776b56ff-j4cq41/1Terminating019m\npc-deployment-5d776b56ff-mgqdk0/1Terminating019m\npc-deployment-5d776b56ff-mgqdk0/1Terminating019m\npc-deployment-5d776b56ff-j4cq40/1Terminating019m\npc-deployment-5d776b56ff-j4cq40/1Terminating019m\npc-deployment-5d776b56ff-j4cq40/1Terminating019m\n
状态这边的意思看着有点多,也得分方法看\n例\npc-deployment-5d776b56ff-mgqdk1/1Running045s\n|deploy名|rs编号|pod随机名\n虽乱,但是还能分析出来的,刚开始pod在5d的rs里\ndeploy创建了78rs,在78rs里创建了fv769pod\n然后干掉了一台5drs里的pod,以此模式滚动更新,慢慢所以pod都被更新到了78rs里
版本回退
deployment支持版本升级过程中的暂停、继续功能以及版本回退等诸多功能,下面具体来看.
kubectlrollout:版本升级相关功能,支持下面的选项:
[qq@k8snode1~]$kubectlrolloutstatusdeploypc-deployment-ndev\ndeployment"pc-deployment"successfullyrolledout\n查看当前的版本更新状态\n[qq@k8snode1~]$kubectlrollouthistorydeploypc-deployment-ndev\ndeployment.apps/pc-deployment\nREVISIONCHANGE-CAUSE\n1<none>\n2<none>\n3<none>\n有三次版本更新记录,说明完成过两次升级\n\n版本回退\n我们先回滚版本1看看\n[qq@k8snode1~]$kubectlrolloutundodeploypc-deployment--to-revision=1-ndev\ndeployment.apps/pc-deploymentrolledback\n\n[qq@k8snode1~]$kubectlgetdeploy-ndev-owide\nNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTOR\npc-deployment3/3333h20mnginxnginx:1.17.1run=nginx-pod
[qq@k8snode1~]$kubectlgetrs-ndev-owide\nNAMEDESIREDCURRENTREADYAGECONTAINERSIMAGESSELECTOR\npc-deployment-5d776b56ff0003h19mnginxnginx:1.17.2pod-template-hash=5d776b56ff,run=nginx-pod\npc-deployment-774fccff583333h23mnginxnginx:1.17.1pod-template-hash=774fccff58,run=nginx-pod\npc-deployment-785c7c59f60003hnginxnginx:1.17.3pod-template-hash=785c7c59f6,run=nginx-pod\n\n#查看rs,发现第一个rs中有3个pod运行,后面两个版本的rs中pod未运行\n#其实deployment之所以可以实现版本的回滚,就是通过记录下历史rs来实现的,\n#一旦想回滚到哪个版本,只需要将当前版本pod数量降为0,然后将回滚版本的pod提升为目标数量就可以了
金丝雀发布
Deployment控制器支持控制更新过程中的控制,如“暂停(pause)”或“继续(resume)”更新操作。
比如有一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。
更新deployment的版本,并配置暂停deploymen\n[qq@k8snode1~]$kubectlsetimagedeploypc-deploymentnginx=nginx:1.17.4-ndev&&kubectlrolloutpausedeploymentpc-deployment-ndev\ndeployment.apps/pc-deploymentimageupdated\ndeployment.apps/pc-deploymentpaused\n\n稍等一下,看一下状态,发现又创建了一个rs里面运行着一个容器,同时原版本没有减少\n[qq@k8snode1~]$kubectlgetrs-ndev\nNAMEDESIREDCURRENTREADYAGE\npc-deployment-5d776b56ff0003h27m\npc-deployment-6d6bc4bd51112m7s\npc-deployment-774fccff583333h32m\npc-deployment-785c7c59f60003h9m\n在看一下更新状态,可以看到更新了1个,更新未完成\n[qq@k8snode1~]$kubectlrolloutstatusdeploypc-deployment-ndev\nWaitingfordeployment"pc-deployment"rollouttofinish:1outof3newreplicashavebeenupdated...\n\n这种情况下在生产环境可以分配一小部分用户去访问新的版本,如果新版本没问题了,就可以完全更新了\n[qq@k8snode1~]$kubectlrolloutresumedeploypc-deployment-ndev\ndeployment.apps/pc-deploymentresumed\n原版本的3台机没了,全部更换为了新版本\n[qq@k8snode1~]$kubectlgetrs-ndev\nNAMEDESIREDCURRENTREADYAGE\npc-deployment-5d776b56ff0003h40m\npc-deployment-6d6bc4bd533314m\npc-deployment-774fccff580003h45m\npc-deployment-785c7c59f60003h22m\n看一下更新状态,也结束了\n[qq@k8snode1~]$kubectlrolloutstatusdeploypc-deployment-ndev\ndeployment"pc-deployment"successfullyrolledout\n
结束实验删除环境
文章到此结束,如果本次分享的deploy是什麼意思和pod控制器-deploy的问题解决了您的问题,那么我们由衷的感到高兴!