Gin之K8s
# K8s介绍
K8s(Kubernetes)是一个开源的容器编排平台,可以管理不同软件产生的容器。
- Pod:实例
- Service:逻辑上的服务,可以认为是业务服务的直接映射。
- Deployment:管理Pod的东西。
# 使用k8s配置web服务
# 1、移除相关初始化
//main.go
func main() {
//db := initDB()
//server := initWebServer()
//u := initUser(db)
//u.RegisterRoutes(server)
server := gin.Default()
server.GET("/test", func(c *gin.Context) {
c.String(http.StatusOK, "hello world")
})
server.Run(":2222")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# 2、配置Dockerfile文件
//Dockerfile
# 基础镜像
FROM ubuntu:20.04
# 把编译后的打包进来这个镜像放到工作目录 /app(工作目录可以自行决定)
COPY webook /app/webook
WORKDIR /app
# 最佳执行
ENTRYPOINT["/app/webook"]
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 3、配置Deployment文件
# 如何解释这一份配置/如果处理这一份配置
apiVersion: apps/v1
# 声明我这里配置的是Deployment
kind: Deployment
metadata:
# 名称 webook 但是哦这是一个Deployment
name: webook
labels:
app: webook
# specification 规格说明
spec:
# 副本数量
replicas: 3
# 筛选器
selector:
matchLabels:
app: webook
# temple 描述的是你的POD是什么样的(模板)
template:
metadata:
name: webook
labels:
app: webook
# POD 的具体信息
spec:
# POD 里面运行的 container
containers:
- name: webook
image: docker/webook:v0.0.1
imagePullPolicy: IfNotPresent
ports:
# 端口
- containerPort: 2222
protocol: TCP
restartPolicy: Always
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
- 解释
- apiVersion:配置驱动文件(或叫元数据驱动/声明式框架),目的是用于解读配置。

- spec:规格说明(说明书)。
- selector:筛选器,用于筛选所需资源。
- temple:在Deployment中为Pod创建的模板。
- image:镜像。
执行命令:kubectl apply -f k8s-webook-deployment.yaml
# 4、配置Service文件
apiVersion: v1
kind: Service
metadata:
# 代表这是webook本体
name: webook
# 规格说明
spec:
selector:
app: webook
ports:
- protocol: TCP
port: 88
targetPort: 2222
type: LoadBalancer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 解释
- type:负载均衡。
- ports:端口。
- name:端口名字。
- port:外部访问的端口。
- protocol:端口监听的协议。
- targetPort:转发请求时,应该转发到Pod上的端口
执行命令:kubectl apply -f k8s-webook-service.yaml
# 5、执行docker (在主目录下执行)
docker build -t docker/webook:v0.0.1 .
1
(或使用makefile文件)
//makefile文件
.PHONY: docker
docker:
@rm webook || true
@GOOS=linux GOARCH=arm go build -o webook .
@docker rmi -f docker/webook:v0.0.1
@docker build -t docker/webook:v0.0.1 .
1
2
3
4
5
6
7
2
3
4
5
6
7
# 使用k8s配置Mysql服务
在使用k8s配置Mysql时需要考虑到存储空间(持久化卷)用于存储数据。
# 1、移除相关初始化 (见上)
# 2、配置Dockerfile文件(见上)
# 3、配置Deployment文件(具体注释与解释等见上)
apiVersion: apps/v1
kind: Deployment
metadata:
name: webook-mysql
labels:
app: webook-mysql
spec:
# mysql 的POD只能有一个
replicas: 1
selector:
matchLabels:
app: webook-mysql
template:
metadata:
name: webook-mysql
labels:
app: webook-mysql
spec:
containers:
- name: webook-mysql
image: mysql8.0
env:
- name: MYSQL_ROOT_PASSWORD
value: root
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3306
restartPolicy: Always
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 4、配置Service文件(具体注释与解释等见上)
apiVersion: v1
kind: Service
metadata:
name: webook-mysql
spec:
selector:
app: webook-mysql
ports:
- protocol: TCP
port: 3307
targetPort: 3306
nodePort: 30001
type: NodePort
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 5、配置PersistentVolumeClaim文件(具体注释与解释等见上)
# 开始描述mysql存储结构需要具备什么特征
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: webook-mysql-claim
spec:
# manual 用来命名,可以随机
storageClassName: manual
# 模式:访问模式,主要控制能不能被多个pod读写
accessModes:
# 只能被一个pod读写
- ReadWriteOnce
# 需要的资源
resources:
requests:
# 容量 需要一个G
storage: 1Gi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)
上次更新: 2026/04/08, 15:06:55