#node.js #kubernetes #redis
Вопрос:
Я пытаюсь изучить Kubernetes и начал реализовывать свое приложение node js с помощью redis. Ниже приведен мой документ yaml как для redis, так и для приложения node js. Я могу подключить свое приложение node js к redis с помощью сервисов k8s. Но моя проблема в том, что при запуске службы node js она будет подключена к службе redis в течение 5-10 минут, а затем произойдет сбой. если я перезапущу его, он будет нормально работать в течение 5 минут, а затем снова произойдет сбой. Я обновил dns redis в приложении node js, чтобы подключить службу redis k8s с соответствующим номером порта.
> node-js deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-node
spec:
selector:
matchLabels:
app: webapp-node
replicas: 3
template:
metadata:
labels:
app: webapp-node
spec:
containers:
- name: webapp-node
image: webapp-node:server_v1
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3001
# data volume where redis writes data
volumeMounts:
- name: data
mountPath: /data
readOnly: false
volumes:
- name: data
persistentVolumeClaim:
claimName: webapp-redis-data
---
kind: Service
apiVersion: v1
metadata:
# Unique key of the Service instance
name: webapp-node
spec:
ports:
- name: http
port: 3001
nodePort: 30090
selector:
app: webapp-node
type: NodePort
> redis-db
apiVersion: v1
kind: Service
metadata:
name: webapp-redis
labels:
app: webapp-redis
spec:
ports:
- name: redis
port: 6379
nodePort: 30495
type: NodePort
selector:
app: webapp-redis
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp-redis
spec:
selector:
matchLabels:
app: webapp-redis
replicas: 3
template:
metadata:
labels:
app: webapp-redis
spec:
containers:
- name: webapp-redis
image: redis:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 6379
# data volume where redis writes data
volumeMounts:
- name: data
mountPath: /data
readOnly: false
volumes:
- name: data
persistentVolumeClaim:
claimName: webapp-redis-data
---
# data volume
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: webapp-redis-data
labels:
app: webapp-redis
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
ERROR
events.js:377
throw er; // Unhandled ‘error’ event
^
Error: connect ECONNREFUSED 10.103.5.142:30495
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1159:16)
Emitted ‘error’ event on RedisClient instance at:
at RedisClient.on_error (/usr/src/app/node_modules/redis/index.js:342:14)
at Socket. (/usr/src/app/node_modules/redis/index.js:223:14)
at Socket.emit (events.js:400:28)
at emitErrorNT (internal/streams/destroy.js:106:8)
at emitErrorCloseNT (internal/streams/destroy.js:74:3)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
errno: -111,
code: ‘ECONNREFUSED’,
syscall: ‘connect’,
address: ‘10.103.5.142’,
port: 30495
}