使用阿里云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镜像仓库
3、创建CodePipeline项目执行构建
4、创建Kubernates应用部署
CodePipeline支持通过deployment.yaml部署文件部署,但比较麻烦,这里我们就直接通过k8s管理后台手动创建无状态应用部署,并将CodePipeline中部署Kubernetes(新)步骤删除掉
通过以上流程,点击立即构建或者push代码更新到托管平台即可自动触发docker镜像构建,通过这种方式,可以直接将代码git clone到镜像内部,因为每次更新代码之后都会自动触发镜像构建,构建完成之后自动触发k8s应用部署。