新k8s的nacos部署

部署文件

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
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
---
# Namespace
apiVersion: v1
kind: Namespace
metadata:
name: nacos
---
# Secret for sensitive data
apiVersion: v1
kind: Secret
metadata:
name: nacos-secret
namespace: nacos
type: Opaque
data:
mysql.password: "WGpreUBkYl8yMQ=="
auth.token: "U2VjcmV0S2V5MDkyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODk="
---
# ConfigMap for non-sensitive configuration
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
namespace: nacos
data:
mysql.host: "172.31.11.21"
mysql.db.name: "nacos243"
mysql.port: "3306"
mysql.user: "root"
nacos.replicas: "3"
nacos.server.port: "8848"
nacos.application.port: "8848"
prefer.host.mode: "hostname"
service.name: "nacos-headless"
domain.name: "cluster.local"
---
# Headless Service for internal cluster communication
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
namespace: nacos
labels:
app: nacos
spec:
publishNotReadyAddresses: true
ports:
- port: 8848
name: server
targetPort: 8848
- port: 9848
name: client-rpc
targetPort: 9848
- port: 9849
name: raft-rpc
targetPort: 9849
- port: 7848
name: old-raft-rpc
targetPort: 7848
clusterIP: None
selector:
app: nacos
---
# External Service for external access (NodePort)
apiVersion: v1
kind: Service
metadata:
name: nacos-external
namespace: nacos
labels:
app: nacos
spec:
type: NodePort
ports:
- port: 8848
targetPort: 8848
nodePort: 31848
name: console
- port: 9848
targetPort: 9848
nodePort: 31849
name: client-rpc
- port: 9849
targetPort: 9849
nodePort: 31850
name: server-rpc
- port: 7848
targetPort: 7848
nodePort: 31851
name: old-raft-rpc
selector:
app: nacos
---
# StatefulSet for Nacos cluster
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
namespace: nacos
spec:
podManagementPolicy: Parallel
serviceName: nacos-headless
replicas: 3
selector:
matchLabels:
app: nacos
template:
metadata:
labels:
app: nacos
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- nacos
topologyKey: "kubernetes.io/hostname"
initContainers:
- name: peer-finder-plugin-install
image: 172.31.10.118/nacos/nacos-peer-finder-plugin:1.1
imagePullPolicy: Always
volumeMounts:
- name: data
mountPath: /home/nacos/plugins/peer-finder
subPath: peer-finder
containers:
- name: nacos
image: 172.31.10.118/nacos/nacos-server:v2.4.3
imagePullPolicy: Always
resources:
requests:
memory: "2Gi"
cpu: "500m"
limits:
memory: "4Gi"
cpu: "1000m"
ports:
- containerPort: 8848
name: client-port
- containerPort: 9848
name: client-rpc
- containerPort: 9849
name: raft-rpc
- containerPort: 7848
name: old-raft-rpc
env:
- name: NACOS_REPLICAS
valueFrom:
configMapKeyRef:
name: nacos-cm
key: nacos.replicas
- name: SERVICE_NAME
valueFrom:
configMapKeyRef:
name: nacos-cm
key: service.name
- name: DOMAIN_NAME
valueFrom:
configMapKeyRef:
name: nacos-cm
key: domain.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: MYSQL_SERVICE_HOST
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.host
- name: MYSQL_SERVICE_DB_NAME
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.db.name
- name: MYSQL_SERVICE_PORT
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.port
- name: MYSQL_SERVICE_USER
valueFrom:
configMapKeyRef:
name: nacos-cm
key: mysql.user
- name: MYSQL_SERVICE_PASSWORD
valueFrom:
secretKeyRef:
name: nacos-secret
key: mysql.password
- name: SPRING_DATASOURCE_PLATFORM
value: "mysql"
- name: NACOS_SERVER_PORT
valueFrom:
configMapKeyRef:
name: nacos-cm
key: nacos.server.port
- name: NACOS_APPLICATION_PORT
valueFrom:
configMapKeyRef:
name: nacos-cm
key: nacos.application.port
- name: PREFER_HOST_MODE
valueFrom:
configMapKeyRef:
name: nacos-cm
key: prefer.host.mode
# 鉴权配置
- name: NACOS_AUTH_ENABLE
value: "true"
- name: NACOS_AUTH_TOKEN_EXPIRE_SECONDS
value: "18000"
- name: NACOS_AUTH_TOKEN
valueFrom:
secretKeyRef:
name: nacos-secret
key: auth.token
- name: NACOS_AUTH_CACHE_ENABLE
value: "true"
- name: NACOS_AUTH_IDENTITY_KEY
value: "serverIdentity"
- name: NACOS_AUTH_IDENTITY_VALUE
value: "security"
# JVM参数优化
- name: JVM_XMS
value: "1g"
- name: JVM_XMX
value: "1g"
- name: JVM_XMN
value: "512m"
- name: JVM_MS
value: "128m"
- name: JVM_MMS
value: "320m"
volumeMounts:
- name: data
mountPath: /home/nacos/plugins/peer-finder
subPath: peer-finder
- name: data
mountPath: /home/nacos/data
subPath: data
- name: data
mountPath: /home/nacos/logs
subPath: logs
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "longhorn"
resources:
requests:
storage: 20Gi