{"id":2864,"date":"2019-01-09T10:41:15","date_gmt":"2019-01-09T14:41:15","guid":{"rendered":"http:\/\/arielantigua.com\/weblog\/?p=2864"},"modified":"2021-02-19T14:10:26","modified_gmt":"2021-02-19T18:10:26","slug":"kubernetes-montandonos-un-entorno-de-pruebas-y-produccion-homelab-parte2","status":"publish","type":"post","link":"https:\/\/arielantigua.com\/weblog\/2019\/01\/kubernetes-montandonos-un-entorno-de-pruebas-y-produccion-homelab-parte2\/","title":{"rendered":"Kubernetes \u2013 mont\u00e1ndonos un entorno de pruebas y producci\u00f3n \u2013 homeLAB \u2013 Parte2"},"content":{"rendered":"<p>Kubernetes \u2013 mont\u00e1ndonos un entorno de pruebas y producci\u00f3n \u2013 homeLAB \u2013 Parte2<\/p>\n<p>Hace unos meses escrib\u00ed como iniciaba un entorno k8s en casa para hacer pruebas y entender las ventajas de esta nueva plataforma que est\u00e1 revolucionando la forma en que manejamos contenedores.<\/p>\n<p><a href=\"https:\/\/arielantigua.com\/weblog\/2018\/04\/kubernetes-montandonos-un-entorno-de-pruebas-homelab\/\">En mi primer intento<\/a> me auxilie de varios Raspberry Pi los cuales son excelentes para peque\u00f1os procesos y pruebas, lamentablemente en mi caso no me gust\u00f3 mucho el resultado. En un segundo intento, use la distribuci\u00f3n de <em>Rancher<\/em> junto a su plataforma de administraci\u00f3n que permite provisionar un cluster ya sea en premisa o en la nube, en todos mis intentos lo hice en premisa ya que no cuento con un presupuesto para pagar horas en <em>Amazon<\/em> o <em>Google<\/em>.<\/p>\n<p>En esta \u201csegunda parte\u201d he llegado mucho m\u00e1s lejos y con mejores resultados, digamos que ahora me he tomado m\u00e1s tiempo para entender c\u00f3mo se conectan las partes y he decidido administrar k8s sin ning\u00fan front-end. Esta vez no he usado RPi, todo se ha instalado en Ubuntu 16.04 con la distribuci\u00f3n de Rancher llamada RKE (Rancher Kubernetes Engine). <a href=\"https:\/\/github.com\/rancher\/rke\">https:\/\/github.com\/rancher\/rke<\/a><\/p>\n<p><em>Rancher Kubernetes Engine, an extremely simple, lightning fast Kubernetes installer that works everywhere.<\/em><\/p>\n<p>Esta es la descripci\u00f3n del Proyecto en <em>Github<\/em>, se puede decir que es una de las maneras m\u00e1s r\u00e1pidas de tener un cluster de <em>k8s<\/em>, al menos que yo he probado hasta el momento.<\/p>\n<p><em>BOM<\/em>:<\/p>\n<ul>\n<li>3 Ubuntu Servers 16.04 \u2013 en mi caso, estos son tres m\u00e1quinas virtuales.<\/li>\n<li>1 Management server \u2013 Otra VM con Ubuntu, no necesariamente debe ser la misma versi\u00f3n que los nodos del cluster.<\/li>\n<li>Un rango de direcciones IP para MetalLB.<\/li>\n<\/ul>\n<p>Instalando RKE:<\/p>\n<p>Primero debemos revisar cumplimos con el <em>Node Requriments<\/em>. <em>Rancher<\/em> tiene una tabla con las recomendaciones de <em>OS<\/em>, <em>hardware<\/em> y <em>Networking<\/em>.<\/p>\n<p><a href=\"https:\/\/rancher.com\/docs\/rancher\/v2.x\/en\/installation\/requirements\/\">https:\/\/rancher.com\/docs\/rancher\/v2.x\/en\/installation\/requirements\/<\/a><\/p>\n<p>Luego procederemos a preparar el equipo que usaremos para levantar el cluster de RKE.<\/p>\n<p><a href=\"https:\/\/rancher.com\/docs\/rke\/v0.1.x\/en\/installation\/\">https:\/\/rancher.com\/docs\/rke\/v0.1.x\/en\/installation\/<\/a><\/p>\n<p>En mi caso fue descargar el binario para Linux y colocarlo en mi <em>PATH<\/em>, crear un <em>cluster configuration file<\/em>, este archivo puede tener cualquier nombre, para simplificar los pasos le pondremos <em>cluster.yml<\/em> igual que la documentaci\u00f3n de <em>Rancher<\/em>.<\/p>\n<p>En este archivo [cluster.yml] colocaremos la informaci\u00f3n de los nodos que usaremos para formar el cluster, antes de poder lanzar este proceso debemos cumplir con algunos pasos.<\/p>\n<ol>\n<li>En la maquina usada para administraci\u00f3n necesitamos contar con SSH keys, desplegar este key en los nodos del cluster, RKE no env\u00eda password para hacer login a estos nodos, por esta raz\u00f3n debemos tener ssh-passwordless.<\/li>\n<li><em>Docker<\/em> ya instalado y el usuario que cuenta con los keys de SSH en el grupo de <em>Docker<\/em>.<\/li>\n<\/ol>\n<p>La forma m\u00e1s r\u00e1pida de cumplir con este paso es usando un script ya preparado para realizar esta tarea, este script es oficialmente soportado por <em>Rancher<\/em>.<\/p>\n<p><a href=\"https:\/\/rancher.com\/docs\/rke\/v0.1.x\/en\/os\/\">https:\/\/rancher.com\/docs\/rke\/v0.1.x\/en\/os\/<\/a><\/p>\n<pre>curl&nbsp;<a href=\"https:\/\/releases.rancher.com\/install-docker\/17.03.sh\">https:\/\/releases.rancher.com\/install-docker\/17.03.sh<\/a>&nbsp;| sh<\/pre>\n<ol>\n<li>Tener las herramientas necesarias en la m\u00e1quina de administraci\u00f3n, una de ellas es <strong><em>kubelet<\/em><\/strong>. En el caso de <em>Ubuntu<\/em> se instala como cualquier otro paquete usando <em>APT<\/em>.<\/li>\n<\/ol>\n<p>En la siguiente imagen se puede apreciar el mensaje final del script para instalar Docker versi\u00f3n 17.03.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1253\" height=\"836\" class=\"wp-image-2865\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image.png 1253w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-300x200.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-768x512.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-1024x683.png 1024w\" sizes=\"auto, (max-width: 1253px) 100vw, 1253px\" \/><\/p>\n<p>Ya podemos continuar con la preparaci\u00f3n del cluster.yaml. Yo he usado uno bastante sencillo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"331\" height=\"373\" class=\"wp-image-2866\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-1.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-1.png 331w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-1-266x300.png 266w\" sizes=\"auto, (max-width: 331px) 100vw, 331px\" \/><\/p>\n<p>Ejecutando RKE para inicializar el cluster.<\/p>\n<p><em>rke<\/em> up \u2013config rancher-cluster.yml<\/p>\n<p>Al finalizar este proceso, tendremos un mensaje como:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1058\" height=\"645\" class=\"wp-image-2867\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-2.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-2.png 1058w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-2-300x183.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-2-768x468.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-2-1024x624.png 1024w\" sizes=\"auto, (max-width: 1058px) 100vw, 1058px\" \/><\/p>\n<p>Para probar que nuestros nodos responden y que tenemos un cluster de <em>k8s<\/em>, copiamos el archivo resultante de la operaci\u00f3n anterior [<em>kube_config_rancher-cluster.yml<\/em>] a la ubicaci\u00f3n por defecto usada por <strong><em>kubectl<\/em><\/strong>.<\/p>\n<p>cp kube_config_rancher-cluster.yml ~.\/kube\/config<\/p>\n<p>Una alternativa cargarlo en la variable KUBECONFIG:<\/p>\n<p>export KUBECONFIG=$(pwd)\/kube_config_rancher-cluster.yml<\/p>\n<p>Hacemos un <em>kubectl get nodes<\/em>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"765\" height=\"140\" class=\"wp-image-2868\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-3.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-3.png 765w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2019\/01\/word-image-3-300x55.png 300w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/p>\n<p>\u2026 Houston, we have a cluster.<\/p>\n<p>Alguien preguntara: \u00bfYa t\u00e9menos un cluster, ahora que hacemos con \u00e9l?<\/p>\n<p>En el estado actual, se pueden desplegar aplicaciones que no hagan uso de almacenamiento persistente (no me gusta el hostPath) y que hagan uso del host IP ya que no tenemos un LoadBalacer instalado. Para el pr\u00f3ximo articulo estar\u00e9 desplegando dos soluciones para que nuestro cluster se parezca m\u00e1s a un GKE o un EKS.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes \u2013 mont\u00e1ndonos un entorno de pruebas y producci\u00f3n \u2013 homeLAB \u2013 Parte2 Hace unos meses escrib\u00ed como iniciaba un entorno k8s en casa para hacer pruebas y entender las ventajas de esta nueva plataforma que est\u00e1 revolucionando la forma en que manejamos contenedores. En mi primer intento me auxilie de varios Raspberry Pi los [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[128,10,131,124],"tags":[129,139,132],"class_list":["post-2864","post","type-post","status-publish","format-standard","hentry","category-kubernetes","category-linux","category-rancher","category-ubuntu","tag-k8s","tag-kubernetes","tag-rancher"],"_links":{"self":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/2864","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/comments?post=2864"}],"version-history":[{"count":0,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/2864\/revisions"}],"wp:attachment":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/media?parent=2864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/categories?post=2864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/tags?post=2864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}