Kubernetes Application Management Based on Helm and Operator

Kubernetes offers a variety of resource description types based on service granularity. Describing an application system, especially microservice architecture system, requires a combination of a large number of Kubernetes resources. For stateful applications, complex operation and maintenance management operations and more domain knowledge are often required. This talk shows you how to use Helm, a community-driven approach to Kubernetes application management, to simplify deployment and management of applications, how to create application templates, build Kubernetes application stores, and how to automate the operation and maintenance of applications using operators.
展开查看详情

1. Kubernetes Application Management Based on Helm and Custom Controller Peng Jiang/ Rancher Labs Inc.

2.Agenda • Helm介绍 • Rancher基于Helm的Catalog实现

3.应用容器化改造及部署 应用容器化 - 完成! K8S集群部署 - 完成!

4.如何管理容器化的应用系统? Deployment ServiceAccount RoleBinding Role PersistentVolumeClaim Secrets Configmap Service Ingress Statefulset ?

5.解决方案? • Kubernetes下的包管理工具(类似 于apt/pip/brew) • 将应用部署包含的多种Kubernetes 资源对象整合成单一对象(Chart) • 模板提供默认部署配置,部署时可 以进行变量替换修改 • 生命周期管理能力,升级、回滚、 版本追踪 • Helm repo预置提供易于部署的多 种应用

6.Helm的发展历史 • 2015/10/15日,Deis公司内部的Hackathon项目 • 最早期的版本使用Python Jinja作为模板语言 • 最初的组件名称:k8splace, kpm, k3(kay cube) • 用于Deis平台内部的工作流安装部署 • 在2015年11月旧金山的Kubecon正式公布 • 前期属于Kubernetes项目之下的子项目 • 2018年6月1日正式成为托管在CNCF之下的独立 项目

7.Helm架构 核心概念:Helm、Tiller、Charts • Helm的核心组件 – Helm Client – Tiller Server • Helm Client是用户使用的CLI工具 – Go语言开发,通过gRPC和Tiller Server交互 – 将Charts和Values发送给Tiller Server进行部署、升级等操作 • Tiller Server – 运行在k8s集群之上 – 与Helm CLI和K8s API Server进行交互 – 管理应用包(chart)的部署实例(release)

8.Helm架构(续)

9.如何安装使用? • 安装部署 – Helm.sh • 使用 – $helm init #安装Tiller – $helm install <chart> #部署应用 – $helm upgrade <release> – $helm delete <release> – …

10.Chart • 应用的定义描述 • 包含 – Metadata – K8S 资源定义 – 文档说明 • 有规范的命名及结构,包括文件和目录名 • 存在chart仓库中,可以保存为tar包进行分发

11.Chart目录结构 • $helm create demoapp

12.Chart.yml - 元数据

13.Templates – 模板 + Go template

14.Values.yml – 配置选项

15.Values.yml – 配置选项 $ helm install --set image.tag=latest ./demoapp $ helm install -f stagingvalues.yaml ./demoapp

16.文档说明 • README.md一般用于 Chart提供的应用及服务介 绍,部署前提条件说明, values.yaml中的变量说明 等。 • NOTES.txt会在部署后显示, 可以用于向chart的使用者 提示使用说明,下一步操 作等信息。

17.应用依赖 • 在requirements.yaml中声 明依赖 • Helm dependency update 或者手工创建、拷贝依赖 chart到charts子目录

18.Chart仓库 • HTTP 服务器 • 提供 index.yaml索引文件和打包的charts – https://kubernetes-charts.storage.googleapis.com/ $ helm serve 例如 https://example.com/charts 的仓库目录结构

19.Release管理 • 在 Kubernetes 集群上运行的 Chart 的实例 – Release.Name – Release.Namespace – Release.IsInstall – Release.IsUpgrade • 对应Kubernetes资源对象的命名 releasename- chartname

20.Release管理 • Release的版本管理 • Helm delete --purge删除release对象

21.Monocular - Helm Web UI • https://github.com/kubernetes-helm/monocular https://github.com/kubeapps/kubeapps

22.Helm的用途总结 • 利用已有的Chart快速部署进行实验 • 创建自定义Chart,方便地在团队间共享 • 便于管理应用的生命周期 • 便于应用的依赖管理和重用 • 将K8S集群作为应用发布协作中心

23.Helm的限制 • 多租户环境下不便于实现权限控制和隔离: – 无内建认证授权机制,应用以Tiller运行使用的权限部署 – Release对象集中存储在Tiller运行的namespace之下

24.Rancher 2.0

25.Architecture

26.Rancher 2.0 Catalog • 基于标准的Helm规范进行增强 • 更好的用户使用体验 • 支持git和http/s server • Rancher负责追踪和管理应用创建的资源对象

27.Catalog Architecture

28. Rancher 2.0 Charts目录结构 Repo: https://github.com/rancher/charts

29.Question.yaml • Go模板语言 • 变量的高级参数定义 – Group – Description – Label – Type – Min/Max – Condition – ……