Bootstrap

企业级云原生应用交付及管理系列 - Helm 调试及维护 (二)

大家好,我是张晋涛。

在上一篇 《企业级云原生应用交付及管理系列 - Helm 基础 (一)》 中,我主要介绍了 Helm 的诞生及其发展,包括 Helm 各个版本的情况及社区的发展。

此外,还介绍了 Helm 的架构,概念,插件以及其基本用法。

本节我将默认读者已经有一定的 Helm 和 Kubernetes 基础, 介绍 Helm 的一些高阶特性和用法, 如果有不清楚的概念可以看我的历史文章。

准备

这里我们使用 helm create 命令来创建一个 Helm chart。执行完成后,会在当前目录创建一个新的目录,其中包含了 Helm 预先创建的一个模板。本文中的后续内容均会基于该 Helm chart 完成。

tao@moelove:~$ helm create moelove
Creating moelove                
tao@moelove:~$ ls                    
moelove
tao@moelove:~$ tree
.
└── moelove
    ├── Chart.yaml
    ├── charts
    ├── templates
    │   ├── NOTES.txt
    │   ├── _helpers.tpl
    │   ├── deployment.yaml
    │   ├── hpa.yaml
    │   ├── ingress.yaml
    │   ├── service.yaml
    │   ├── serviceaccount.yaml
    │   └── tests
    │       └── test-connection.yaml
    └── values.yaml

4 directories, 10 files

Debug

在我们去创建/维护,或者使用 Helm chart 进行应用部署的时候,有时候可能会遇到一些错误。那么如何对 Helm chart 进行 debug 呢?这是很多人都会遇到的一个问题。

Helm chart 是通过 YAML 进行维护的,而 YAML 是缩进/语法敏感的。假如你的缩进或者语法有问题,都将会导致报错。最简单的检查办法是使用 helm lint 进行检查。

比如我们进行如下修改:

diff --git a/values.yaml b/values.yaml
index 4a8b237..696a77d 100644
--- a/values.yaml
+++ b/values.yaml
@@ -5,7 +5,7 @@
 replicaCount: 1
 
 image:
-  repository: nginx
+ repository: nginx
   pullPolicy: IfNotPresent
   # Overrides the image tag whose default is the chart appVersion.
   tag: ""

可以看到,我们将 image.repository 的缩进搞错了。这时进行安装将看到如下报错:

tao@moelove:~$ helm install foo .
Error: INSTALLATION FAILE
;