强调一下:wydevops是一个开源项目,开源地址:wydevops: 支持多语言项目的、可自主扩展的、工程化的DevOps工具icon-default.png?t=N7T8https://gitee.com/tmt_china/wydevops

        上一篇文章《wydevops——微服务直上K8S云就是这么简单(续3)》介绍了wydevops主要支持的几种构建类型,重点讲述了single和double两种构建类型的应用场景、配置和使用。本文继续介绍wydevops对参数的处理机制。

 1. 在项目配置文件中引入外部动态参数

        wydevops将参数分为业务参数和运维参数。在项目配置文件中定义的符合“{{ $.Values.* }}” 或 “{{ .Values.* }}” 样式的变量被称为业务参数;在chart镜像templates目录下*.yaml文件(ConfigMap文件除外)中出现的“{{ $.Values.* }}”或“{{ .Values.* }}”样式的变量都被称为运维参数。

        在实际项目开发过程中,很多微服务都需要对外暴露其依赖的业务参数,以便在安装的时候能动态进行选择和设置。仍然以java-sample项目为例,假设该项目需要在安装时动态修改其依赖的mysql数据库(假设的,内部不依赖),或者需要进行数据源切换等。那么我们就需要在项目的配置文件中定义参数,这里java项目的配置文件就是application-prod.yaml文件,添加变量后其内容如下:

        

        作为开发人员,如果你懂helm模板方面的知识,那你会明白上面的配置的意思是:

引入Chart镜像中values.yaml文件中params.mysql配置节下的四个参数,并且每个参数都给定了默认值(即default后面的字符串)。

最后还引入了Chart镜像中values.yaml文件中params.myName参数的值。

如果你不懂helm模板方面的知识,那你就先记住这个引入外部参数的格式即可。

特别说明:这里为了演示业务参数路径可自定义的特性,在params前缀的后面没有添加deployment[0-9]+这级路径。wydevops强烈推荐使用params.deployment0作为前缀(.Values前缀是helm模板要求的,这里忽略不讨论):使用params.deployment0作前缀,才能正确的作为外部Chart镜像被引入到其他项目的Chart镜像中。强调一点,params参数前缀是必须要存在的。

另外,当微服务发布模式选为docker时,wydevops会替换这些配置文件中定义的变量。

        为了演示参数配置功能的效果,除了按照上述内容修改application-prod.yaml文件外,我们继续对java-sample项目进行如下修改:

打开HelloController文件,按下图内容进行修改并保存,这样可以直接输出我们在部署时为myName参数动态设置的值。

然后把项目中的ci-cd.yaml、ci-cd-config.yaml都删除掉,项目中wydevops-run.sh文件内容如下:

(-B 参数single或double都可以)

最后在wydevops-run.sh所在的目录中打开git bahs命令行窗口并执行:bash wydevops-run.sh

 成功执行后,我们在浏览器中访问:http://localhost/wydevops/v1/sample/hello,此时返回如下内容:

2. 参数配置及其验证

        接下来,我们来模拟安装时动态修改myName参数的值,验证服务是否能正确返回新的参数值。打开项目中新生成的ci-cd-config.yaml文件,其内容截图如下:

       可以看到,在deploy[0].params配置节中多出来了业务参数定义配置。之前我们在项目配置文件中定义的参数被wydevops自动识别并提取保存到了这里。wydevops秉承敏捷的思想:你只需告诉我,你希望在安装时能动态配置的参数即可,wydevops会为你所有相关生成配置。wydevops怎么知道哪些文件是配置文件,需要去提取业务参数呢?大家不要忘记了,前文中介绍参数映射机制时,已经告诉了wydevops哪些文件是配置文件了。

        如果之前没有删除ci-cd-config.yaml文件,此处也会出现deploy[0].params配置节。如果原来就存在该配置节,则会进行合并处理:插入不存在的参数及其值,存在的参数其值保持不变(ci-cd-config.yaml文件中的参数值优先级高于项目配置文件中为参数设置的默认值)。

        从deploy[0].params参数处,我们可以了解到当前微服务的所有业务参数及其默认值。现在我们把上图中, 第一个参数的值修改为wuyi并保存。如下红框部分:

