通过如下几步能够将本人的 go 利用部署到 k8s 上
-
首先生成本人的 go 我的项目
mkdir src cd src go mod init servertest
-
编写测试代码 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") }
-
编写 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"]
-
生成镜像,执行命令
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
-
编写 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 对外提供的调用端口号 -
部署
执行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 对外提供服务 - 拜访确认
查看任何一个 node 的物理 IP 地址,通过拜访 node 主机的 IP:30066/gettime
会返回以后工夫(nano second)