更新k8s镜像版本的三种方式

作者: wilsonchai | 来源:发表于2019-03-25 10:06 被阅读10次

一、知识准备

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

二、环境准备

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

三、准备镜像

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

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

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

root@k8s-master:~# docker run -d --rm -p 10080:80 nginx:v1
e88097841c5feef92e4285a2448b943934ade5d86412946bc8d86e262f80a050
root@k8s-master:~# curl http://127.0.0.1:10080
----------
version: v1
hostname: f5189a5d3ad3

四、更新镜像的三种方法

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

root@k8s-master:~# more image_update.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: image-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: image-update
    spec:
      containers:
      - name: nginx
        image: registry.cn-beijing.aliyuncs.com/mrvolleyball/nginx:v1
        imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
    selector:
      app: image-update
    ports:
    - protocol: TCP
      port: 10080
      targetPort: 80

简单验证一下:

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

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

下面介绍修改镜像的方法

(1)修改配置文件

这应该是最常用的方法了

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

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

应用配置文件:

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

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

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

成功更新为v2

(2)使用patch命令

首先找到deployment:

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

通过patch更新:

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

等待一段时间之后:

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

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

(3)使用set image命令

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

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

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

五、小结

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


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

相关文章

  • 2021-04-26周一,拉取镜像升级

    先看了下博客更新k8s镜像版本的三种方式https://www.jianshu.com/p/a4cedd56989...

  • 更新k8s镜像版本的三种方式

    一、知识准备 更新镜像版本是在k8s日常使用中非常常见的一种操作,本文主要介绍更新介绍的三种方法 二、环境准备 三...

  • k8s镜像更新方式

    镜像更新 kubernetes集群中镜像有三种更新方式,无论哪一种都属于滚动式更新,在更新过程中服务不会中断 编辑...

  • 打造专属的docker开发环境(三)-centos安装vsftp

    我们在上一个镜像v1版本中加入vsftpd,作为v2版本。 vsftpd登录的三种模式我们登录FTP有三种方式,匿...

  • Kubernetes部署(v1.5.3)

    由于K8S更新较快, 不建议使用该版本部署, 大家可以使用1.6.1或更高版本 最近k8s很火, k8s即kube...

  • Docker常用命令

    获取镜像的三种方式 从dockerhub获取镜像 本地镜像导出、导入 私有docker仓库 查看镜像 删除镜像 镜...

  • [资源] [k8s] Kubernetes 镜像仓库维护

    k8s 镜像仓库维护 在学习过程中, 许多小伙伴因为国内情况, 镜像获取不到指定版本. 因此, 决定从1.14.1...

  • Cocoapods安装

    1、检查或更新gem版本,使用淘宝提供的国内镜像源 a、添加淘宝镜像源 b、更新gemsudo gem updat...

  • macos docker 一直处于 kubernetes sta

    文章目录 背景说明 版本信息 问题现象 尝试方案一 git下载K8s版本对应的镜像 方案二 删除配置文件,重置仓库...

  • harbor使用

    登录 查询镜像 获取镜像 上传镜像 k8s 使用私有harbor

网友评论

    本文标题:更新k8s镜像版本的三种方式

    本文链接:https://www.haomeiwen.com/subject/vtzmvqtx.html