• helm 部署golang应用


    背景

    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)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    制作镜像

    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"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    推送镜像到镜像仓库

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

    新建chart

    helm create golang-demo
    
    • 1

    你会发现新建了一个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么
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    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\
    
    • 1

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

    安装chart

    先新建ns

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

    查看状态

    在这里插入图片描述

    访问应用

    先看看nginx-ingress的ip

    kubectl get pods -n ingress-nginx -o wide
    
    
    • 1
    • 2

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

    遇到问题

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

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

    常用命令

    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

  • 相关阅读:
    NCF 的Azure Cosmos DB 演示案例
    分析智能平台VMware Greenplum 7 正式发布!
    Java集合:Map集合的几种常用遍历方式
    共享股东模式:规则、优势与亮点
    分析师:百度到2030年可能成为中国市值最高的公司
    使用mybatis-plus的saveOrUpdate的问题
    go-zero 微服务实战系列(二、服务拆分)
    什么是卷积神经网络?解决了什么问题?
    241. 为运算表达式设计优先级(分治 +记忆化)
    台式电脑电源功率越大越费电吗?装机选购多少W电源
  • 原文地址:https://blog.csdn.net/yanchendage/article/details/126782348