Helm 通过模板创建 Kubernetes 能够理解的 YAML 格式的资源配置文件,我们将通过例子来学习如何使用模板. 以 templates/secrets.yaml 为例: 从结构看,文件的内容非常像 Secret 配置,只是大部分属性值变成了{{ xxx }}.这些 {{ xxx }} 实际上是模板的语法.Helm 采用了 Go 语言的模板来编写 chart.Go 模板非常强大,支持变量.对象.函数.流控制等功能.下面我们通过解析 templates/secrets.yaml 快速学习…
chart 是 Helm 的应用打包格式.chart 由一系列文件组成,这些文件描述了 Kubernetes 部署应用时所需要的资源,比如 Service.Deployment.PersistentVolumeClaim.Secret.ConfigMap 等. 单个的 chart 可以非常简单,只用于部署一个服务,比如 Memcached:chart 也可以很复杂,部署整个应用,比如包含 HTTP Servers. Database.消息中间件.cache 等. chart 将这些文件放置在预定…
学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记录在 values.yaml 和 README.md 中.除了下载源文件查看,执行 helm inspect values 可能是更方便的方法. 输出的实际上是 values.yaml 的内容.阅读注释就可以知道 MySQL chart 支持哪些参数,安装之前需要做哪些准备.其中有一部分是关于存储的…
Kubernetes 给我们提供了大量官方 chart,不过要部署微服务应用,还是需要开发自己的 chart,下面就来实践这个主题. 创建 chart 执行 helm create mychart 的命令创建 chart mychart: Helm 会帮我们创建目录 mychart,并生成了各类 chart 文件.这样我们就可以在此基础上开发自己的 chart 了. 新建的 chart 默认包含一个 nginx 应用示例,values.yaml 内容如下: 开发时建议大家参考官方 chart 中…
安装 chart 当我们觉得准备就绪,就可以安装 chart,Helm 支持四种安装方法: 安装仓库中的 chart,例如:helm install stable/nginx 通过 tar 包安装,例如:helm install ./nginx-1.2.3.tgz 通过 chart 本地目录安装,例如:helm install ./nginx 通过 URL 安装,例如:helm install https://example.com/charts/nginx-1.2.3.tgz 这里我们使用本地…
在实践之前,我们先来看看 Helm 的架构. Helm 有两个重要的概念:chart 和 release. chart 是创建一个应用的信息集合,包括各种 Kubernetes 对象的配置模板.参数定义.依赖关系.文档说明等.chart 是应用部署的自包含逻辑单元.可以将 chart 想象成 apt.yum 中的软件安装包. release 是 chart 的运行实例,代表了一个正在运行的应用.当 chart 被安装到 Kubernetes 集群,就生成一个 release.chart 能够多次…
命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建,比如: kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2 在命令行中通过参数指定资源的属性. 2. 通过配置文件和 kubectl apply 创建,要完成前面同样的工作,可执行命令: kubectl apply -f nginx.yml nginx.yml 的内容为: 资源的属性写在配置文件中,文件格式为 YAML…
既然要用 YAML 配置文件部署应用,现在就很有必要了解一下 Deployment 的配置格式,其他 Controller(比如 DaemonSet)非常类似. 还是以 nginx-deployment 为例,配置文件如下图所示: ① apiVersion 是当前配置格式的版本.② kind 是要创建的资源类型,这里是 Deployment.③ metadata 是该资源的元数据,name 是必需的元数据项.④ spec 部分是该 Deployment 的规格说明.⑤ replicas 指明副本…
默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Node:或者 Pod 需要 GPU,需要运行在配置了 GPU 的节点上. Kubernetes 是通过 label 来实现这个功能的. label 是 key-value 对,各种资源都可以设置 label,灵活添加各种自定义属性.比如执行如下命令标注 k8s-node1 是配置了 SSD 的节点. k…
Linux 中有 cron 程序定时执行任务,Kubernetes 的 CronJob 提供了类似的功能,可以定时执行 Job.CronJob 配置文件示例如下: ① batch/v2alpha1 是当前 CronJob 的 apiVersion. ② 指明当前资源的类型为 CronJob. ③ schedule 指定什么时候运行 Job,其格式与 Linux cron 一致.这里 */1 * * * * 的含义是每一分钟启动一次. ④ jobTemplate 定义 Job 的模板,格式与前面…