Fork me on GitHub

容器化案例三:NodeJS服务容器化

公司部分教研、课件服务使用Nodejs实现,这篇文章记录相关服务容器化内容。

编译打包

1
npm install

Dockerfile文件编写

1
2
3
4
5
6
7
FROM harbor.k8s.xxx.com/iflow_public/slide:node-pdf.1.0.6

ADD ./target.tar.gz /data/source/node-pdf

RUN echo '127.0.0.1 local.xxx.com' >> /etc/hosts

WORKDIR /data/source/node-pdf

Deployment及Service文件编写

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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
{{$MODULE := "serve" }}
{{$TRUE_APP_NAME := (printf "%v-%v" .Env.FLOW_STANDARD_NAME $MODULE)}}


---
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{$TRUE_APP_NAME}}-deploy
labels:
rd: {{.Env.CMP_RD}}
app: {{.Env.FLOW_STANDARD_NAME}}
project-name: {{.Env.FLOW_PROJECT_NAME}}
module: {{$MODULE}}
spec:
replicas: {{if eq .Env.FLOW_DIST_ENV "pre"}}1{{else}}2{{end}}
selector:
matchLabels:
app: {{.Env.FLOW_STANDARD_NAME}}
project-name: {{.Env.FLOW_PROJECT_NAME}}
module: {{$MODULE}}
template:
metadata:
annotations:
alibabacloud.com/burst-resource: eci
labels:
rd: {{.Env.CMP_RD}}
app: {{.Env.FLOW_STANDARD_NAME}}
project-name: {{.Env.FLOW_PROJECT_NAME}}
module: {{$MODULE}}
spec:
dnsConfig:
options:
- name: ndots
value: "3"
imagePullSecrets:
- name: harbor-registry
containers:
- name: serve
startupProbe:
tcpSocket:
port: {{.Env.CMP_PORT}}
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 30
livenessProbe:
tcpSocket:
port: {{.Env.CMP_PORT}}
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 15
ports:
- containerPort: {{.Env.CMP_PORT}}
name: web
protocol: TCP
volumeMounts:
- name: logs
mountPath: /tmp/log
- name: filebeat-data
mountPath: /data/var/log
image: {{.Env.IMAGE_NAME}}
imagePullPolicy: Always
command: ["sh", "-c", "pm2-runtime start src/index.js"]
resources:
limits:
cpu: 1000m
memory: 2048Mi
requests:
cpu: 70m
memory: 512Mi
env:
- name: TZ
value: Asia/Shanghai
- name: NODE_ENV
value: {{if eq .Env.FLOW_DIST_ENV "prod"}}"prod"{{else}}"prod"{{end}}
- name: filebeat-sidecar
image: harbor.k8s.xxx.com/iflow/custom-filebeat:7.10.1-5
resources:
limits:
memory: "200Mi"
requests:
memory: "50Mi"
volumeMounts:
- name: logs
mountPath: /tmp/log
- name: filebeat-data
mountPath: /data/var/log
volumes:
- name: logs
emptyDir: {}
- name: filebeat-data
emptyDir: {}
...

---
apiVersion: v1
kind: Service
metadata:
name: {{$TRUE_APP_NAME}}-svc
labels:
rd: {{.Env.CMP_RD}}
app: {{.Env.FLOW_STANDARD_NAME}}
module: {{$MODULE}}
spec:
type: ClusterIP
selector:
app: {{.Env.FLOW_STANDARD_NAME}}
module: {{$MODULE}}
ports:
- name: web
protocol: TCP
port: {{.Env.CMP_PORT}}
targetPort: {{.Env.CMP_PORT}}

======================================================
希望各位朋友支持一下

本文作者:dongsheng
本文地址https://mds1455975151.github.io/archives/76a112a5.html
版权声明:转载请注明出处!

坚持技术分享,您的支持将鼓励我继续创作!