---
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
namespace: ruoyi
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
## 兼容1.4.x版本的选举端口
- port: 7848
name: old-raft-rpc
targetPort: 7848
clusterIP: None
selector:
app: nacos
---
apiVersion: v1
kind: ConfigMap
metadata:
namespace: ruoyi
name: nacos-cm
data:
mysql.host: "mysql-svc-hls.ruoyi.svc.cluster.local"
mysql.db.name: "nacos"
mysql.port: "3306"
mysql.user: "root"
mysql.password: "root"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
namespace: ruoyi
name: nacos
spec:
selector:
matchLabels:
app: nacos
podManagementPolicy: Parallel
serviceName: nacos-headless
replicas: 1
template:
metadata:
labels:
app: nacos
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: "app"
operator: In
values:
- nacos-headless
topologyKey: "kubernetes.io/hostname"
imagePullSecrets:
- name: docker-secret-aliyun
volumes:
- name: nacos-pv
persistentVolumeClaim:
claimName: nacos-pvc
- configMap:
name: mysql-conf
name: nacos-cm
tolerations:
- key: "CriticalAddonsOnly"
value: "true"
effect: "NoExecute"
operator: "Equal"
containers:
- name: nacos
imagePullPolicy: Always
image: registry.cn-shenzhen.aliyuncs.com/dylan-ns/nacos-server:2.0.4
ports:
- containerPort: 8848
name: client-port
- containerPort: 9848
name: client-rpc
- containerPort: 9849
name: raft-rpc
- containerPort: 7848
name: old-raft-rpc
env:
- name: MODE
value: "cluster"
- name: NACOS_REPLICAS
value: "3"
- name: SERVICE_NAME
value: "nacos-headless"
- name: DOMAIN_NAME
value: "cluster.local"
- 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:
configMapKeyRef:
name: nacos-cm
key: mysql.password
- name: SPRING_DATASOURCE_PLATFORM
value: "mysql"
- name: NACOS_SERVER_PORT
value: "8848"
- name: NACOS_APPLICATION_PORT
value: "8848"
- name: PREFER_HOST_MODE
value: "hostname"
- name: NACOS_SERVERS
value: "nacos-0.nacos-headless.ruoyi.svc.cluster.local:8848"
volumeMounts:
- name: nacos-pv
mountPath: /home/nacos/data
- name: nacos-pv
mountPath: /home/nacos/logs
---
apiVersion: v1
kind: PersistentVolume
metadata:
namespace: ruoyi
name: nacos-pv
spec:
capacity:
storage: 2Gi # pv 的容量
volumeMode: Filesystem # 存储类型为文件系统
accessModes: # 访问模式:ReadWriteOnce、ReadWriteMany、ReadOnlyMany
- ReadWriteMany # 可被单节点独写
persistentVolumeReclaimPolicy: Delete # 回收策略
storageClassName: master-nfs-storage # 创建 PV 的存储类名,需要与 pvc 的相同
nfs: # 连接到 nfs
path: /data/nfs/nacos/data
server: 192.168.229.205
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: ruoyi
name: nacos-pvc
spec:
accessModes:
- ReadWriteMany # 权限需要与对应的 pv 相同
volumeMode: Filesystem
resources:
requests:
storage: 2Gi # 资源可以小于 pv 的,但是不能大于,如果大于就会匹配不到 pv
storageClassName: master-nfs-storage # 名字需要与对应的 pv 相同
---
注意,nacos如果节点数只有一个则环境变量中的 MODE 必须设置成 standalone
seata资源清单,不包括 外部 网络访问
apiVersion: apps/v1
kind: Deployment
metadata:
name: seata-server
namespace: ruoyi
labels:
app: seata-server
spec:
replicas: 1
selector:
matchLabels:
app: seata-server
template:
metadata:
labels:
app: seata-server
spec:
imagePullSecrets:
- name: docker-secret-aliyun
containers:
- name: seata-server
image: registry.cn-shenzhen.aliyuncs.com/dylan-ns/seata-server:1.5.2
imagePullPolicy: IfNotPresent
ports:
- name: service
containerPort: 8091
protocol: TCP
- name: console
containerPort: 7091
protocol: TCP
volumeMounts:
- name: seata-config
mountPath: /seata-server/resources/application.yml
subPath: application.yml
volumes:
- name: seata-config
configMap:
name: seata-server-config
---
apiVersion: v1
kind: ConfigMap
metadata:
namespace: ruoyi
name: seata-server-config
data:
application.yml: |
server:
port: 7091
spring:
application:
name: seata-server
logging:
config: classpath:logback-spring.xml
file:
path: ${user.home}/logs/seata
console:
user:
username: seata
password: seata
seata:
config:
# support: nacos, consul, apollo, zk, etcd3
type: nacos
nacos:
server-addr: nacos-headless.ruoyi:8848
group: SEATA_GROUP
username: nacos
password: nacos
data-id: seataServer.properties
registry:
# support: nacos, eureka, redis, zk, consul, etcd3, sofa
type: nacos
nacos:
application: seata-server
server-addr: nacos-headless.ruoyi:8848
group: SEATA_GROUP
cluster: default
username: nacos
password: nacos
store:
# support: file 、 db 、 redis
mode: db
db:
datasource: druid
db-type: mysql
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://mysql-svc-hls.ruoyi.svc.cluster.local:3306/seata
user: root
password: root
min-conn: 5
max-conn: 100
security:
secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017
tokenValidityInMilliseconds: 1800000
ignore:
urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login
注意,不知道是不是版本原因 SEATA_CONFIG_NAME 设置无效,所以采用 subPath直接挂在到 /seata-server/resource/application.yml