然后删除ci-cd.yaml和ci-cd-config.yaml文件,再次执行:bash wydevops-run.sh。执行完毕后重新在浏览器中访问http://localhost/wydevops/v1/sample/hello,可以看到myName的值已经变成了wuyi。

        上述修改参数值的方式只能说明ci-cd-config.yaml文件中参数值的优先级高于项目中配置文件的参数默认值。

        在实际项目部署过程中,是使用了另一个wydevops的微服务管理组件,用户通过该组件提供的UI界面上传wydevops生成的离线安装包,该组件自动解析离线安装包中的参数并通过界面展示给用户,用户可在界面上对各种参数进行修改,修改完毕后该安装器将使用用户动态设置的参数值完成微服务安装。该组件功能也很强大,实时监控微服务的运行状态、可实时查询微服务输出的日志、可对微服务完成重启、参数调整、卸载等操作。这里就不细说了,后续会由文章专门介绍。

        那么有办法演示在服务安装前动态修改参数的值吗?当然有的,如下:

3.  安装前动态修改参数值

       我们打开wydevops源码目录找到deploy-extend-point.sh, 在文件内容中找到下图红框部分的代码:

        这里可以看到在部署微服务前,wydevops调用了一个功能扩展点:onCustomizedSetParamsBeforeHelmInstall,并且将该功能扩展点的返回值直接拼接在了l_settingParams参数的后面(该参数就是微服务动态参数设置值)。

        特别说明:三级功能扩展点中项目级扩展点成功调用的标志参数名为gShellExecuteResult,当该参数值为true时,才接收了onCustomizedSetParamsBeforeHelmInstall扩展点的返回值。也即此处只接收项目级扩展实现返回的值。

根据前文中介绍的三级功能扩展点的知识,我们可在项目中实现该扩展点的项目级逻辑控制:

        首先在java-sample项目中的wydevops/shell目录中创建名称为onCustomizedSetParamsBeforeHelmInstall.sh的脚本文件。并如下图完成该脚本文件的编写:

        代码中的onCustomizedSetParams方法名称可以随便取,只要与最后一行的方法调用名称一致即可。

接着,修改wydevops-run.sh的内容,如下红框处:

最后,在git bash命令行窗口中再执行一次:bash wydevops-run.sh

成功执行后,我们在窗口中可以看到如下内容:

可以清晰的看到,我们在项目级扩展的参数值被追加在了参数的最后面(参数的最后一次赋的值优先级最高)。还可通过kubectl get cm java-sample -n develop命令,查看ConfigMap中配置参数的具体值,请自行查看。

此时访问http://localhost/wydevops/v1/sample/hello 返回如下内容,可见myName参数的值已经是wuyi了。

4.  运维参数

       项目开发人员一般不会关注或改动运维参数,这些参数一般都是由语言级团队Leader配置在语言级模板文件(_ci-cd-template.yaml)中。我们可以打开wydevops源码中/script/templates/config/java目录中的_ci-cd-template.yaml文件,找到下图中的部分(对照行号查找):

        这里是chart[0].params的配置内容。这个配置就是为chart[0]这个Chart镜像配置的运维参数。

这些参数配置了微服务可使用和最大可使用的CPU和内存资源额度。

        开发人员也可在ci-cd-config.yaml文件中同样定义chart[0].params参数对其进行覆盖(不要忘记了同时配置chart[0].name参数,wydevops对比name参数决定是执行覆盖还是插入)。内容如下图:

        除CPU和内存资源配置外,其他的运维参数,也可直接在ci-cd-config.yaml文件定义并覆盖。例如,上图中的对replicaCount参数值的覆盖定义。同样的,不要忘了定义name属性。wydevops利用其对yaml文件强大的读写能力,可完成这些yaml文件中参数值的覆盖或合并。        

最后综述一下:

  • 开发人员在业务配置文件中可引入外部动态参数为配置文件中的参数赋值。
  • wydevops很人性化,会自动从配置文件中提取开发人员配置的业务参数,并将其插入或合并到ci-cd-config.yaml文件中deploy[?].params参数中。便于开发人员了解或修改本地测试时使用的参数值。
  • 上面还具体讲述了一次项目级扩展点的实现。
  • 说明了运维参数的如何在ci-cd-config.yaml文件中进行配置。
  • wydevops对yaml文件的读写操作是专门进行了设计和优化的,全网唯一。

        今天就写道这里了,后续文章将介绍如何在当前Chart镜像中引入外部Chart镜像中的服务(单chart打包多个服务),以及在当前Chart镜像中的容器中如何引入外部Chart镜像中主服务的主容器(第chart[0].deployments[0].containers[0])?

原创不易,期待你的关注和收藏。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