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?
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:
Luego, en el archivo YAML de implementación de Node-RED, puedes especificar el volumen y el punto de montaje para el ConfigMap:
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: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.