es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Instancia de Node-RED en Kubernetes con configuración personalizada settings.js y otros archivos

Estoy construyendo un servicio que crea una instancia de Node-RED bajo demanda en Kubernetes. Este servicio necesita tener autenticación personalizada y otros datos específicos del servicio en un archivo JSON.

Cada instancia de Node-RED tendrá un Volumen Persistente asociado, por lo que una forma en la que pensé hacer esto fue adjuntar el Volumen Persistente a un pod y copiar los archivos en el Volumen Persistente, para luego iniciar la implementación de Node-RED sobre el Volumen Persistente modificado.

Utilizo el siguiente script para lograr esto:

def paste_file_into_pod(self, src_path, dest_path):
      dir_name= path.dirname(src_path)
      bname = path.basename(src_path)

      exec_command = ['/bin/sh', '-c', 'cd {src}; tar cf - {base}'.format(src=dir_name, base=bname)]

      with tempfile.TemporaryFile() as tar_buffer:
           resp = stream(self.k8_client.connect_get_namespaced_pod_exec, self.kube_methods.component_name, self.kube_methods.namespace,
                  command=exec_command,
                  stderr=True, stdin=True,
                  stdout=True, tty=False,
                  _preload_content=False)

           print(resp)


           while resp.is_open():
                resp.update(timeout=1)
                if resp.peek_stdout():
                     out = resp.read_stdout()
                     tar_buffer.write(out.encode('utf-8'))

                if resp.peek_stderr():
                     print('STDERR: {0}'.format(resp.read_stderr()))

           resp.close()

           tar_buffer.flush()
           tar_buffer.seek(0)

           with tarfile.open(fileobj=tar_buffer, mode='r:') as tar:
                subdir_and_files = [tarinfo for tarinfo in tar.getmembers()]
                tar.extractall(path=dest_path, members=subdir_and_files)

Esto parece una forma bastante complicada de hacerlo. ¿Alguien puede sugerir una forma rápida y fácil de iniciar Node-RED en Kubernetes con settings.js personalizados y algunos archivos adicionales de configuración?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución podría ser crear un ConfigMap en Kubernetes que contenga la configuración personalizada de autenticación y otros datos específicos del servicio en un archivo JSON. Luego, puedes montar el ConfigMap como un volumen en la implementación de Node-RED y hacer referencia al archivo settings.js desde el volumen montado.

    Puedes crear el ConfigMap utilizando el comando kubectl o la API de Kubernetes en el código Python. Por ejemplo:

    kubectl create configmap nodered-config --from-file=settings.js --from-file=other_data.json
    

    Luego, en el archivo YAML de implementación de Node-RED, puedes especificar el volumen y el punto de montaje para el ConfigMap:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nodered
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nodered
      template:
        metadata:
          labels:
            app: nodered
        spec:
          volumes:
          - name: nodered-config
            configMap:
              name: nodered-config
          containers:
          - name: nodered
            image: nodered/nodered
            volumeMounts:
            - name: nodered-config
              mountPath: /data/
            ports:
            - containerPort: 1880
    

    Esto montará el ConfigMap como un volumen en el directorio /data del contenedor de Node-RED. Luego, puedes hacer referencia al archivo settings.js en el comando de inicio de Node-RED:

    node-red -s /data/settings.js
    

    Esto iniciará Node-RED con el archivo settings.js personalizado y los demás archivos de configuración del volumen ConfigMap. Para actualizar la configuración, simplemente puedes actualizar el ConfigMap y reiniciar la implementación de Node-RED.

Comments are closed.