Cómo introducir SSH en un contenedor en marcha

| |

COMPARTE EL ARTÍCULO!!!

Los contenedores han cambiado la forma en que pensamos sobre la virtualización. Puede que recuerde los días (o puede que aún los esté viviendo) en los que una máquina virtual era la pila completa, desde la BIOS virtualizada, el sistema operativo y el kernel hasta cada controlador de interfaz de red virtualizada (NIC). Inició sesión en la caja virtual de la misma manera que lo haría en su propia estación de trabajo. Era una analogía muy directa y sencilla.

Y luego llegaron los contenedores, comenzando con LXC y culminando en la Iniciativa de Contenedores Abiertos (OCI), y ahí fue cuando las cosas se complicaron.

Idempotencia

En el mundo de los contenedores, la «máquina virtual» sólo es virtual en su mayor parte. Todo lo que no necesita ser virtualizado se toma prestado de la máquina anfitriona. Además, el contenedor en sí suele ser efímero y bidempotente, por lo que no almacena datos persistentes, y su estado se define mediante archivos de configuración en el equipo host.

Si está acostumbrado a las antiguas formas de las máquinas virtuales, entonces naturalmente espera iniciar sesión en una máquina virtual para interactuar con ella. Pero los contenedores son efímeros, por lo que cualquier cosa que se haga en un contenedor se olvida, por diseño, en caso de que el contenedor necesite ser reiniciado o reaparecido.

Los comandos que controlan la infraestructura de su contenedor (como oc, crictl , lxc , y docker ) proporcionan una interfaz para ejecutar comandos importantes para reiniciar servicios, ver registros, confirmar la existencia y los modos de permisos de un archivo importante, etc. Debe utilizar las herramientas proporcionadas por la infraestructura de su contenedor para interactuar con su aplicación, o bien editar los archivos de configuración y relanzarlos. Para eso están diseñados los contenedores.

Por ejemplo, el software de foro de código abierto Discurso se distribuye oficialmente como una imagen en un contenedor. El software de Discurso es apátrida , por lo que su instalación es autónoma dentro de /var/discourse . Siempre que tenga una copia de seguridad de /var/discourse , siempre puede restaurar el foro relanzando el contenedor. El contenedor no contiene datos persistentes y su archivo de configuración es /var/discourse/containers/app.yml .

Si iniciara sesión en el contenedor y editara cualquiera de los archivos que contiene, todos los cambios se perderían si tuviera que reiniciar el contenedor.

Los contenedores LXC que está construyendo desde cero son más flexibles, ya que los archivos de configuración (en una ubicación definida por usted) pasan al contenedor cuando lo ejecuta.

Un sistema de compilación como Jenkins normalmente tiene un archivo de configuración por defecto, como jenkins.yaml , que proporciona instrucciones para una imagen de contenedor base que sólo existe para compilar y ejecutar pruebas en código fuente. Después de la construcción, el contenedor desaparece.

Ahora que sabe que no necesita SSH para interactuar con sus contenedores, aquí tiene una visión general de las herramientas disponibles (y algunas notas sobre el uso de SSH a pesar de todas las herramientas sofisticadas que lo hacen redundante).

Consola web OpenShift

OpenShift 4 ofrece una cadena de herramientas de código abierto para la creación y el mantenimiento de contenedores, incluida una consola web interactiva.

Cuando inicie sesión en la consola web, vaya a la vista general del proyecto y haga clic en la pestaña Aplicaciones para obtener una lista de pods. Seleccione un (en ejecución)pod para abrir el panel Detalles de la aplicación .

Pod details in OpenShift

Haga clic en la ficha Terminal en la parte superior del panel Detalles para abrir una shell interactiva en su contenedor.

A terminal in a running container

Si prefiere una experiencia basada en navegador para la gestión de Kubernetes, puede aprender más a través de las lecciones interactivas disponibles en learn.openshift.com.

OpenShift oc

Si prefiere una experiencia de interfaz de línea de comandos, puede utilizar el comando oc para interactuar con contenedores desde la terminal.

En primer lugar, obtenga una lista de pods en funcionamiento (o consulte la consola web para obtener una lista de pods activos). Para obtener esa lista, ingrese:

$ oc get pods

Puede ver los registros de un recurso (un pod, build o contenedor). Por defecto, oc logs devuelve los registros del primer contenedor del módulo que especifique. Para seleccionar un único contenedor, añada la opción –container :

También puede ver los registros de todos los contenedores en un pod con:

Ejecutar comandos

Puede ejecutar comandos de forma remota con:

$ oc exec

Esto es similar a ejecutar SSH de forma no interactiva: puede ejecutar el comando que desea ejecutar sin que una shell interactiva se apodere de su entorno.

Shell remoto

Se puede conectar a un contenedor en marcha. Esto todavía no abre ni una shell en el contenedor, pero sí ejecuta comandos directamente. Por ejemplo:

$ oc

Si necesita una shell interactiva real en un contenedor, puede abrir una shell remota con el comando oc rsh siempre y cuando el contenedor incluya una shell. Por defecto, oc rsh lanza /bin/sh :

$ oc rsh

Kubernetes

Si está usando Kubernetes directamente, puede usar el comando kubetcl exec para ejecutar un shell de Bash en su pod.

Primero, confirme que su cápsula está funcionando:

$ kubectl get pods

Mientras el módulo que contiene su aplicación esté listado, puede usar el comando exec para lanzar una shell en el contenedor. Usando el nombre ejemplo-pod como nombre de la vaina, ingrese:

$ kubectl exec --stdin=false --tty=false 
   ejemplo-pod -- /bin/bash
  root@example.local:/# ls
  bin core etc lib root srv
  boot dev home lib64 sbin tmp var

Docker

El comando docker es similar a kubectl . Con el demonio dockerd en ejecución, obtenga el nombre del contenedor en ejecución (puede que tenga que usar sudo para escalar privilegios si no está en el grupo apropiado):

$ docker ps
  NOMBRE DEL COMANDO DE LA IMAGEN DE ID DEL CONTENEDOR
 >NOMBRE DE LA IMAGEN 678ac5cca78e centos "/bin/bash" example-centos

Usando el nombre del contenedor, puede ejecutar un comando en el contenedor:

$ docker exec ejemplo/centos cat /etc/os-release
  CentOS Linux versión 7.6
  NAME="CentOS Linux"
  VERSION="7"
  ID="centos"
  ID_LIKE="rhel fedora"
  VERSION_ID="7"
  [...]

O puede lanzar una shell de Bash para una sesión interactiva:

<pre>$ docker exec </pre>

Contenedores y aparatos

Lo importante que hay que recordar cuando se trata de la nube es que los contenedores son esencialmente tiempos de ejecución en lugar de máquinas virtuales. Aunque tienen mucho en común con un sistema Linux (porque ellos son un sistema Linux!), raramente se traducen directamente a los comandos y flujo de trabajo que usted puede haber desarrollado en su estación de trabajo Linux. Sin embargo, al igual que los dispositivos, los contenedores tienen una interfaz que le ayuda a desarrollarlos, mantenerlos y monitorizarlos, así que familiarícese con los comandos y servicios de la interfaz hasta que pueda interactuar con ellos con la misma facilidad con la que interactúa con máquinas virtuales (o de metal). Pronto te preguntarás por qué no se ha desarrollado todo para ser efímero.

COMPARTE EL ARTÍCULO!!!

Previous

Éxito en el segundo año del Open Hardware Summit

El movimiento de los creadores ayuda a transformar nuestras bibliotecas públicas

Next

Deja un comentario

shares