{"id":2787,"date":"2018-05-03T22:41:37","date_gmt":"2018-05-04T02:41:37","guid":{"rendered":"http:\/\/arielantigua.com\/weblog\/?p=2787"},"modified":"2021-02-19T14:10:48","modified_gmt":"2021-02-19T18:10:48","slug":"kubernetes-usando-rancher-2-0-para-crear-y-administrar-clusters-de-k8s","status":"publish","type":"post","link":"https:\/\/arielantigua.com\/weblog\/2018\/05\/kubernetes-usando-rancher-2-0-para-crear-y-administrar-clusters-de-k8s\/","title":{"rendered":"Kubernetes \u2013 usando Rancher 2.0 para crear y administrar clusters de k8s!"},"content":{"rendered":"<p>Kubernetes \u2013 usando Rancher 2.0 para crear y administrar clusters de k8s!<\/p>\n<p>Desde hace semanas estoy jugando con Kubernetes. La idea inicial ha sido armar un cluster usando herramientas nativas de k8s (kubeadm), de esta forma aprender\u00eda el funcionamiento base de la plataforma, lo gracioso es que pens\u00e9 que lo estaba haciendo \u201cde la manera dif\u00edcil\u201d, pero creo que no era as\u00ed. Al parecer existe la manera \u201cThe hard way\u201d la cual asusta por el simple hecho que todas las configuraciones e instalaciones son de manera manual, sin usar herramientas que autogeneran como es el caso de kubeadm. Al final, la raz\u00f3n de realizar la instalaci\u00f3n de esta manera es con fin educativos, es recomendable conocer el porqu\u00e9 de las cosas.<\/p>\n<p><strong>Kubernetes the hard way.<\/strong><\/p>\n<p><a href=\"https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way\">https:\/\/github.com\/kelseyhightower\/kubernetes-the-hard-way<\/a><\/p>\n<p>Con Kubernetes, aprender como funcionan los componentes se ha alargado m\u00e1s de la cuenta ya que el ecosistema es inmenso, y cada vez que pens\u00e9 \u201c<a href=\"https:\/\/arielantigua.com\/weblog\/2018\/04\/kubernetes-montandonos-un-entorno-de-pruebas-homelab\/\" target=\"_blank\" rel=\"noopener\"><strong>Ya est\u00e1 instalado, ahora a desplegar algunos contenedores<\/strong><\/a>\u201d, me topaba con que ten\u00eda que instalar otras herramientas antes de (\u00a1<strong>nginx-ingress, te miro a ti!<\/strong>). otro factor fue que intente mezclar arquitecturas, quer\u00eda tener adm64 y arm64.<\/p>\n<p>Por ejemplo, cuando ya ten\u00eda el cluster creado, surgi\u00f3 la necesidad de acceder a las aplicaciones desde el exterior (\u00bfInternet?), esto se resuelve muy f\u00e1cil, Ingress Controller! Luego tenemos el tema del almacenamiento y as\u00ed surgieron otras necesidades que cubrir para tener una soluci\u00f3n que funcionara completamente.<\/p>\n<p><a href=\"https:\/\/rancher.com\/what-is-rancher\/overview\/\" target=\"_blank\" rel=\"noopener\"><strong>Rancher 2.0<\/strong><\/a><\/p>\n<p>Ya hab\u00eda escuchado (le\u00eddo\u2026) de esta plataforma, al principio me hab\u00eda confundido y pensaba que era de pago tambi\u00e9n la hab\u00eda confundido con RancherOS, este es un Linux con lo necesario para correr contenedores, igual que CoreOS.<\/p>\n<p>Rancher es una plataforma para la administraci\u00f3n de cluster de Kubernetes, esto es as\u00ed en la versi\u00f3n 2.0, est\u00e1 basada totalmente en Kubernetes.<\/p>\n<p><strong>Instalando Rancher.<\/strong><\/p>\n<p>La instalaci\u00f3n de esta plataforma es tan sencilla como correr cualquier otro Docker container, leyendo en Quick Start Guide, podemos ver que se usa Docker run para inicializar el contenedor. En mi caso he agregado varios valores que no est\u00e1n en la gu\u00eda de inicio.<\/p>\n<p>docker run -d &#8211;restart=unless-stopped -p 80:80 -p 443:443 -v \/var\/lib\/rancher:\/var\/lib\/rancher rancher\/rancher:latest &#8211;acme-domain rancher.aanetworks.org<\/p>\n<p><strong>-v \/var\/lib\/rancher:\/var\/lib\/rancher<\/strong><\/p>\n<p>Luego de varios d\u00edas de usar <strong>Rancher<\/strong>, me toco reiniciar el contenedor y para mi sorpresa perd\u00ed todos los cambios que hab\u00eda hecho, todo muy b\u00e1sico, pero es poco alentador ver algo as\u00ed. Resulta que toda la configuraci\u00f3n generada por etcd es almacenada en \/var\/lib\/rancher\/ junto a otras informaciones de la plataforma.<\/p>\n<p><strong>&#8211;acme-domain rancher.aanetworks.org<\/strong><\/p>\n<p>Luego de la aparici\u00f3n de Let\u2019s Encrypt, \u00a1porque no tener SSL en los dominios de acceso p\u00fablico o privados!<\/p>\n<p>Con esta l\u00ednea conseguimos que Rancher solicite un SSL para el dominio que usaremos con la plataforma, debemos tener los puertos 80 y 443 accesible desde Internet para que proceda la validaci\u00f3n de dicho dominio.<\/p>\n<p>Esperamos varios minutos (5?) y luego procedemos a acceder al portal de administraci\u00f3n, en mi caso es <a href=\"https:\/\/rancher.aanetworks.org\">https:\/\/rancher.aanetworks.org<\/a>, lo primero que recibiremos es un mensaje solicitando un cambio de password para el usuario admin, luego de especificar el password, tendremos acceso a la plataforma.<\/p>\n<p><strong>Clusters!<\/strong><\/p>\n<p>La primera opci\u00f3n ofrecida por Rancher luego de hacer login es la creaci\u00f3n de un cluster, a diferencia de la versi\u00f3n 1.x la cual no he usado, la versi\u00f3n 2.0 ofrece crear clusters de Kubernetes o importarlos si ya se tiene alguno.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1604\" height=\"479\" class=\"wp-image-2789\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image.png 1604w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-300x90.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-768x229.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-1024x306.png 1024w\" sizes=\"auto, (max-width: 1604px) 100vw, 1604px\" \/><\/p>\n<p>Tenemos opci\u00f3n de crear Google Kubernetes Engine (GKE), Amazon EKS, Azure Container Service (AKS), hasta se puede conectar con Digital Ocean para provisionar VM all\u00ed y agregarlas a un cluster. Por el momento solo he podido jugar con la integraci\u00f3n de <strong>vSphere<\/strong> y <strong>Custom<\/strong>. En caso de <strong>Custom<\/strong>, luego de crear el cluster, se nos entrega un comando <strong>docker run<\/strong> para ser ejecutado en los nodos que deseamos agregar, estos ya deben tener una versi\u00f3n de Linux soportada junto a docker en una de las versiones soportadas.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1611\" height=\"917\" class=\"wp-image-2790\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-1.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-1.png 1611w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-1-300x171.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-1-768x437.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-1-1024x583.png 1024w\" sizes=\"auto, (max-width: 1611px) 100vw, 1611px\" \/><\/p>\n<p>En esta captura se pueden ver las opciones ofrecidas por Rancher para la creaci\u00f3n de un cluster tipo Custom.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"502\" height=\"342\" class=\"wp-image-2791\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-2.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-2.png 502w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-2-300x204.png 300w\" sizes=\"auto, (max-width: 502px) 100vw, 502px\" \/><\/p>\n<p>En la versi\u00f3n 2.0 GA, se disponen de las versiones de Kubernetes listadas aqui para ser desplegadas a los nodos.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"523\" height=\"240\" class=\"wp-image-2792\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-3.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-3.png 523w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-3-300x138.png 300w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/p>\n<p>Como CNI (Container Network Interface) tenemos Flannel, Calico y Canal. Tengo entendido que Canal es una mezcla entre Flannel y Calico. Me gustar\u00eda que en lo adelante agregaran wave, aunque entiendo que necesito investigar m\u00e1s sobre Canal.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"379\" height=\"163\" class=\"wp-image-2793\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-4.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-4.png 379w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-4-300x129.png 300w\" sizes=\"auto, (max-width: 379px) 100vw, 379px\" \/><\/p>\n<p>Pod Security, a\u00fan no he usado esta opci\u00f3n, entiendo que es un mecanismo para controlar el acceso a pods cuando est\u00e1n en namespace diferentes.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"457\" height=\"144\" class=\"wp-image-2794\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-5.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-5.png 457w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-5-300x95.png 300w\" sizes=\"auto, (max-width: 457px) 100vw, 457px\" \/><\/p>\n<p>Rancher publica una lista de versiones de Docker soportadas, pero en la creaci\u00f3n del cluster podemos elegir si deseamos que las versiones no soportadas puedan ser usadas.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1577\" height=\"684\" class=\"wp-image-2795\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-6.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-6.png 1577w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-6-300x130.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-6-768x333.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-6-1024x444.png 1024w\" sizes=\"auto, (max-width: 1577px) 100vw, 1577px\" \/><\/p>\n<p>Podemos ver en el mensaje, debemos ejecutar ese docker run en uno o m\u00e1s servidores que deseamos formen parte de este cluster.<\/p>\n<p>Node Role, necesitamos al menos un <strong>etcd<\/strong>, un <strong>control<\/strong> y un <strong>worker<\/strong> para comenzar a jugar con este cluster, los siguientes equipos que agreguemos al cluter pueden tener el role de Worker.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1636\" height=\"843\" class=\"wp-image-2796\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-7.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-7.png 1636w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-7-300x155.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-7-768x396.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-7-1024x528.png 1024w\" sizes=\"auto, (max-width: 1636px) 100vw, 1636px\" \/><\/p>\n<p>As\u00ed es como se ve un cluster de Kubernetes desde el dashboard de Rancher.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1193\" height=\"776\" class=\"wp-image-2797\" src=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-8.png\" srcset=\"https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-8.png 1193w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-8-300x195.png 300w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-8-768x500.png 768w, https:\/\/arielantigua.com\/weblog\/wp-content\/uploads\/2018\/05\/word-image-8-1024x666.png 1024w\" sizes=\"auto, (max-width: 1193px) 100vw, 1193px\" \/><\/p>\n<p>Al hacer click \u201cLaunch kubectl\u201d, tendremos esta linda ventana que nos permitir\u00e1 hacer todo tipo de operaciones usando kubectl. Otra opci\u00f3n es descargar el archivo de configuraci\u00f3n, colocarlo en una maquina con kubectl para poder interactuar con el cluster de Kubernetes. Debemos tener en cuenta que de esta manera todas las operaciones son atreves del servidor con Rancher.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes \u2013 usando Rancher 2.0 para crear y administrar clusters de k8s! Desde hace semanas estoy jugando con Kubernetes. La idea inicial ha sido armar un cluster usando herramientas nativas de k8s (kubeadm), de esta forma aprender\u00eda el funcionamiento base de la plataforma, lo gracioso es que pens\u00e9 que lo estaba haciendo \u201cde la manera [&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,131],"tags":[130,129,139,132],"class_list":["post-2787","post","type-post","status-publish","format-standard","hentry","category-kubernetes","category-rancher","tag-docker","tag-k8s","tag-kubernetes","tag-rancher"],"_links":{"self":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/2787","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=2787"}],"version-history":[{"count":0,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/posts\/2787\/revisions"}],"wp:attachment":[{"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/media?parent=2787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/categories?post=2787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arielantigua.com\/weblog\/wp-json\/wp\/v2\/tags?post=2787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}