小言_互联网的博客

K8s部署自己的Golang应用程序

250人阅读  评论(0)

简单的应用程序:

项目结构如下:

应用代码:

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的构建脚本实现自动部署。

转载:https://blog.csdn.net/ALakers/article/details/117004285
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场