K8S最终管理的对象是Docker容器,生产环境中,Docker容器经常会更新数据和内容
将更新的内容通过kubectl cp或者docker cp至新的容器将新的容器数据Commit提交为新镜像通过Dockerfile方案制作新的镜像docker cp方式
测试页面内容 [root@localhost ~]# cat index.html <h1>Jeff Test</h1> 在Node上执行 [root@localhost ~]# for i in `docker ps -a | grep nginx | grep -v pod | cut -d " " -f 1`;do docker cp index.html $i:/usr/share/nginx/html/;done 修改结果kubectl 方式 4. 测试页面内容
[root@localhost ~]# cat index.html <hr> <h1>Jeff </h1> <hr> 在Master上执行 [root@localhost ~]# for i in `kubectl get pods --namespace default |grep nginx | awk '{print "default/"$1}'`;do kubectl cp index.html $i:/usr/share/nginx/html/;done 修改结果回到目录
访问web,查看是否上传成功 http://192.168.197.11:5000/v2/_catalog
修改部署回到目录
基于Dockerfile方案跟Docker commit类似的操作,更新方法完全一样
基于Kubectl命令行更新 将nginx-v1部署应用的镜像修改为最新的镜像名称:nginx:v1,命令如下:
[root@localhost ~]# kubectl get deployments -n default NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE nginx-v1 2 2 2 2 2h [root@localhost ~]# kubectl -n default set image deployments/nginx-v1 nginx-v1=192.168.197.11:5000/nginx:v1回滚
[root@localhost ~]# kubectl -n default rollout undo deployments/nginx-v1查看回滚是否成功
[root@localhost ~]# kubectl -n default rollout status deployments/nginx-v1查看更新的版本信息
[root@localhost ~]# kubectl rollout history deploy/nginx-v1查看具体某个版本信息
[root@localhost ~]# kubectl rollout history deploy/nginx-v1 --revision=4 deployments "nginx-v1" with revision #4 Labels: app=nginx-v1 pod-template-hash=44819141 Containers: nginx-v1: Image: docker.io/nginx Port: Volume Mounts: <none> Environment Variables: <none> No volumes.回滚到某个具体的版本
[root@localhost ~]# kubectl -n default rollout undo deployment/nginx-v1 --to-revision=4 deployment "nginx-v1" rolled back回到目录