首先需要制作此次实验的基础镜像: 1. Dockerfile的编写:   mkdir dockerfile && cd dockerfile   vim Dockerfile    #注意: Dockerfile的文件名首字母要大写     FROM alpine:latest

MAINTAINER "ZCF zcf@zczf.com"

ENV NGX_DOC_ROOT="/var/lib/nginx/html" HOSTNAME="" IP="" PORT="" INDEX_PAGE=""     RUN apk --no-cache add nginx && mkdir -p ${NGX_DOC_ROOT}/shop /run/nginx

COPY chk.html ${NGX_DOC_ROOT}     COPY entrypoint.sh /bin

CMD ["/usr/sbin/nginx","-g","daemon off;"] #定义启动nginx服务为前端启动, -g:是global段,中修改daemon off;     ENTRYPOINT ["/bin/entrypoint.sh"] #将CMD的命令,作为参数传递给/bin/entrypoint.sh 脚本.

#准备Dockerfile配套的基础文件:     1) 启动容器时,执行的脚本文件: entrypoint.sh       vim entrypoint.sh         #!/bin/sh

echo "

WELCOME TO ${HOSTNAME:-www.zcf.com} WEB SITE | date | hostname | hostname -i | -${YOU_INFO:-v1}- |" > ${NGX_DOC_ROOT}/index.html         cat > /etc/nginx/conf.d/default.conf <

exec "$@"      #它就是来接受CMD传入的参数的.

2 ) 给entrypoint.sh 添加执行权限     chown +x entrypoint.sh

3) 后期做健康检查时,使用的html文件:     echo OK > chk.html

开始制作docker镜像文件:   docker build --tag myapp:v1 ./

将制作好的镜像文件,打上标签,并上传到harbor上。   docker login harbor.zcf.com -u admin -p 123456      #登录harbor   docker tag myapp:v1 harbor.zcf.com/k8s/myapp:v1    #先打上harbor仓库路径   docker push harbor.zcf.com/k8s/myapp:v1        #再上传镜像到harbor上。

为了方便延时恢复发布的效果,我们还需要在制作一个镜像   docker run -d --name ngx1 -e YOU_INFO="DIY-HelloWorld-v2" harbor.zcf.com/k8s/myapp:v1     #说明: -e 是指定要传递给容器的环境变量, 因为我提前在myapp中启动脚本entrypoint.sh中使用的了YOU_INFO这个环境变量,     # 因此,这里我可以直接给容器传递这个变量,来实现修改nginx首页的效果.

docker commit --pause ngx1      #将ngx1暂停,并将当前容器状态,导出为一个新镜像。

docker kill ngx1 && docker rm -fv ngx1 #制作完镜像,就直接删除测试ngx1容器.

root@k8s-n1:~# docker images     REPOSITORY TAG IMAGE ID CREATED SIZE

85355d4af36c 6 seconds ago 7.02MB    #这个就上刚制作的新镜像.

#给刚制作好的镜像打上标签:harbor.zcf.com/k8s/myapp:v2,便于上传到harbor上。   docker tag 85355d4af36c harbor.zcf.com/k8s/myapp:v2

#测试运行镜像,若没有问题,就可以上传到本地harbor上了。

docker run -p 83:80 --rm -d --name ngx1 harbor.zcf.com/k8s/myapp:v2

root@k8s-n1:~# curl http://192.168.111.80:83/    #测试镜像是否修改了nginx的首页为YOU_INFO的内容.

WERCOME TO www.zcf.com WEB SITE | Fri Jul 19 02:31:13 UTC 2019 | ec4f08f831de | 172.17.0.2 | -DIY-HelloWorld-v2- |

docker kill ngx1      #删除ngx1容器.

docker push harbor.zcf.com/k8s/myapp:v2     #最后,上传新镜像到harbor上.

现在已经有了,myapp:v1 和 myapp:v2 那就可以开始K8s的灰度发布测试了。

