对于容器编排工具k8s来说,你可以使用它规定的yaml格式的脚本,使用客户端kubectl来与k8s进行通讯,将你定义好的yaml部署脚本应用到k8s集群上,而这对yaml脚本一般来说都是很像的,就是说,你需要反复的使用同样结构的代码,这对于开发人员来说不是一个好的信号,所以helm出现了,它是一种模板化的部署工具,你定义好模板之后,把变量的对象放在values.yaml里就可以了。

引起的问题

在使用helm进行部署时出现了一个问题,使用镜像时习惯的使用了latest这个版本,也就是最新版本,在使用helm进行部署时,对于相同版本号的镜像来说,它对于的pod居然没有从新编排,这个问题直接影响了整个部署的方式,在jenkins项目部署之后,还需要手动进行pod的部署,这显然是不能接受的,最后在helm里打算使用docker具体的镜像版本号。

使用步骤

  1. jenkins从gitlab上拉取项目源代码
  2. 编译项目,测试项目
  3. 打包项目成为镜像,镜像版本使用jenkins的TagId,它是当前任务的版本,我们可以直接用
  4. 上传镜像到私有仓库harbor里
  5. 拉取Helm Chart仓库代码,这个仓库里存储所有服务需要的Charts信息
  6. 使用sed命令将当前TagId写入Charts到values.yaml文件的对应服务镜像版本的位置,使用了yaml的锚点和引用功能
  7. 使用helm package打包你的服务
  8. 使用helm upgrade升级你的现有服务
  9. 将charts仓库的变化保存,然后提交到gitlab里
  10. 整个部署过程完毕!

sed命令小技巧

使用sed命令可以在文档中查找某些字符,并且在这些字符所在行的下一行去插入新的内容

sh """
sed -i "/${config.imageName}-imageTag/{n;d}" ${WORKSPACE}/charts/${config.namespace}/values.yaml
sed -i "/${config.imageName}-imageTag/a \\ imageTag: $config.tagId" ${WORKSPACE}/charts/${config.namespace}/values.yaml
"""

上面代码中,我们对values.yaml里的某个服务名后缀是-imageTag的内容的下一行进行删除;并且在它的下一行插入新的内容imageTag:版本号;这一行请注意,我们使用了两个\,它是一个转义付符号,它会在imageTag前面插入一些空格。

yaml里的锚点和引用

你可以为values.yaml里添加一个引用片断,然后在values.yaml其它位置使用它们,即它类似于先定义一些内容,然后在一些位置插入它们。

hello-world-imageTag: &helloworldImageTagId
imageTag: 1
appList:
- name: hello-world
port: 9001
hasVM: true
<<: *helloworldImageTagId

上面的代码,在hasVM这行下面,就里引用我们的imageTag: 1这行的内容,而helloworldImageTagId是我们定义的别名,在引用的位置需要使用这个别名。

这篇文章对于正在使用jenkins,k8s部署你的微服务的同事来说,是非常不错的文章!

