Pod发布
我们使用Deployment控制器来创建了Pod,又使用Service对Pod做了代理(ClusterIP、NodePort),使Pod可以被外部主机可访问(NodePort可被外部主机访问,ClusterIP还需要做LB来进行负载,我们上面演示了在集群内部的宿主机通过ClusterIP的方式访问了Pod内的容器);在我们平常工作中,肯定会出现开发版本发布或则更新的情况,在容器中更新版本,之需要将我们新版本的代码打包至镜像,然后我们通过重新部署新版本镜像替代掉老版本镜像即可。
kubectl edit
1 2 3 4 5 |
#1.查看我们创建的控制器 kubectl get deploy -n default -o wide #2.然后通过命令 kubectl edit [资源对象/资源对象名称] kubectl edit deploy/nginx-deploy #3.搜索image就可以定位到你所使用的镜像版本 |
kubectl edit 命令不仅可以编辑deployment的yaml配置文件,只要是资源对象都可以使用 kubectl edit 来编辑
升级例子
我们上面在Pod中部署的Nginx容器镜像版本是1.14.2,我们现在把Nginx容器升级至latest最新版本。
上面我们是通过curl访问得知我们的nginx容器使用的是1.14.2版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#升级语法如下 #set:在资源对象上设定特定功能 #image:在资源对象上设定镜像 #deploy/nginx-deploy:指定我们资源及资源名称 #-n default:指定名称空间 #nginx:为容器名称 #nginx:latest:为镜像版本,这里我们升级为latest最新版本 kubectl set image deploy/nginx-deploy -n default nginx=nginx:latest #升级过程,我们升级的nginx-deploy本来只有一个pod,上面我们给这个pod做了扩容,现在变为了两个pod ,下面升级过程中,是在升级其中的一个pod ContainerCreating kubectl get pods -n default | grep nginx-deploy nginx-deploy-788b9c6b69-ncfvp 1/1 Running 1 45h nginx-deploy-788b9c6b69-tfcrx 1/1 Running 1 47h nginx-deploy-7d5c9644b-wrnd5 0/1 ContainerCreating 0 20s #第一个pod升级完成,然后控制器将原来老的Pod进行终止后销毁 Terminating,接着升级第二个Pod ContainerCreating kubectl get pods -n default | grep nginx-deploy nginx-deploy-788b9c6b69-ncfvp 0/1 Terminating 1 45h nginx-deploy-788b9c6b69-tfcrx 1/1 Running 1 47h nginx-deploy-7d5c9644b-vsrbd 0/1 ContainerCreating 0 5s nginx-deploy-7d5c9644b-wrnd5 1/1 Running 0 45s #两个Pod都升级完成(pod的名称和IP地址都发生了改变) kubectl get pods -n default | grep nginx-deploy nginx-deploy-7d5c9644b-vsrbd 1/1 Running 0 82s nginx-deploy-7d5c9644b-wrnd5 1/1 Running 0 2m2s #升级成功后可以看下pod的升级状态 kubectl rollout status deployment/nginx-deploy #访问Pod或者我们通过kubectl edit来去看pod的镜像(与上面一样,访问方式不变) curl http://192.168.31.233:30390 -I HTTP/1.1 200 OK Server: nginx/1.17.10 #可以看到,目前的容器版本是1.17.1 Date: Fri, 08 May 2020 07:45:39 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 14 Apr 2020 14:19:26 GMT Connection: keep-alive ETag: "5e95c66e-264" Accept-Ranges: bytes #在线编辑Pod或者deploy可以看到使用的镜像版本 kubectl edit pods/nginx-deploy-7d5c9644b-vsrbd |
版本回滚
我们上线后也会偶尔也会出现问题,这个时候我们需要进行版本回滚,可以回滚到上个版本,或者指定版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#查看发布的记录 kubectl rollout history deploy/nginx-deploy deployment.apps/nginx-deploy REVISION CHANGE-CAUSE 1 <none> #第一次发布记录是1.14.2版本 2 <none> #第二次就是我们刚才升级后的版本1.17.1 #回滚到上个版本 k8sops@k8s-master01:~$ kubectl rollout undo deploy/nginx-deploy #然后查看pod,发现已经回滚完成 kubectl get pods -n default | grep nginx-deploy nginx-deploy-788b9c6b69-2mgn6 1/1 Running 0 11s nginx-deploy-788b9c6b69-kkp5z 1/1 Running 0 8s #访问测试回滚后的pod版本 curl http://192.168.31.233:30390 -I HTTP/1.1 200 OK Server: nginx/1.14.2 #版本已经变更到上个版本 Date: Fri, 08 May 2020 07:53:03 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Wed, 10 Apr 2019 01:08:42 GMT Connection: keep-alive ETag: "5cad421a-264" Accept-Ranges: bytes #然后再看下发布记录 kubectl rollout history deploy/nginx-deploy deployment.apps/nginx-deploy REVISION CHANGE-CAUSE 2 <none> #1.17.1为第二版本 3 <none> #目前为第三版本 #回滚到指定版本(这里指定到2版本) kubectl rollout undo deploy/nginx-deploy --to-revision=2 #然后访问测试,查看版本 curl http://192.168.31.233:30390 -I HTTP/1.1 200 OK Server: nginx/1.17.10 #可以看到变回了1.17.1版本 Date: Fri, 08 May 2020 07:56:33 GMT Content-Type: text/html Content-Length: 612 Last-Modified: Tue, 14 Apr 2020 14:19:26 GMT Connection: keep-alive ETag: "5e95c66e-264" Accept-Ranges: bytes #再次查看发布记录(目前我们的1.17.1版本是4版本,1.14.2版本是3版本) kubectl rollout history deploy/nginx-deploy deployment.apps/nginx-deploy REVISION CHANGE-CAUSE 3 <none> 4 <none> #查看某个版本的详细记录(假如我们要查看3版本的更详细的一些记录,上面只显示了版本号,未显示一些其它属性信息) #我们可以通过 history 然后指定资源/资源对象 指定版本号,然后输出为yaml格式进行详细查看 kubectl rollout history deploy/nginx-deploy --revision=3 -o yaml |