K8s部署自己的Golang应用程序

Posted Time-Traveler

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8s部署自己的Golang应用程序相关的知识,希望对你有一定的参考价值。


简单的应用程序:

项目结构如下:

应用代码:

package main

import (
	"github.com/gin-gonic/gin"
)

func main() 
	r := gin.Default() // 使用默认中间件(logger和recovery)
	r.GET("/ping", func(ctx *gin.Context) 
		ctx.JSON(200, gin.H // 返回一个JSON,状态码是200,gin.H是map[string]interface的简写
			"message": "pong",
		)
	)
	r.Run(":8088")


dockerfile:


FROM golang:1.14-alpine
ENV GOPROXY=https://goproxy.cn

WORKDIR /build
COPY . .

EXPOSE 8088

RUN mkdir /app \\
    && go mod download \\
    && go build -o /app/main main.go

WORKDIR /app

CMD ["/app/main"]

k8s deployment & service:


apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-golangtest
  labels:
    name: my-golangtest
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-golangtest
  template:
    metadata:
      labels:
        app: my-golangtest
    spec:
      containers:
        - name: golangtest
          image: golangtest
          imagePullPolicy: Never # 使用本地镜像
          ports:
            - containerPort: 8088

---
apiVersion: v1
kind: Service
metadata:
  name: my-golangtest
  labels:
    app: my-golangtest
spec:
  type: NodePort
  ports:
    - port: 8088
      targetPort: 8088
      nodePort: 30000
  selector:
    app: my-golangtest

代码非常的简单,接下来我们将其构建成docker镜像:

docker build -t golangtest -f dev.yaml

查看镜像,可以发现我们的docker镜像已经构建好了:

创建pod:

cd deployment
kubectl create -f dev.yaml

访问该服务:

提示:

  1. docker 构建好的镜像可以推到私有仓库去,本地镜像比较局限。
  2. kubectl get pod/svc 可以查看资源信息,create后也可获取名称后delete删掉。
  3. 创建过程存在问题可以用describe pod查看具体信息。
  4. kubectl exec 可以进入容器,docker也可以进入容器。
  5. yaml创建的方式比较复杂但是比较灵活。
  6. 可以配合Jenkins的构建脚本实现自动部署。

以上是关于K8s部署自己的Golang应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何部署Golang应用

k8s部署应用入门之kubectl apply

k8s-部署容器化应用

K8s通过Helm部署入门

Heroku 使用 docker 一键部署 golang 应用

k8s快速入门:从部署到实战