#先创建三个pod,一个Client,两个Nginx   #1. 先创建 Client     kubectl run client --image=harbor.zcf.com/k8s/alpine:v1 --replicas=1     #注意: alpine:是一个最小化的Linux系统,很多开源镜像站都可以下载到.     kubectl get pods -o wide      #查看Pod的创建详情.

#2. 创建Nginx   kubectl run nginx --image=harbor.zcf.com/k8s/myapp:v1 --port=80 --replicas=2

kubectl get deployment -w      #watch着监控k8s帮我们创建2个pod的过程.

kubectl get pod -o wide

#3. 登录Client,测试访问Nginx   root@k8s-m1:/etc/ansible# kubectl get pod     NAME READY STATUS RESTARTS AGE     client-f5cdb799f-2wsmr 1/1 Running 2 16h     nginx-6d6d8b685-7t7xj 1/1 Running 0 99m     nginx-6d6d8b685-xpx5r 1/1 Running 0 99m

kubectl exec -it client-f5cdb799f-2wsmr sh   / # ip addr   / # for i in seq 1000; do wget -O - -q http://nginx/ ; sleep 1; done   / #    #说明: 若你的kube-dns没有部署成功,这里的nginx可换成Service的IP.   / #    #   kubectl get svc |grep nginx    #这个就是Nginx的Service的集群IP.

#4. 以上测试可看到,已经能够实现负载均衡的效果了。     接着,开始进行灰度发布测试     #更新myapp的镜像为myapp:v2     kubectl set image --help     kubectl set image deployment myapp myapp=harbor.zcf.com/k8s/myapp:v2    #升级myapp的镜像为myapp:v2

#上面执行命令时,就可以看着,另一个终端中Client的访问变化情况,你可以发现,访问逐渐从 v1 变成 DIY-HelloWorld-v2了。

#5.测试动态调整nginx Pod的数量     kubectl scale --replicas=5 deployment nginx    #修改nginx的Pod副本数量为5个.     kubectl get pods

#接着在到Client所在的终端上,查看变化,你会发现,主机名和IP部分开始有更多变化了。

#6. 查看nginx镜像升级状态,是否成功     kubectl rollout status deployment nginx

#7. 再查看myapp的镜像是否已经升级为最新的了     kubectl describe pods nginx-xxx-xx

#8. 将myapp回滚到之前的版本,即v1版本     kubectl rollout undo --help     kubectl rollout undo deployment nginx

测试K8s集群外部访问nginx   #修改 myapp service的类型,让它能被集群外部的客户端访问.     kubectl edit svc myapp       #type: ClusterIP 把它修改为 type:NodePort

#查看svc的更新信息:     kubectl get svc #这里就可以看到,myap service的端口将动态增加一个. 如:80:30020/TCP,注意:30020是随机分配的。            #它的范围是,你在使用kubeasz部署时,设置 NODE_PORT_RANGE="30000-60000"中随机选的.

#接着就可以在集群外部的客户端去访问myapp了     http://Master或Node的物理IP:30020/

