简单的应用程序:
项目结构如下:应用代码:
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
访问该服务:
提示:
- docker 构建好的镜像可以推到私有仓库去,本地镜像比较局限。
- kubectl get pod/svc 可以查看资源信息,create后也可获取名称后delete删掉。
- 创建过程存在问题可以用describe pod查看具体信息。
- kubectl exec 可以进入容器,docker也可以进入容器。
- yaml创建的方式比较复杂但是比较灵活。
- 可以配合Jenkins的构建脚本实现自动部署。