mac上学习k8s系列中helmchart的示例分析
mac上学习k8s系列中helmchart的示例分析,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
类似php 的composer ,go 的go vendor ,linux 的yum ,helm是k8s 应用部署的管理工具。
在mac上如何使用呢?
brew install helm
需要注意的是 helm2 和hlm3 相比变化非常大
helm2 和k8s之间有一层代理tiller,但是从kubernetes 1.6开始默认开启RBAC。这是Kubernetes安全性/企业可用的一个重要特性。但是在RBAC开启的情况下管理及配置Tiller变的非常复杂。为了简化helm的尝试成本我们给出了一个不需要关注安全规则的默认配置。但是,这会导致一些用户意外获得了他们并不需要的权限。并且,管理员/SRE需要学习很多额外的知识才能将Tiller部署的到关注安全的生产环境的多租户K8S集群中并使其正常工作。
在了解了社区成员通常的使用场景后,我们发现Tiller的发布管理系统不需要依靠集群内的Operator来维护状态或充当Helm发布信息的中央枢纽。相反,我们可以简单地从Kubernetes API服务器中获取信息,渲染Charts客户端,并在Kubernetes中存储安装记录。
helm2 需要安装tiller
helm init --client-only --stable-repo-url https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts/
helm3 已经移除了 init 命令
helm 管理的包,被称为chart,下面创建一个chart
%helm create mychart Creating mychart
看下chart里面有哪些东西呢?
% cd mychart% tree.|____Chart.yaml|____charts|____.helmignore|____templates| |____deployment.yaml| |____NOTES.txt| |____ingress.yaml| |____tests| | |____test-connection.yaml| |____service.yaml| |____hpa.yaml| |____serviceaccount.yaml| |_____helpers.tpl|____values.yaml
Templates 目录下 YAML 文件模板(go template语法)填充的值默认都是在 values.yaml 里定义的,比如在 deployment.yaml 中定义的容器镜像:
% cat mychart/values.yaml|grep repository repository: nginx
以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。
编写应用的介绍信息
mychart/Chart.yaml
编写应用具体部署信息
编辑 mychart/values.yaml,它默认会在 Kubernetes 部署一个 Nginx。下面是 mychart 应用的 values.yaml 文件的内容
#检查依赖和模版配置是否正确
% helm lint mychart
==> Linting mychart
[ERROR] Chart.yaml: unable to parse YAML
error converting YAML to JSON: yaml: line 27: could not find expected ':'
[ERROR] templates/: cannot load Chart.yaml: error converting YAML to JSON: yaml: line 27: could not find expected ':'
[ERROR] : unable to load chart
cannot load Chart.yaml: error converting YAML to JSON: yaml: line 27: could not find expected ':'
Error: 1 chart(s) linted, 1 chart(s) failed
% helm lint mychart
==> Linting mychart
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
打包应用
% helm package mychart //将应用打包Successfully packaged chart and saved it to: /Users/xiazemin/go/src/github.com/xiazemin/helm_learn/mychart-0.1.0.tgz
mychart 目录会被打包为一个 mychart-0.1.0.tgz 格式的压缩包,该压缩包会被放到当前目录下。
如果你想看到更详细的输出,可以加上 --debug 参数来查看打包的输出。
离线部署
注意: ~/.kube/config不存在的情况下要用 helm --kubeconfig 指定配置文件
# 方式一
$ helm install demo-test ./mychart
# 可根据不同的配置来install,默认是values.yaml
# helm install demo-test ./mychart -f ./mychart/values-prod.yaml
# 方式二
$ helm install demo-test ./mychart-0.1.0.tgz
$ helm list
# 升级
# $ helm upgrade demo-test ./mychart-0.2.0.tgz
helm install demo-test ./mychartNAME: demo-testLAST DEPLOYED: Sun Apr 4 16:53:14 2021NAMESPACE: defaultSTATUS: deployedREVISION: 1NOTES:1. Get the application URL by running these commands: export POD_NAME=$(kubectl get pods --namespace default -l "app.kubernetes.io/name=mychart,app.kubernetes.io/instance=demo-test" -o jsonpath="{.items[0].metadata.name}") export CONTAINER_PORT=$(kubectl get pod --namespace default $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") echo "Visit http://127.0.0.1:8080 to use your application" kubectl --namespace default port-forward $POD_NAME 8080:$CONTAINER_PORT
% helm listNAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSIONdemo-test default 1 2021-04-04 16:53:14.890414 +0800 CST deployed mychart-0.1.0 1.16.0
将应用发布到 Repository
harbor1.6+ 支持存储 helm charts,这里使用 helm 安装 harbor
这里为了简化测试操作,我关闭了数据卷的挂载并使用的是 NodePort 方式进行访问。
看完上述内容,你们掌握mac上学习k8s系列中helmchart的示例分析的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!