经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Kubernetes » 查看文章
更新k8s镜像版本的三种方式
来源:cnblogs  作者:wilson排球  时间:2019/1/25 9:09:27  对本文有异议

一、知识准备

更新镜像版本是在k8s日常使用中非常常见的一种操作,本文主要介绍更新介绍的三种方法


二、环境准备

组件 版本
OS Ubuntu 18.04.1 LTS
docker 18.06.0-ce


三、准备镜像

首先准备2个不同版本的镜像,用于测试(已经在阿里云上创建好2个不同版本的nginx镜像)

  1. docker pull registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1
  2. docker pull registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v2

这两个镜像只有版本号不同,其他的都一样

  1. root@k8s-master:~# docker run -d --rm -p 10080:80 nginx:v1
  2. e88097841c5feef92e4285a2448b943934ade5d86412946bc8d86e262f80a050
  3. root@k8s-master:~# curl http://127.0.0.1:10080
  4. ----------
  5. version: v1
  6. hostname: f5189a5d3ad3

四、更新镜像的三种方法

我们首先准备一个yaml文件用于测试:

  1. root@k8s-master:~# more image_update.yaml
  2. apiVersion: extensions/v1beta1
  3. kind: Deployment
  4. metadata:
  5. name: image-deployment
  6. spec:
  7. replicas: 1
  8. template:
  9. metadata:
  10. labels:
  11. app: image-update
  12. spec:
  13. containers:
  14. - name: nginx
  15. image: registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1
  16. imagePullPolicy: Always
  17. ---
  18. apiVersion: v1
  19. kind: Service
  20. metadata:
  21. name: nginx-service
  22. spec:
  23. selector:
  24. app: image-update
  25. ports:
  26. - protocol: TCP
  27. port: 10080
  28. targetPort: 80

简单验证一下:

  1. root@k8s-master:~# kubectl apply -f image_update.yaml
  2. deployment.extensions "image-deployment" created
  3. service "nginx-service" created
  1. root@k8s-master:~# kubectl get svc
  2. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  3. nginx-service ClusterIP 10.254.240.225 <none> 10080/TCP 1m
  4. root@k8s-master:~# kubectl get pod -owide
  5. NAME READY STATUS RESTARTS AGE IP NODE
  6. image-deployment-58b646ffb6-d4sl7 1/1 Running 0 1m 10.10.169.131 k8s-node2
  1. root@k8s-master:~# curl http://10.254.240.225:10080
  2. ----------
  3. version: v1
  4. hostname: image-deployment-58b646ffb6-d4sl7

已经正常工作了,并且当前版本是v1

下面介绍修改镜像的方法

(1)修改配置文件

这应该是最常用的方法了

修改配置文件,将nginx:v1改成nginx:v2

  1. root@k8s-master:~# sed -i 's/nginx:v1/nginx:v2/g' image_update.yaml

应用配置文件:

  1. root@k8s-master:~# kubectl apply -f image_update.yaml
  2. deployment.extensions "image-deployment" configured
  3. service "nginx-service" unchanged
  4. root@k8s-master:~# kubectl get pod -owide
  5. NAME READY STATUS RESTARTS AGE IP NODE
  6. image-deployment-55cb946d47-7tzp8 0/1 ContainerCreating 0 16s <none> k8s-node1
  7. image-deployment-58b646ffb6-d4sl7 1/1 Terminating 0 11m 10.10.169.131 k8s-node2

等待一段时间之后,v2版本ready之后

  1. root@k8s-master:~# kubectl get pod -owide
  2. NAME READY STATUS RESTARTS AGE IP NODE
  3. image-deployment-55cb946d47-7tzp8 1/1 Running 0 1m 10.10.36.119 k8s-node1
  4. root@k8s-master:~# curl http://10.254.240.225:10080
  5. ----------
  6. version: v2
  7. hostname: image-deployment-55cb946d47-7tzp8

成功更新为v2

(2)使用patch命令

首先找到deployment:

  1. root@k8s-master:~# kubectl get deploy
  2. NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  3. image-deployment 1 1 1 1 20m

通过patch更新:

  1. root@k8s-master:~# kubectl patch deployment image-deployment --patch '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image":"registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1"}]}}}}'
  2. deployment.extensions "image-deployment" patched

等待一段时间之后:

  1. root@k8s-master:~# curl http://10.254.240.225:10080
  2. ----------
  3. version: v1
  4. hostname: image-deployment-58b646ffb6-hbzk9

通过patch更新之后,镜像版本更新回v1

(3)使用set image命令

使用set image命令将镜像版本更新到v2

  1. root@k8s-master:~# kubectl set image deploy image-deployment *=registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v2
  1. root@k8s-master:~# curl http://10.254.240.225:10080
  2. ----------
  3. version: v2
  4. hostname: image-deployment-55cb946d47-zsdc6

等待一段时间之后,版本又更新到v2

五、小结

● 本文介绍了3种方法更新镜像版本,分别是:配置文件;patch方式;set image方式



至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

原文链接:http://www.cnblogs.com/MrVolleyball/p/10315698.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号