k8s部署SpringBoot应用

myapp.yaml 文件

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-configmap
labels:
app: myapp-configmap
data:
SPRING_PROFILES_ACTIVE: test
TZ: Asia/Shanghai
SPRING_DATASOURCE_HOST: xxx.xxx.xxx.xxx
SPRING_DATASOURCE_PORT: "3306"
---
apiVersion: v1
kind: Secret
metadata:
name: myapp-secret
type: Opaque
data:
SPRING_DATASOURCE_USERNAME: cm9vdA== # echo -n 'root' | base64
SPRING_DATASOURCE_PASSWORD: cm9vdA== # echo -n 'root' | base64
---
apiVersion: v1
kind: Service
metadata:
name: myapp-svc
namespace: default
labels:
app: myapp-svc
spec:
type: NodePort
ports:
- name: server
port: 8080
targetPort: 8080
nodePort: 30080
selector:
app: myapp-pod
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
labels:
app: myapp-deployment
spec:
replicas: 1
selector:
matchLabels:
app: myapp-pod
template:
metadata:
labels:
app: myapp-pod
spec:
containers:
- name: myapp #容器名称,必须字段,名称唯一且对象创建后不可以被修改
image: myapp:latest
imagePullPolicy: Always # 镜像下载策略( Always:总是去仓库下载;Never:从不去仓库下载;IfNotPresent:如果本地没有就去仓库下载。默认是"IfNotPresent" 但是,如果镜像的标签是latest,则总会是"Always,并且对象一旦被创建,这个字段不允许被改变)
ports:
- name: server # 端口名称
containerPort: 8080 # 容器监听端口
# hostPort: 8080 # 容器所在主机需要监听的端口号,默认与 Container 相同
protocol: TCP # 端口协议,支持 TCP 和 UDP,默认 TCP
envFrom:
- configMapRef:
name: myapp-configmap
- secretRef:
name: myapp-secret
volumeMounts:
- name: applog
mountPath: /app/log # 容器内日志路径
subPath: myapp
lifecycle:
preStop:
exec:
command: ["sh", "-c", "sleep 10"] # 优雅关闭 https://docs.spring.io/spring-boot/docs/current/reference/html/deployment.html#deployment.cloud.kubernetes
volumes:
- name: applog
hostPath:
# 宿主机目录
path: /root/k8s/log
# 如果目录不存在则创建(可创建多层目录)
type: DirectoryOrCreate
nodeName: k8sworker1 #如果要用hostPath,一般需要指定nodeName,这样pod才能每次都调度到同一个node,不会丢失volume

部署

1
kubectl apply -f myapp.yaml