350 meneos
7317 clics
Entendiendo qué son los contenedores y por qué es una de las mayores revoluciones de la industria del desarrollo
Google, Microsoft, Amazon, Oracle, WMware, IBM, RedHat están apostando fuertemente por estas tecnologías, ofreciendo todo tipo de servicios a los desarrolladores en la nube. Hoy por hoy todo va encaminado a ser dockerizado, como popularmente se refiere en castellano al hecho de empaquetar una aplicación software para ser distribuida y ejecutada mediante el uso de esos contenedores software.
|
comentarios cerrados
Voy a la |buambulancia a llorar porque esto es una pena.
Pero es solo mi suposición. A ver si asoma la patita y se explica...
Yo llevo ya 3 años con kubernetes en producción y me ha cambiado la manera de ver la infraestructura.... Más feliz que una perdiz
Detectado persona que no tiene ni idea, y que no quiere hacer el minimo esfuerzo en estudiar.
Si tu vida en IT depende de que otros te hagan una UI para que tu puedas dar click en YES, es que no eres generador de productos, eres un consumidor. Y no digas que debas armarte tus cosas en ensamblador.
Docker y Kubernetes esta suficientemente maduro, hay documentacion a chorradas y es ampliamente utilizado en empresas de alto nivel .
Pero en algún momento las aplicaciones se volvieron más complicadas y empezaron a tener dependencias de DLLs, librerías, runtimes, intérpretes, compiladores, variables de entorno, ficheros de configuración, kernels...
Instalar una aplicación que joda a otras es relativamente fácil hoy en día. O que simplemente no puedas usar algo que requiere un intérprete versión X.Y pero tú tíenes instalado versión W.Z y si instalas una fastidias la otra.
Con un contenedor si te hace falta algo, una aplicación, un servidor, un servicio, lo bajas, lo das de alta en el sistema, lo ejecutas en un entorno controlado que no te va a hacer daño y lo usas, sabiendo que no te va a causar problemas con el resto de software en la plataforma y que el contenedor tiene todo preparado para que funcione a la primera. O si no está disponible en algún repositorio, te preparas tú mismo el contenedor y a tirar.
Esa idea es sencilla, pero potente, y evidentemente acelera muchísimo el ciclo de desarrollo, pero no sólo el desarrollo, ya que ahora es mucho más sencillo escalar las aplicaciones para atender las demandas de uso, ya que tienes una manera repetible y programable de poder ampliar la capacidad mediante un clonado exacto de la aplicación en un entorno controlado.
Pero bueno, curioso por lo menos, gracias #0, me lo guardo en favoritos para cuando me vuelvan a preguntar a qué hostias me dedico
Un contenedor sirve para contener una aplicación y facilitar su instalación y ejecucion en cualquier entorno.
La VM puede servir para esto, pero es mucho más amplia, y no es tan eficiente en esa tarea concreta.
Conceptualmente y en terminos de uso son algo completamente distinto.
No es habitual loguearse dentro de un contenedor o instalar cosas después del momento de la creación.
Lo que haras será encapsupar una aplicacion dentro de ese y arrancarlo ... puedes acceder a los logs facilmente para confirmar que esta arrancado. No hay razón para asumir nada.
Si solo quieres dar clicks y ver colores, pues quizas vayas a tener dificultades pero googleando seguro que alguien ha hecho ya alguna GUI.
Suerte!
Tienes las ventajas de poder optimizar los recursos con cgroups y de un mayor aislamiento que proporciona namespace, que da mayor seguridad y estabilidad al entorno.
También tienes la ventaja de que todo fichero de configuración o adicional que necesites lo puedes tener en la imagen. Si tienes la configuración por un lado y el binario por otro la portabilidad es mucho más compleja. Aquí levantas el contenedor y punto, está todo dentro.
Por último tienes las ventajas de nuevos productos como Istio, que te permiten hacer la leche de cosas con contenedores sidecar, aunque aún están algo verdes.
> Pero Kubernetes es el infierno. No es fácil de configurar, muy difícil de encontrar errores y pocas instalaciones lo necesitan aunque todo el mundo quiere usarlo.
Soy desarrollador de una distribución de kubernetes y estoy completamente de acuerdo. Kubernetes necesita un equipo especializado en kubernetes para administrarlo. Y desde luego me parece una locura montar kubernetes sin contratar soporte técnico, salvo que tengas gente capaz de tocar el kernel, kubernetes, el ingress controller que necesites, etc.
Para montar un cluster de media docena de nodos para ejecutar 500 pods ni te molestes en montar kubernetes.
Edito: Estoy de acuerdo en lo de que es complejo. No digo que no sea buena tecnología, como tecnología es la ostia, pero es una tecnología compleja que requiere un conocimiento y un volumen que no están al alcance de todo el mundo, y teniendo el volumen y el conocmiento tampoco cubre cualquier caso de uso.
El resultado de los votos negativos es la misma portada día tras día. Da igual que la mires hoy o dentro de un mes. No vas a encontrar noticias diferentes ni nuevas páginas interesantes que investigar. Pero vamos, solo es mi opinión. Eso si, hay imbéciles como #67 que se empeñan en corroborarla con sus votos.
La tendencia es a automatizar procesos, no a contratar a más gente para poder hacer click en más botones a la vez.
Pero Kubernetes es el infierno. No es fácil de configurar, muy difícil de encontrar errores y pocas instalaciones lo necesitan aunque todo el mundo quiere usarlo.
Soy ingeniero de software, lo mío es programar. Aprendí Docker en una mañana u me sentía cómodo en pocos días. Kubernetes es otro rollo, necesitas mucho esfuerzo para controlarlo y me distrae de mi principal tarea, que es crear software.
Basicamente es parte de culpa que mucho programador se ha metido a temas de sistemas, sin tener ni idea (por tiempo o ganas) de saber como funcionan realmente los sistemas por debajo y todas las variables que conciernen a ello.
Mucha culpa de estos es los denominados ahora DevOps, que en su mayoria son más provinientes del DEV que de OPS. Es decir, gente con un conocimiento amplio de programación pero nulo de sistemas.
Haciendo que cosas banales y con costes irrisorios se conviertan en puros gasta recursos y con 0 optimización gracias a que lo que hay debajo da igual como funcione o lo que gaste, no es mi problema (pos ok).
Hemos pasado de empresas queriendo meter un wordpress que perfectamente podria costar 20$ mantener en un desarollo de casi 3 4k $ todo por querer meterlo microservicios. Y locuras así.
Y al final todo se resume en esto twitter.com/shanselman/status/968912658396098565
Lo de picar líneas de comandos y su aparente asquerosidad es una tontería pero claro, tienes que saber qué le estás mandando hacer a la máquina y, para ello, primero tienes que saber los conceptos y empezar a mirarlo todo desde arriba, con un nivel alto de abstracción e ir bajando paulatinamente.
Este artículo mola porque te explica esos conceptos, el como te pelees con ellos desde más abajo, como dije antes, requiere un poco de esfuerzo.
- ¿cómo se mete la aplicación en el docker?.
- ¿luego cómo se promociona el docker a producción?. ¿Con kubernetes?.
Nu se, oigo mucho hablar de esto, pero todavía no me ha quedado claro para qué sirve.
Tus problemas están más relacionados con el uso intensivo e histórico de sistemas Windows, que hacen que el uso de CLI te parezca cosa de marcianos y que llevan a situaciones como esta donde cuando se te presentan nuevas tecnologías vas más perdido que un pulpo en un garaje.
Lo de sidecar no lo he visto en el enlace que me has pasado. Pero ahora sí tengo tiempo así que lo busco yo.
Gracias por todo.
La unidad de computación mínima de Kubernetes no es el contenedor, sino el pod. Un pod consta de uno o varios contenedores que comparten ciertos namespaces. Eso da flexibilidad para hacer ciertas cosas.
Y sí, me parece una auténtica revolución (una vez configuras el infierno inicial).
Para ejecutar la imagen en producción no se necesita kubernetes, se puede ejecutar en un docker engine. Para aplicaciones complejas con muchos contenedores, servicios y recursos se emplea Kubernetes, que sería el orquestador, vigila los contenedores y los despliega en el cluster. Pero también se pueden hacer despliegues más sencillos usando swarm, sin necesidad de kubernetes. Tienes un buen tutorial de inicio con ejemplos sencillos en la propia página web de docker.
De nada, me alegro de que te haya gustado.
Ejemplo de ahora mismo:
You are trying to run a container which is more than 90 days old.
Microsoft recommends that you always run the latest version of our containers.
Set the environment variable ACCEPT_OUTDATED to 'Y' if you want to run this container anyway.
he vuelto a hacer un "pull" de la imagen (que no tengo ni idea donde esta) pero nada.
Ahora,en google, busca una respuesta perdida de un foro...
–env accept_outdated=Y
Ah, espera que tampoco:
docker : C:Program FilesDockerDockerResourcesbindocker.exe: invalid reference format.
Y decis que es super sencillo y para toda la familia.. Hombre, tener que andar como si fuera MSDOS en 2019... no mola mucho la verdad.
Y con los años me he seguido encontrando con personas que trabajaban en backoffice (administrando sistemas de MS), que si las sacabas de un entorno gráfico se sentían perdidas... en esos mismos departamentos había otras personas que hacían un uso intensivo de terminales de texto en cuanto tenían la opción!! y que conocían Bash mejor que yo (csh ya no tanto ).
Si la gente pasa un par de años formándose para administrar (incluso para programar) sistemas Windows, no siente curiosidad por otros OS y se encierra en eso que le enseñaron... acabará teniendo problemas; cada vez más, porque el ecosistema de servidores va hacia donde va y no es hacia MS (de hecho los que dirigen ahora MS, lo saben y ya están dando pasos hacia otra parte...).
En los procesos de migración en los que trabajé, no me ha extrañado encontrar usuarios que se se resisten a los cambios (cambios de aplicaciones y cambios de OS); pero si me extrañó bastante encontrar a profesionales en departamentos de informática también mostraban bastante resistencia al cambio (sobre todo cuando le llegó el turno al OS).
Me recuerda mucho a una ciudad española en la que, a principios de los años 80 había muchos talleres de mecánica (no servicios oficiales de marcas) que tenían carteles en los que rezaba (con más o menos fortuna ortográfica y sintáctica): "no se reparan vehículos de la marca Citroën"... En una ocasión le pregunté a un empleado por el motivo del cartel y me dijo que era porque se necesitaban tres o cuatro llaves articuladas y que los jefes no querían comprarlas... y que sin esas herramientas, las operaciones de mantenimiento llevaban bastante más tiempo.
Un contenedor no es más que una serie de procesos del sistema anfitrión encerrados; esto es, que su relación con el resto del sistema anfitrión está limitada. Por ejemplo, los procesos del contenedor no pueden ver el resto de procesos del sistema.
He usado OpenStack y no me parece sencillo para nada. Sólo la instalación ya requiere muchísimo tiempo, más luego que no salte algo por los aires al actualizar... sólo lo volvería a usar si tuviera algo muy, muy gordo. Mejor dicho, si hubiera varios sysadmin para que lo hicieran ellos.
La verdad es que, después de haberlo probado con minikube, me pareció que no era tan mala opción para algo como lo que suelo hacer, de tener varios servidores (menos de 10), y que así tenía una solución más o menos estándar, en vez de reinventar los mismos scripts, recetas de Chef, etc.
Ignorando la parte de instalación, que podría encontrar algún proveedor que lo diera ya hecho, ¿os parece que el mantenimiento de varias aplicaciones es complicado o pesado?
- Despliegues usando contenedores en vez de scripts y demás
- Distribuir la carga entre contenedores distribuidos entre varios servidores
- Un sistema que se pueda replicar para otros proyectos con pocos cambios, en vez de hacer las cosas ad-hoc
- Potencialmente en el futuro, poder crear contenedores para dotar de nuestro servicio a los usuarios cuando contratan y destruirlos cuando se dan de baja.
En ese caso, la complejidad sigue siendo la misma a nivel de plataforma, solo que en vez de hierro estás en una nube.
Set the environment variable ACCEPT_OUTDATED to 'Y' if you want to run this container anyway.
Primero, quien te da el error? El cliente de docker no? Pues la variable o te la pide el cliente, te la pide el servidor de docker/demonio.
Segundo, te pone ACCEPT_OUTDATED to 'Y', por que pones accept_outdated=Y ? Si te lo pone en mayúsculas para que lo cambias?
Por último y como como comentario no relacionado, aunque la libería estándar de go, GNU y Linux se lo comen, el estándar dice:
" Environment variable names used by the utilities in the XCU specification consist solely of upper-case letters, digits and the "_" (underscore) from the characters defined in Portable Character Set . Other characters may be permitted by an implementation; applications must tolerate the presence of such names. Upper- and lower-case letters retain their unique identities and are not folded together. The name space of environment variable names containing lower-case letters is reserved for applications. Applications can define any environment variables with names from this name space without modifying the behaviour of the standard utilities. "
pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html
Kubernetes creo que es una solución ideal para cosas muy grandes. De lo contrario es matar moscas a cañonazos. Y aun siendo grandes, como dice #111, si ya funcionan con otra plataforma a lo mejor es mejor no tocar.
Pero ni se me ocurre votar negativo.
Kubernetes es un infierno para echarlo a andar en servidores dedicados, y en mi entorno de desarrollo local.
No me interesa desplegar en Kubernetes en aws, o gcc si no puedo desplegar en Kubernetes en local, y muy importante también en dedicados.
Échale un ojo a traefik. He desterrado a nginx.
Pero a esas escalas hay recursos para tener un especialista en Kubernetes.
A mí que estoy startupeando, Kubernetes me viene grande.
Tengo 3 servidores dedicados con balanceo de carga por dns, y en cada uno de ellos traefik, y un docker compose por cada startup.
Una de las gracias de traefik es que te olvidas de asignar puertos etc.
La otra que lo configuras en el docker compose del proyecto. De modo que toda la configuración del despliegue vive en un único archivo.
La tolerancia a errores es buena en caso de que se caiga el servidor, pues el navegador prueba con otra ip, pero no tan buena en caso de que se caiga el servicio y el navegador recibe un 404 de traefik, ya que el navegador no entiende que el 404 es por la ip, sino por el recurso.
En estos momentos tengo bastante carga de desarrollo, cuando baje un poco miraré docker swarm a ver si me encaja.
Gracias.
Lo inaceptable, y lo que ocurre, es que unos pocos votos puedan sacar noticias de portada o impedir que lleguen. Como estos casos.
www.meneame.net/story/aportan-hoy-dia-politicos-sociedad
www.meneame.net/story/puedes-llamarlo-responsabilidad-pero-censura
www.meneame.net/story/juventud-sin-futuro-tambien-sin-pasado-falsas-pr
En fin, allá el dueño con sus ridiculas decisiones, que se esta cargando su propia página.
La gente de Red Hat estaba metiendo mucha historia en lo de rootless containers, rootlesss builds (que luego necesitaban setcap así que al final rootless por mis cojones pero bueno), se supone que el trio cri-o/podman/buildah era algo más seguro que docker/containerd y debería tener una política de SELinux y seccomp bastante buena, pero al final vamos, que al final no deja de ser un linux normal y corriente ejecutando procesos "enjaulados" con namespaces, cgroups, SELinux y seccomp.
#105 No, en el caso de RHCOS son contenedores. Hay ciertos runtimes de OCI que no son lo que se entiende contenedores al uso, por ejemplo kata containers construye una vm con un kernel mínimo y le plancha el contenedor en ese kernel.
Luego hay movidas raras que no son contenedores al uso, hay uno llamado gvisor que es un contenedor y le meten una capa adicional que intercepta ciertas syscalls (creo recordar que primero lo implemetaron con ptrace y luego hicieron alguna optimización con ebpf pero nunca llegué a entender como funciona internamente, no soy especialista en el kernel). Pero en el caso de RHCOS usa la misma tecnología por debajo que docker (aunque seguramente con unos valores por defecto más sensatos)
RHCOS utiliza OSTree para ser "inmutable", que lo que hace es que cuando reinicias restaura el estado previo (salvo que fuerces un nuevo ostree, que no recuerdo como se hace exactamente). Pero, si eres suficientemente listo para saltarte el sandbox, tambien lo eres para hacer cambios persistentes. Además no todos los directorios los gestiona con OSTree, por ejemplo /var y /etc si son mutables.
Está enfocado a evitar diferente versionado, permitir hacer rollback después de un upgrade, etc... No es un mecanismo de seguridad al uso.
Lo que tu llamas "sensacionalismo spam" mucha gente puede considerarlo "noticias interesantes"
El problema es que unos pocos puedan tirar una noticia interesante con tanta facilidad.
Por otro lado soy partidario de que las noticias sensacionalistas, erróneas, etc suban a portada. La razón es muy sencilla, no soy experto en todo y me gusta saber el porqué de las cosas. El mayor valor de Menéame son los comentarios (o mejor dicho eran) y entre la gente que comenta siempre hay gente dispuesta a explicar por qué esa noticia es sensacionalista o errónea o una basura. Si no suben esas noticias a portada nunca leeré los comentarios y cuando las vea en otros medios me la meterán doblada. Eso sin contar que la vara que se usa para medir si una noticia es sensacionalista (o lo que sea) es por ser suave, cuestioble. A veces llegan noticias a portada que son una basura (noticias sobre las que entiendo) y otras veces no llegan buenas noticias porque a alguien sin ni idea del tema le parece que no son "dignas" de portada...
En resumen, déjame leer las noticias, déjame leer los comentarios y ya me formaré yo mi propia opinión de si esa noticia es basura o no.
Pero bueno, como digo, esta solo es mi opinión.
Y sí, sé que puede que sea la excepción pero eso no significa que los votos negativos sean inútiles.
Igual algunos llevamos programando decadas y si hace falta pegarse con ello, lo hacemos. Pero me tocó bajar una imagen de esto y me tocó los cojones lo que me costó arrancarlo. Despues la url a la que apuntar, no funcionaba, despues noseque... Un puto desastre.
No voy a decir que era.
Y tengo docker para windows aqui mismito.
Podeis seguir con vuestros cliches.
docker crea un servidor, web, o lo que sea. la aplicacion la puedes meter con git, que se la descargue etc, o puede apuntar a una carpeta del sistema. o incluso a un disco en la nube, s3 lo que sea.
> esto parece un foro linux donde todos te miran como si fueras subnormal por no saber configurarte la red local desde
> la consola y compilarte un driver bajado del repositorio de su puta madre.
Si hubieras dicho "tengo XXX problema, ¿Me podeis ayudar?", seguramente nadie te hubiera respondido como lo he hecho yo.
Pero si dices "Y decis que es super sencillo y para toda la familia.. Hombre, tener que andar como si fuera MSDOS en 2019... no mola mucho la verdad.", te expones a que te digan que es tu culpa por no saber conceptos imprescindibles para trabajar en un entorno POSIX.
Es la excusa ideal para separar la mierda y que cuando lo tengas que poner todo a correr las dependencias que genera cada subaplicación no te hagan tener ganas de cortarte las venas.
Gracias a docker la basura antigua no te quita el sueño.
Aparte, le puedes asignar una cantidad limitada de recursos para que ese engendro que hizo Calamidad Martínez no esté petando el sistena cada 48 horas.
Dicho esto... no es la solución a todo, leches!!!
Ahí es ná.
Echale la culpa a MS, es bajada de ellos directamente. Siguiendo la puñetera ayuda.
Es que os repito, no podemos hablar de que algo mola la ostia cuando me estais diciendo que me haga un curso para arrancar una imagen que tenia parada mas de 90 dias. Ahora se me esta bajando otra nueva, creo. No se ni donde, pero bueno, ahi va, a algun sitio, desde algun sitio.
Si tienes montado una suite de virtualización como pueda ser vmWare u oVrit que conoces como dios, y tienes a gente que pilota la ostia de Apache y tienes una docena de aplicaciones monolíticas que despliegan de pascuas a ramos, seguramente te convenga más quedarte como estás.
Yo diría que para tener un kubernetes bien montado y productivo necesitas mínimo 3 o 4 sysadmins dedicados a ello. Si para gestionar las aplicaciones y despliegues necesitas un 5º ya te empieza a interesar kubernetes.
Kubernetes por otro lado gestiona bastante mal cierto tipo de cargas, por ejemplo las bases de datos salvo que hayan sido especificamente diseñadas para ejecutarse en un entorno volátil, no es meter tu aplicación en un contenedor y a correr, si tienes un volumen grande de aplicaciones que no gestionan bien las paradas (recordemos que en kubernetes no hay live migration) a lo mejor tiene más sentido un openstack o incluso tirar de un IaaS público.
Respecto a usar un kubernetes gestionado si encuentras un buen kubernetes gestionado es buena opción, tengo entendido que Red Hat vende OpenShift gestionado, en instalaciones on premise seguramente sean los que más éxito tienen así que imagino que el gestionado no irá mal tampoco. También lo vende amazon y google cloud aunque no los he probado. El de azure dicen que va bastante bien aunque yo me llevé mala impresión cuando lo probé (eso si, acababa de salir, y SEGURO uqe ha mejorado, no se si
Lo que sí tengo claro es que no has trabajado profesionalmente en esto por lo que dices, y si lo has hecho habrá sido en cosas muy pequeñas.
Tu no usas git en una consola????
Parece que no, cuando dices que hay que escribir los hash a mano.
Esta claro que nivel muy alto no trabajas cuando dices semenjante cosas, pues precisamente la forma mas rapida de desplegar codigo , en un contener es una instancia es precisamente con docker , una consola y todos los beneficios de trabajar en una consola.
Eso que dices está bien para cosas pequeñas. Si tienes un clúster como el de un banco lo que haces puede ser difícil de gestionar. Kubernetes es más adecuado.
¿Por qué un contenedor para cada página es un absurdo y una máquina virtual para cada página (es lo que entiendo que propones, aunque no lo entiendo del todo) no lo es?
Lo que tienes no me parece mala opción, salvo dos puntos aparentemente: el balanceo por DNS puede ser problemático y no sé qué tolerancia a fallos tienes. Esto último lo solucionarías con algo como Swarm, aunque nunca lo he probado.