ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kubernetes持续部署Docker Apps

2021-05-28 17:01:41  阅读:157  来源: 互联网

标签:Google Kubernetes image Apps Codeship tag Docker Cloud


 卢文泉 译 分布式实验室

图片

假设已经有了Kubernetes的Deployment(注意我们上篇文章中已经讨论了“Deployment”和Kubernetes中“Deployment”这两个概念的区别),现在我们该如何集成到我们自己的Codeship工作流中呢?最终答案取决于Kubernetes的部署模式,因为Kubernetes官方文档使用Google Cloud作为案例,我也会使用这个部署模式。

集成Codeship到Kubernetes

图片

Codeship开发了相关Google Cloud功能集成到他们的CI平台,方便用户认证与部署新的image到Google Cloud。

但是,在开始前,我们要使用Codeship CLI工具创建加密的环境文件,帮助我们更方便地认证到Google Cloud。Codeship已经有一篇教程关于怎么创建环境文件,所以这里不会详细介绍。但是牢记要设置以下环境变量:

  • a Google Cloud Key - GOOGLE_AUTH_JSON

  • a Google Authentication Email – GOOGLE_AUTH_EMAIL

  • a Google Project ID – GOOGLE_PROJECT_ID

一旦加密环境文件准备好(并且保存环境变量到gc.env.encrypted),下一步我们要在codeship-services.yml中定义Google Cloud服务。

图片

注意需要定义两个服务,而不是一个。这是因为一个服务负责与Google Cloud交互(google_cloud_deployment),另一个服务负责
push Docker image到Google Cloud Registry(gcr_dockercfg)。我们已经为你提供了一个模板(https://github.com/codeship-library/gcr-dockercfg-generator)。

到这里我们已经解决了一半的难题。虽然它创建了必要的服务与Google Cloud交互,它却不能自动地部署新构建的image或者更新一个Kubernetes Deployment。

Push到Google Container Registry

图片

感谢Codeship内建的push步骤,使得部署Docker image到远程的registry非常的平滑。使用gcr_dockercfg服务实现上面的功能,我们需要做的就是在codeshipsteps.yml添加Google Container Registry的URL作为目的地址。

下面非常重要,因为我们要部署应用镜像了,注意把下面的服务名替换成你自己的。

图片

上面的参数名很好地说明它们的含义,它的基本思想是app image会被push到Google Container Registry,使用之前定义好的gcr_dockercfg服务实现认证。

虽然这里更新的image被push到registry,但是会有一个问题。我们没有定义image的tag,Codeship默认tag为latest。本身而言这还不是件糟糕的事,但是为了触发Kubernetes Deployment自动更新,我们要为每次push的image设置不同的tag。

Codeship提供了image_tag参数声明image的tag,Codeship有一个变量列表来帮助我们声明image的参数;但是,为了简化,我们使用当下的Unix时间戳,因为它是独一无二的,无法替代。

有了image_tag,之前的配置就变成下面这样了:

图片

现在,当我们push app image到Google Container Registry时,image的tag会被标记为当下的Unix时间戳。

本篇文章到这里告一段落,记得检查新的教程。


标签:Google,Kubernetes,image,Apps,Codeship,tag,Docker,Cloud
来源: https://blog.51cto.com/u_15127630/2826642

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有