Подключение js-приложения узла с redis с помощью Kubernetes

#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
}