k8s~helm镜像版本永远不要用latest的更多相关文章

  1. 如何使用vs将asp.net core项目添加容器支持并发布docker镜像到私有dockerhub和添加k8s/helm管理

    这篇文章介绍一下,如何使用VS2017给asp.net core添加容器支持,并发布镜像到私有docker hub,然后用chart管理容器镜像的操作流程. 话不多说,just do it. 新建项目 ...

  2. 更新k8s镜像版本的三种方式

    一.知识准备 更新镜像版本是在k8s日常使用中非常常见的一种操作,本文主要介绍更新介绍的三种方法 二.环境准备 组件 版本 OS Ubuntu 18.04.1 LTS docker 18.06.0-c ...

  3. K8S+GitLab-自动化分布式部署ASP.NET Core(三) 更新镜像版本并部署到K8S上

    一.介绍 前一篇,介绍了ASP.NET Core部署到K8S上,下面介绍我们在发布新一版本中怎么通过Gitlab CI自动给镜像打版本并部署到K8S上. 二.我们通过GitLab CI/CD 变量 不 ...

  4. 入门 - k8s滚动更新部署中的镜像版本 (七)

    目标 使用 kubectl 执行 Rolling Update(滚动更新) 更新应用程序 用户期望应用程序始终可用,为此开发者/运维者在更新应用程序时要分多次完成.在 Kubernetes 中,这是通 ...

  5. [转帖]k8s国内镜像

    k8s国内镜像 https://www.jianshu.com/p/b9fecdb5e3a7 wu_sphinx 关注 2019.05.06 20:43* 字数 155 阅读 628评论 0喜欢 0 ...

  6. 重磅!K8S 1.18版本将内置支持SideCar容器。

    作者:justmine 头条号:大数据与云原生 微信公众号:大数据与云原生 创作不易,在满足创作共用版权协议的基础上可以转载,但请以超链接形式注明出处. 为了方便阅读,微信公众号已按分类排版,后续的文 ...

  7. 【学习随手记】kubeadm 查看创建集群需要的镜像版本,附拉取镜像脚本

    查看创建集群需要的镜像版本 kubeadm config images list [--kubernetes-version <version>] 国内拉取镜像脚本 一般而言,直接使用ku ...

  8. CentOS找不到想要的镜像版本?

    CentOS找不到想要的镜像版本? 情景: 当学习Linux时,一般教程不是最新的,教程里的CentOS版本也就不是最新的,这个时候, 在看着教程练习的时候就需要安装指定的版本,避免因为版本不同造成困 ...

  9. 阿里云k8s构建镜像时设置版本号用于版本回滚

    jenkins 构建配置参数化构建过程 构建  执行 shell  , 将版本号参数传入 脚本 脚本push  带版本号的镜像到阿里云镜像仓库 #!/bin/bash #获取参数 while geto ...

随机推荐

  1. Block详解二(底层分析)

    Block专辑: Block讲解一 MRC-block与ARC-block Block详解一(底层分析) 今天讲述Block的最后一篇,后两篇仅仅是加深1,2篇的理解,废话少说,开始讲解! __blo ...

  2. shell编程之循环语句

    for #! /bin/sh for FRUIT in apple banana pear; do echo "I like $FRUIT" done while #! /bin/ ...

  3. C# 基础知识系列- 3 集合数组

    简单的介绍一下集合,通俗来讲就是用来保管多个数据的方案.比如说我们是一个公司的仓库管理,公司有一堆货物需要管理,有同类的,有不同类的,总而言之就是很多.很乱.我们对照集合的概念对仓库进行管理的话,那么 ...

  4. dijkstra模板题 洛谷1339 邻接图建边

    题目链接:https://www.luogu.com.cn/problem/P1339 朴素dijkstra算法的复杂度是O(n^2),用堆优化的dijkstra复杂度是O(nlogn)的.在本题中前 ...

  5. [尊老爱幼] Queen

    You are given a rooted tree with vertices numerated from 1 to n . A tree is a connected graph withou ...

  6. 六、深浅拷贝与while循环

    一.深浅拷贝 3.1 浅copy: 浅copy是把原列表第一层的内存地址不加区分完全copy一份给新列表 用法: list1=[ 'egon', 'lxx', [1,2] ] list2=list1. ...

  7. 在Windows中安装OpenCV-Python |四

    目标 在本教程中 我们将学习在你的Windows系统中设置OpenCV-Python. 下面的步骤在装有Visual Studio 2010和Visual Studio 2012的Windows 7- ...

  8. PyTorch1.2.0版本来啦!居然还有全套视频!让你快速熟练掌握深度学习框架!

    [翻到文末, 还能让你看尽CV和NLP完整技术路径以及前沿+经典论文篇目,助你构建深度学习知识框架] 今年8月!PyTorch 1.2.0 版本来啦!! 据我们了解,在学术领域,特别是CV/NLP方向 ...

  9. 最小生成树(次小生成树)(最小生成树不唯一) 模板:Kruskal算法和 Prim算法

    Kruskal模板:按照边权排序,开始从最小边生成树 #include<algorithm> #include<stdio.h> #include<string.h> ...

  10. PHP一致性hash

    PHP提供了两种比较两个变量的方法: 松散比较使用 == or != : 两个变量都具有“相同的值”. 严格比较 === or !== : 两个变量都具有“相同的类型和相同的值”. 类型杂耍 真实陈述 ...