使用 Helm + Kubernetes 部署微服务

前言

在之前的文章中,我提出了轻量型互联网应用架构方式,其中核心思想就是依赖 Kubernetes 实现服务治理。

之后,我尝试在团队中进行落地改造,第一步,就是把目前的服务搬上 Kubernetes。

在这个实践过程中,有些经验可以分享一下。

落地经验

在 Kalengo ,开发隐约(并没有 title 上的区别,但实际工作内容有区分)可以分为两类,一类主要处理业务需求,另一类做基础架构。

考虑到 Kubernetes 的复杂性,如果要做到开发不清楚 Kubernetes 原理和部署流程的情况下也能使用这一套工具,要做到以下这些点:

  1. 测试环境使用 Rancher管理 k8s 集群。
    Rancher 提供了 web 页面,方便开发直接做环境变量修改,镜像变更和部署等操作。

  2. 在 Rancher 中启用 Helm 模板
    把做好的目标发布到内部的 Helm 仓库,然后在配置到 Rancher 商店中,开发如果要新开一套测试环境,直接在 Rancher 商店里点击操作即可。只有模板制作者或运维才需要在本地安装 kubectl 和 helm 等工具

  3. 测试环境使用命名空间实现多租户
    不同开发的测试环境使用命名空间隔离,避免冲突

  4. 内部服务的 service name 要固定
    服务 A 访问服务 B,在没有 k8s 之前,我们是这样做的:
    给服务 B 挂在到负载均衡上:http://b.env.kalengo.cn, 然后在服务 A 通过这个地址访问,不同环境,这个地址不一样,所以就要把地址配置到环境变量中。

但是在 k8s 里,我们可以给服务 B 固定一个 service name:http://b-svc, 服务 A 通过这个地址访问,在任何环境都是这个地址。

总结

做好了 helm 模板之后,可以做到一键部署完整的服务集合。

无论是开发本地集群,测试环境还是阿里云,只需要修改对应环境参数即可。

同时借助于 Rancher 提供的优秀的 Web 管理能力,极大简化了微服务部署和管理难度。