关于k8s:将自己的go应用部署到K8S

69次阅读

共计 1998 个字符,预计需要花费 5 分钟才能阅读完成。

通过如下几步能够将本人的 go 利用部署到 k8s 上

  1. 首先生成本人的 go 我的项目

    mkdir src
    cd src
    go mod init servertest
  2. 编写测试代码 main.go 内容如下,很简略

    package main
    
    import (
            "github.com/gin-gonic/gin"
            "fmt"
            "time"
            "net/http"
    )
    
    type getTimeResp struct {CTime string}
    
    func getTimeHandler(ctx *gin.Context) {content := fmt.Sprintf("%d", time.Now().Nanosecond())
            fmt.Printf("%s\n", content)
            resp := &getTimeResp{CTime:content,}
    
            ctx.JSON(http.StatusOK, resp)
    }
    
    
    func main() {r := gin.Default()
            r.GET("/gettime", getTimeHandler)
    
            r.Run(":8000")
    }
  3. 编写 Dockerfile 内容如下

    FROM golang:1.17.1-alpine as builder
    ENV GOPROXY=https://goproxy.cn
    WORKDIR /build
    COPY ./src .
    RUN mkdir /app
    RUN go mod tidy
    RUN go build 
    
    FROM  alpine:latest
    RUN mkdir -p /cmd
    WORKDIR  /cmd
    COPY  --from=builder /build/servertest  .
    EXPOSE 8000
    CMD ["./servertest"]
  4. 生成镜像,执行命令

    docker build -t servertest:1.0.0 -f Dockerfile .

    执行

    docker images

    能够看到生成的 servertest:1.0.0 镜像曾经存在了

    因为 k8s 集群会存在多个 nod 所以多个 nod 都须要拉取镜像,所以须要保本人的镜像推到镜像服务器,我这里选用阿里的。
    先登陆 -> 将本人生成的镜像打 tag-> 推到镜像服务器

    docker login --username=your_loginname_xxxx registry.cn-shanghai.aliyuncs.com
    docker tag servertest:1.0.0 registry.cn-shanghai.aliyuncs.com/your_hubname_xxxx/servertest:1.0.0
    docker push registry.cn-shanghai.aliyuncs.com/your_hubname_xxxx/servertest:1.0.0
  5. 编写 deployment 和 service 配置文件
    deployment.yaml 文件内容如下

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-go-app
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-go-app
      template:
        metadata:
          labels:
            app: my-go-app
        spec:
          containers:
            - name: go-app-container
              image: registry.cn-shanghai.aliyuncs.com/your_hubname_xxxx/servertest:1.0.0
              imagePullPolicy: IfNotPresent
              resources:
                limits:
                  memory: "512Mi"
                  cpu: "500m"
                requests:
                  memory: "64Mi"
                  cpu: "100m"
              ports:
              - containerPort: 8000

    service.yaml 内容如下

    apiVersion: v1
    kind: Service
    metadata:
      name: servertest-service
    spec:
      type: NodePort
      ports:
        - port: 8000
          nodePort: 30066
      selector:
        app: my-go-app

    须要对外提供服务所以 type 选 NodePort
    port:8000 是对应 pod 的端口号
    nodePort:30066 是 service 对外提供的调用端口号

  6. 部署
    执行

    kubectl create -f ./yaml/deployment.yaml
    kubectl create -f ./yaml/service.yaml

    查看 pod 和 service 情况

    kubectl get pod,svc -n default

    能够看到如下

    三个 pod(my-go-app-xxxxxx-xxxx) 处在 Running 状态
    service 的 Port30066 对外提供服务

  7. 拜访确认
    查看任何一个 node 的物理 IP 地址,通过拜访 node 主机的 IP:30066/gettime
    会返回以后工夫(nano second)

正文完
 0