文章目录
一、Kubernetes实现蓝绿部署
1.1 什么是蓝绿部署
蓝绿部署,英文名Blue Green Deployment,是一种可以保证系统在不间断提供服务的情况下上线的部署方式。
蓝绿部署的模型中包含两个集群,就好比海豚的左脑和右脑。
在没有上线的正常情况下,集群A和集群B的代码版本是一致的,并且同时对外提供服务。
在系统升级的时候下,我们首先把一个集群(比如集群A)从负载列表中摘除,进行新版本的部署。集群B仍然继续提供服务。
当集群A升级完毕,我们把负载均衡重新指向集群A,再把集群B从负载列表中摘除,进行新版本的部署。集群A重新提供服务。
1.2 滚动更新
// 创建模块
[root@master ~]# mkdir apache
// 编写 dockerfile文件
[root@master ~]# cat apache/Dockerfile
FROM busybox
RUN mkdir /data && \
echo "hello amu,This is test1" > /data/index.html
ENTRYPOINT ["/bin/httpd","-f","-h","/data"]
#v1版本
// 创建两个不同版本的镜像
[root@master ~]# docker build -t gaofan1225/httpd:v1 apache/
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM busybox
latest: Pulling from library/busybox
3cb635b06aa2: Pull complete
Digest: sha256:b5cfd4befc119a590ca1a81d6bb0fa1fb19f1fbebd0397f25fae164abe1e8a6a
Status: Downloaded newer image for busybox:latest
---> ffe9d497c324
Step 2/3 : RUN mkdir /data && echo "hello amu,This is test1" > /data/index.html
---> Running in 2400a9edc3b7
Removing intermediate container 2400a9edc3b7
---> b596ff036149
Step 3/3 : ENTRYPOINT ["/bin/httpd","-f","-h","/data"]
---> Running in 9bad15d04393
Removing intermediate container 9bad15d04393
---> 21d6bd11fd0d
Successfully built 21d6bd11fd0d
Successfully tagged gaofan1225/httpd:v1
#v2版本
// 创建之前修改dockerfile这一行:echo "hello amu,This is test2" > /data/index.html
[root@master ~]# cat apache/Dockerfile
FROM busybox
RUN mkdir /data && \
echo "hello amu,This is test2" > /data/index.html // 修改这里
ENTRYPOINT ["/bin/httpd","-f","-h","/data"]
[root@master ~]# docker build -t gaofan1225/httpd:v2 apache/
Sending build context to Docker daemon 2.048kB
Step 1/3 : FROM busybox
---> ffe9d497c324
Step 2/3 : RUN mkdir /data && echo "hello amu,This is test2" > /data/index.html
---> Using cache
---> b596ff036149
Step 3/3 : ENTRYPOINT ["/bin/httpd","-f","-h","/data"]
---> Using cache
---> 21d6bd11fd0d
Successfully built 21d6bd11fd0d
Successfully tagged gaofan1225/httpd:v2
// 登录 docker.hub仓库
[root@master ~]# docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: gaofan1225
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
// 上传镜像当 docker.hub仓库
[root@master ~]# docker push gaofan1225/httpd:v1
The push refers to repository [docker.io/gaofan1225/httpd]
88be387e4d70: Pushed
64cac9eaf0da: Mounted from library/busybox
v1: digest: sha256:074bdf0f11e9ee6f4efb2c12f67fdfab4eae8472fae1a75eb5004f3e5884ad3e size: 734
[root@master ~]# docker push gaofan1225/httpd:v2
The push refers to repository [docker.io/gaofan1225/httpd]
88be387e4d70: Pushed
64cac9eaf0da: Layer already exists
v2: digest: sha256:074bdf0f11e9ee6f4efb2c12f67fdfab4eae8472fae1a75eb5004f3e5884ad3e size: 734
// 创建一个httpd容器,使用v1版本的,并复制成三个
[root@master ~]# kubectl create deployment httpd --image gaofan1225/httpd:v1 --replicas 3
deployment.apps/httpd created
[root@master ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
httpd-8556845dfd-gct9q 1/1 Running 0 58s
httpd-8556845dfd-hcqrk 1/1 Running 0 58s
httpd-8556845dfd-zv9qz 1/1 Running 0 58s
// 暴露端口
[root@master ~]