• 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

  • 相关阅读:
    Java摆烂基础学习三~程序流程控制
    linux使用命令反弹到 msf
    Hive3 单机版(含Derby 多用户及Spark on Hive)
    数据库防火墙技术展望【终章】
    @设计模式-代理模式
    Redis从入门到放弃(7):主从复制
    互联网Java工程师面试题·Dubbo篇·第一弹
    显示控件——字符显示之数据变量
    新建热门题材跟踪表,捕捉节后主线行情——股票量化分析工具QTYX-V2.7.1
    WordPress Page Builder KingComposer 2.9.6 Open Redirection
  • 原文地址:https://blog.csdn.net/yanchendage/article/details/126782348