背景

helm 其实就是一个模板引擎,就跟以前写php时候有很多模板标签会根据参数渲染成最终想要的html,而helm则是根据参数宣称成想要的k8s yaml文件,使用的模板叫做 Golang Template,里面有一些语法,根据学习的深入都会遇到,这里只是写一个最简单的入门。读这篇文章希望你有点helm基础,网上文章一大片。

准备一个golang项目

很简单,就是一个http服务器,响应hello world

// 处理主页请求
func index(w http.ResponseWriter, r *http.Request) {
	// 向客户端写入内容
	fmt.Fprintf(w, "Hello World!")
}

func main() {
	http.HandleFunc("/", index)              //设置访问的路由
	err := http.ListenAndServe(":9090", nil) //设置监听的端口
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

制作镜像

FROM golang:1.14-alpine AS development
WORKDIR $GOPATH/src
COPY .. .
RUN go build -o app ./main.go

FROM alpine:latest AS production
WORKDIR /root/
COPY --from=development /go/src/app .
EXPOSE 9090
ENTRYPOINT ["./app"]

推送镜像到镜像仓库

这一步省略了,因为我推到了公司的仓库,出于保密就自己解决吧,命令就是docker push

新建chart

helm create golang-demo

你会发现新建了一个golang-demo文件夹,cd进去,会看到很多的文件

golang-demo/
  Chart.yaml          # 告诉别人你这个chart是干什么的
  LICENSE             # 告诉别人你这个chart能不能用
  README.md           # README 文件
  values.yaml         # 配置文件(重点)
  values.schema.json  # 一个json结构的配置文件
  charts/             # 这个chart依赖的其他chart,好比php要依赖nginx mysql
  crds/               # 你要部署一些目前k8s里面没有的东西,你就要先把这个东西创建出来
  templates/          # 模板文件(重点)
  templates/NOTES.txt # 当执行helm install时侯提示使用者一些信息
  templates/_helpers.tpl 	# 我理解也是一些全局配置,helper么

values.yaml

需要修改的地方
在这里插入图片描述
修改镜像的地址,修改拉取镜像策略为always,修改镜像的tag
在这里插入图片描述
因为pod的端口是9090所以新增targetPort,修改ingress enabled为true,支持ingress

deployment.yaml

因为pod的端口为9090
在这里插入图片描述

service.yaml

在这里插入图片描述
新增targetPort,这里的name是chart的中定义的一个name,如果想定制也可以在value.yaml中定义变量

chart打包

helm package golang-demo\

这时候发现生成了一个 helm-golang-0.1.0.tgz ,这个0.1.0就是chart.yaml里面配置的
在这里插入图片描述

安装chart

先新建ns

kubetcl create ns helm-golang-demo
helm install golang-demo golang-demo-0.1.0.tgz -n helm-golang-demo

查看状态

在这里插入图片描述

访问应用

先看看nginx-ingress的ip

kubectl get pods -n ingress-nginx -o wide

在这里插入图片描述
配置本地hosts
在这里插入图片描述
这时候访问chart-example.local应该可以看到hello world

遇到问题

helm install --debug --dry-run test golang-demo-0.1.0.tgz  

这个命令可以看看模板是否渲染正确

常用命令

helm uninstall golang-demo golang-demo-0.1.0.tgz -n helm-golang-demo
helm upgrade golang-demo golang-demo-0.1.0.tgz -n helm-golang-demo

参考

https://www.kongzid.com/archives/helm27

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