写点什么

helm 实战之开发 Chart

作者:程序员欣宸
  • 2022 年 8 月 30 日
    广东
  • 本文字数:2175 字

    阅读完需:约 7 分钟

helm实战之开发Chart

欢迎访问我的 GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 在 Kubernetes 环境中使用 Helm 来管理应用颇为方便,今天一起来开发一个 Chart,这样的实战可加深对 Chart 的理解,今后在使用第三方的 Chart 时,不论学习还是修改都会更加得心应手;

环境信息

  • 实战环境的版本信息如下,请确保以下软件都已运行正常:


  1. 操作系统 :CentOS Linux release 7.6.1810

  2. Kubernetes:1.13

  3. Helm:2.12.3

创建 Chart

  • 执行命令 helm create tomcat ,会创建一个 tomcat 目录,里面的内容如下:


[root@master ~]# tree tomcattomcat├── charts├── Chart.yaml├── templates│   ├── deployment.yaml│   ├── _helpers.tpl│   ├── ingress.yaml│   ├── NOTES.txt│   ├── service.yaml│   └── tests│       └── test-connection.yaml└── values.yaml
3 directories, 8 files
复制代码


  • template 目录中的 deployment.yaml、service.yaml 这些文件的内容,和我们平时创建 pod 和 service 时编写的 yaml 文件类似,不同之处在于很多配置的值并非固定,而是用变量代替了,以 deployment.yaml 中的镜像名称为例,如下图绿框所示:


  • 上图绿框中的变量是在 tomcat/values.yaml 中定义的,如下图红框所示,只要我们修改了其中的内容,也就完成了 depoloyment.yaml 中镜像的设置:


  • 目前创建 Chart 已经成功,接下来就是修改 deployment.yaml 和 vlues.yaml,改成 tomcat 所需的内容;

修改配置

  • 修改 tomcat/values.yaml 的内容,包括 Pod 镜像和版本、Service 的类型,如下图的两个红框中的内容:


  • 此次实战并没有准备好存活探针和就绪探针,所以这两个配置也要去掉,否则会导致创建 Kubernetes 判定创建 Pod 失败,修改方法是将 deployment.yaml 中如下图红框中的内容全部删除:


  • 修改 template/deployment.yaml 中的内容,将端口从 80 改为 8080,如下图红框所示:


  • 至此,修改完毕,接下来尝试部署到 Kubernetes 环境;

检查和部署

  • 在 tomcat 文件夹所在目录,输入以下命令,可以看到将 values.yaml 的值填写到 deployment.yaml、service.yaml 后的最终效果:


helm install --dry-run --debug tomcat
复制代码


  • 得到输出如下:


[root@master ~]# helm install --dry-run --debug tomcat[debug] Created tunnel using local port: '42163'
[debug] SERVER: "127.0.0.1:42163"
[debug] Original chart version: ""[debug] CHART PATH: /root/tomcat
NAME: virtuous-gorillaREVISION: 1RELEASED: Sat Mar 23 14:52:35 2019CHART: tomcat-0.1.0USER-SUPPLIED VALUES:{}
COMPUTED VALUES:affinity: {}fullnameOverride: ""image: pullPolicy: IfNotPresent repository: tomcat tag: latestingress: annotations: {} enabled: false hosts: - chart-example.local paths: [] tls: []nameOverride: ""nodeSelector: {}replicaCount: 1resources: {}service: port: 80 type: NodePorttolerations: []...
复制代码


  • 篇幅所限只展示了一部分输出,可见设置的值已经生效;

  • 执行命令 helm install tomcat ,即可部署当前的 Chart 到 Kubernetes 环境,控制台输出如下:


[root@master ~]# helm install tomcatNAME:   wistful-condorLAST DEPLOYED: Sat Mar 23 14:54:27 2019NAMESPACE: defaultSTATUS: DEPLOYED
RESOURCES:==> v1/ServiceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEwistful-condor-tomcat NodePort 10.108.155.239 <none> 80:32190/TCP 0s
==> v1/DeploymentNAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEwistful-condor-tomcat 1 1 1 0 0s
==> v1/Pod(related)NAME READY STATUS RESTARTS AGEwistful-condor-tomcat-7c784699b8-zl7mm 0/1 ContainerCreating 0 0s

NOTES:1. Get the application URL by running these commands: export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services wistful-condor-tomcat) export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}") echo http://$NODE_IP:$NODE_PORT
复制代码


  • 根据控制台的提示,我们输入以下命令,即可获取到外部访问此服务的地址:


export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services wistful-condor-tomcat)export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")echo http://$NODE_IP:$NODE_PORT
复制代码


  • 我这里得到的地址是:http://192.168.182.130:31768/

  • 在浏览器输入上述地址,可见访问 tomcat 服务成功,如下图:


  • 自定义 Chart 开发和验证都完成了,执行命令 helm package tomcat 即可将整个 Chart 的配置文件打包,方便在其他环境安装部署;

  • 至此 helm 开发 Chart 实战就全部完成了,经历了此番实战,今后学习中如遇到公共仓库有不错的 Chart,可用 helm fetch xxx

  • 将 Chart 包下载到本地来研究学习源码和配置,也可自己修改后再在本地 install;

欢迎关注 InfoQ:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...


发布于: 刚刚阅读数: 2
用户头像

搜索"程序员欣宸",一起畅游Java宇宙 2018.04.19 加入

前腾讯、前阿里员工,从事Java后台工作,对Docker和Kubernetes充满热爱,所有文章均为作者原创,个人Github:https://github.com/zq2599/blog_demos

评论

发布
暂无评论
helm实战之开发Chart_Kubernetes_程序员欣宸_InfoQ写作社区