k8s灰度更新_k8s slb如何实现灰度发布-问答-阿里云开发者社区-阿里云相关推荐

  1. mysql批量插入跟更新_Mysql批量插入和更新的性能-问答-阿里云开发者社区-阿里云...

    利用Hibernate,连接池使用的是BoneCP,做了一个MySql批量插入和批量更新的Demo,出现了下面两个问题. 1.批量插入.我采用的是原生态的JDBC,每次批量插入60条数据左右(数据量不 ...

  2. slb健康检查方式_SLB健康检查也是“正常”-问答-阿里云开发者社区-阿里云

    负载均衡通过健康检查来判断后端服务器(ECS实例)的业务可用性.健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响. 开启健康检查功能后,当后端某台ECS健康检查出现异常时,负 ...

  3. dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes-阿里云开发者社区

    "没有最好的技术,只有最合适的技术."我想这句话也同样适用于微服务领域,没有最好的服务框架,只有最适合自己的服务改造.在Dubbo的未来规划中,除了保持自身技术上的领先性,关注性能 ...

  4. s2 安恒 漏洞验证工具_Struts2漏洞利用工具下载(更新2017-V1.8版增加S2-045/S2-046)-阿里云开发者社区...

    Struts2漏洞利用工具下载(已更新V1.8版) 2017-03-21: 增加S2-046,官方发布S2-046和S2-045漏洞引发原因一样,只是利用漏洞的位置发生了变化,S2-046方式可能绕过 ...

  5. api k8s restful 创建pods_k8s restful api 访问-阿里云开发者社区

    restful api访问k8s集群,增删改 查信息,做界面二次开发. 需要预先创建访问权限的配置. 下面罗列部分api curl -u admin:admin "https://local ...

  6. k8s 应用更新策略:灰度发布和蓝绿发布

    生产环境如何实现蓝绿部署? 什么是蓝绿部署? 蓝绿部署中,一共有两套系统:一套是正在提供服务系统,标记为"绿色":另一套是准备发布的系统,标记为"蓝色".两套系 ...

  7. mysql灰度更新_灰度发布系统架构设计

    灰度发布的定义 互联网产品需要快速迭代开发上线,又要保证质量,保证刚上线的系统,一旦出现问题可以很快控制影响面,就需要设计一套灰度发布系统. 灰度发布系统的作用,可以根据配置,将用户的流量导到新上线的 ...

  8. Istio最佳实践:在K8s上通过Istio服务网格进行灰度发布

    Istio是什么? Istio是Google继Kubernetes之后的又一开源力作,主要参与的公司包括Google,IBM,Lyft等公司.它提供了完整的非侵入式的微服务治理解决方案,包含微服务的管 ...

  9. mysql灰度更新_灰度发布策略

    前景 近期使用了k8s,目的主要是为了配置灰度环境,其次是降低服务器运维成本,下面简单介绍下灰度的策略 解决方案 1.接口以及网页,最简单粗暴的方法就是直接请求灰度相关的域名 2.在不更换接口域名的前 ...

最新文章

  1. 微软总裁:比尔盖茨人生简介和名言
  2. 项目上线,php的错误信息必须不让其在页面中显示给客户,
  3. 百度智能云大数据全景架构图如何赋能企业数字化
  4. 三十三、五大数据处理的R包
  5. Python——七段数码管绘制
  6. 对于刚开始使用该软件,应该在熟悉基本的markdown语法的基础上,再进行快捷键的使用!...
  7. 文本标点英文对齐_电脑健盘中的所有英文组合意思超值解释建议收藏
  8. Django视图层:URL的反向解析(主路由include之namespace,子路由之name,模板标签{%url%},视图reverse()函数,反向解析示例,URL命名空间
  9. 洛谷 P2241统计方形(数据加强版) 题解
  10. ios定制中间突出的tabBar
  11. java工资管理系统课程设计_java课程设计工资管理系统.doc
  12. 百度之星程序设计大赛输出格式的注意
  13. 微信公众平台接口测试帐号申请
  14. 阿里大数据之路:数据模型篇大总结(收藏)
  15. hdu1348 Wall
  16. android animator 动画
  17. 2022网络搭建国赛题交换机安全配置
  18. AVPro Video 插件在unity中动态播放视频
  19. [经验分享] 分享一波超级良心、好用的趣味网站!
  20. 从零搭建MySQL数据库集群(三):搭建混合集群综合应用

热门文章

  1. oracle独立事务,Oracle中独立事务的处理
  2. 在将varchar值id转换为int时失败_Python—CAN报文转换工具教程
  3. 彻底解决win10自动下载更新的问题
  4. 第一个 PyQt5程序
  5. 小型项目服务器要多少,小型服务器需要什么配置
  6. 2.2.4 操作系统之作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)
  7. c语言快速排序案例,什么是快速排序?C语言数组快速排序例子
  8. php多浏览器支持,测试网站在多个浏览器中的兼容性:MultiBrowser ┆V1.3.1 多国语言版...
  9. 电脑硬件检测_好用的电脑硬件型号有哪些_江西南昌顺同谦科技|电脑||笔记本|...
  10. USB 之四 USB 发展(更名)史 / USB 规范变化