k8s Helm

Helm简述

Helm 是一个软件包管理器,提供了一种『简单的方法来查找、共享和使用为 Kubernetes 而构建的软件』。

Helm 能够用来管理 k8s 上的复杂应用,它提供了比 k8s 更上一层的编排能力。它的编排目标是应用,而 k8s 的编排目标则是更小粒度的服务。

Helm 能够管理 k8s 中的资源依赖,能够重用 chart 包,能够为不同 k8s 集群制定不同的配置。

Helm 本身的处理逻辑很简单,其自身价值并不大,而有价值的是 Helm 的生态圈和 Helm 官方所提供的众多包含有最佳实践的 chart 包。

举个栗子

比如需要部署一个 nginx 服务,那么就需要分别去创建对应的 Pod 资源、Service 资源和 ingress 资源。 通过这种方式来部署几个服务还是可以接受的,但是如果服务数量众多,这种一个一个的操作方式不仅效率低下,而且非常容易出错。能尽量减少人工的操作那么就需要尽量去减少,甚至消除人工操作。k8s 仅仅只是针对资源对象定义了操作,而非对一个服务整体,又或者是一个应用整体进行定义,它是一种细粒度的编排管理。出于这样的原因,k8s 对高层次的服务或应用编排的支持可能就不够了。Helm 的出现就是为了解决这种粗粒度的编排管理的。  

helm 使用注意事项

1、templates目录下只放有用文件,即使a.yaml.old 也会被识别,为了避免报错备份文件不要放在此处。

2、第一次发布错误,第二次以后的更新就会报错  UPGRADE FAILED: "kzf-test" has no deployed releases。解决办法:helm delete --purge $RELEASE_NAME

3、Helm 创建/更新 一个 release 时候指定的namespace 必须提前创建,helm 不能新建namespace 

4、values.yaml 文件中 image  配置pullPolicy

   pullPolicy 有三个参数:   

  Always :总是拉取远程镜像   

    IfNotPresent :如果本地存在镜像就优先使用本地镜像。

    Never:直接不再去拉取镜像了,使用本地的;如果本地不存在就报异常了。

  使用场景一:

 

  当k8s node 节点拉取远程仓库没有权限或者网络问题时就需要在其本地下载镜像,设置为Never或IfNotPresent 允许使用本地镜像。而不是always参数配置。 

  使用场景二:

  当在kubectl 客户端打包一个镜像再推送至远程仓库,第二次打包的tag 与第一次一样,这样同样可以更新镜像文件内容。但是节点上本地镜像是以第一次创建容器时拉取的        镜像,没有更新,所以应该配置为Always ,这样就会拉取远程仓库的新的镜像到本地并以此启动容器。

5、通过helm 创建release 的时候,node 节点查看创建的pod 显示镜像拉取错误。原因:node 节点没有私有仓库的拉取镜像权限,需要配置登录凭证,而且是指定命名空间下。配置命令如下:

kubectl -n k8s-ecoysystem-apps create secret docker-registry kzfsecret \ --docker-server=registry.wuling.com \ 
--docker-username=admin\ --docker-password=<your-pword> \
--docker-email=12341243@qq.com
z

 在 helm 的values.yaml  配置 imagePullSecrets: kzfsecret

上一篇:Helm 从入门到放弃系列


下一篇:k8s学习-Helm