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

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

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

    package mainimport (        "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 builderENV GOPROXY=https://goproxy.cnWORKDIR /buildCOPY ./src .RUN mkdir /appRUN go mod tidyRUN go build FROM  alpine:latestRUN mkdir -p /cmdWORKDIR  /cmdCOPY  --from=builder /build/servertest  .EXPOSE 8000CMD ["./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.comdocker tag servertest:1.0.0 registry.cn-shanghai.aliyuncs.com/your_hubname_xxxx/servertest:1.0.0docker push registry.cn-shanghai.aliyuncs.com/your_hubname_xxxx/servertest:1.0.0
  5. 编写deployment和service配置文件
    deployment.yaml文件内容如下

    apiVersion: apps/v1kind: Deploymentmetadata:  name: my-go-appspec:  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: v1kind: Servicemetadata:  name: servertest-servicespec:  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.yamlkubectl 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)