![b34cfa2ae4468e587b1b5a84af36d886.png](https://i-blog.csdnimg.cn/blog_migrate/3c609a8a6529fd31af9994b3ee43bd47.jpeg)
使用阿里云Kubernates集群已经快1年,稳定性还是可以保证,折腾了几次,反复重启工作节点,K8S还是能自动将应用调度到其他节点,感觉非常稳定。
原本想着让多个docker容器共享一套代码,将Session保存到redis上,实现无状态化,因此将代码放NAS,让应用容器挂载到NAS上,但Laravel的磁盘IO太惨不忍睹了,即使NAS选择SSD,加载缓存页面依然速度感人,竟然需要2、3秒,无法忍受啊,用clockwork查看服务器端发现大部分时间消耗在磁盘IO上,因此只能折中将Laravel代码部署到每个工作节点,让docker容器挂在宿主机相应代码目录,速度一下就起来了。
今天无意中看到jenkins持续集成、持续部署的技术文档,并且阿里云有现成的解决方案----CodePipeline:阿里云CodePipeline是兼容Jenkins标准的、提供快速可靠的持续集成与持续交付服务。基于容器技术和阿里云基础服务架构,提供稳定和安全的代码/Docker编译构建,测试,扫描和部署的工具服务,并提供Pipeline As Code的编码级配置模式,满足应用程序和基础设施快速可靠的交付和更新。
即通过CodePipeline能自动将git服务器上的代码经过构建docker镜像自动部署到Kubernates 集群中,急不可耐的试了下,果然爽歪歪,可直接将代码部署到镜像中,并且每次更新代码都会触发自动构建新镜像并部署到K8S集群中,构建流程如下:
1、托管代码
将Laravel应用代码代码托管到码云(http://gitee.com)、阿里Code(http://code.aliyun.com)等,push提交代码的时候通过webhooks绑定触发链接触发重新构建docker镜像;
2、创建docker镜像仓库
![bb709e6b492c4d00e2b07b0439564569.png](https://i-blog.csdnimg.cn/blog_migrate/41f285a76dfad3cb0b68a2dc4d9f4c7d.jpeg)
![7cf92dbe6f94c9428691278835e282ca.png](https://i-blog.csdnimg.cn/blog_migrate/df1c77c3d5c753bafec776649a72a111.jpeg)
3、创建CodePipeline项目执行构建
![be84cf50cfaec11e91cda5bcef4ac29a.png](https://i-blog.csdnimg.cn/blog_migrate/1e8964115f5da5b6b4cab8406842114a.jpeg)
![4425793659c27eb952aee6071b65b265.png](https://i-blog.csdnimg.cn/blog_migrate/90edb56ecd1ba247dcd9b55a3bdceb6a.jpeg)
![e3e9fffb0012089bf1a6fa0f1b4f778c.png](https://i-blog.csdnimg.cn/blog_migrate/de66d477a51e2ce1fb8a0bd1b3b5a5e3.jpeg)
![c1483789b9e78dc6f4220bad9f361cd0.png](https://i-blog.csdnimg.cn/blog_migrate/89bddc3112ea724ee2f5d40bea22e53c.jpeg)
![567e10f314deda5c42dbbf8d9080caa0.png](https://i-blog.csdnimg.cn/blog_migrate/0d9d33fa68c6dd3ba60e48e62d492e13.jpeg)
![ed3da3f38cde9788a65043843835d36e.png](https://i-blog.csdnimg.cn/blog_migrate/08419fb6b1582eb0363597b9ea62be20.jpeg)
4、创建Kubernates应用部署
CodePipeline支持通过deployment.yaml部署文件部署,但比较麻烦,这里我们就直接通过k8s管理后台手动创建无状态应用部署,并将CodePipeline中部署Kubernetes(新)步骤删除掉
![583924c182a3880c2e1f214351bdebe0.png](https://i-blog.csdnimg.cn/blog_migrate/c077a132553b0d0007bead3052d13ffd.jpeg)
![d9bcaabf3013e25f3e92649d3c0d0d41.png](https://i-blog.csdnimg.cn/blog_migrate/8e5662e9ec7bcdf683825f3f4d97027e.jpeg)
![32ae3a289186858a2f1ff8af6572d148.png](https://i-blog.csdnimg.cn/blog_migrate/6a9e42d78a183304910414bc42a7921f.jpeg)
通过以上流程,点击立即构建或者push代码更新到托管平台即可自动触发docker镜像构建,通过这种方式,可以直接将代码git clone到镜像内部,因为每次更新代码之后都会自动触发镜像构建,构建完成之后自动触发k8s应用部署。