helm 部署golang应用
helm 其实就是一个模板引擎,就跟以前写php时候有很多模板标签会根据参数渲染成最终想要的html,而helm则是根据参数宣称成想要的k8s yaml文件,使用的模板叫做 Golang Template,里面有一些语法,根据学习的深入都会遇到,这里只是写一个最简单的入门。新增targetPort,这里的name是chart的中定义的一个name,如果想定制也可以在value.yaml中定义变量。
背景
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
更多推荐
所有评论(0)