{"id":3740,"date":"2020-10-19T13:01:08","date_gmt":"2020-10-19T11:01:08","guid":{"rendered":"https:\/\/hoplasoftware.com\/?p=3740"},"modified":"2024-07-17T12:08:15","modified_gmt":"2024-07-17T10:08:15","slug":"portworx-essentials","status":"publish","type":"post","link":"https:\/\/hopla.tech\/en\/portworx-essentials\/","title":{"rendered":"Portworx Essentials como almacenamiento persistente en Kubernetes"},"content":{"rendered":"<p class=\"has-text-align-center\"><em>Javier Ram\u00edrez-Urea, arquitecto de soluciones en Hopla! Software<\/em><\/p>\n\n\n\n<p>Hoy, os traemos este post sobre <a href=\"https:\/\/docs.portworx.com\/concepts\/portworx-essentials\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Portworx Essentials<\/span><\/a><span class=\"has-inline-color has-luminous-vivid-amber-color\">.<\/span> <\/p>\n\n\n\n<p>En \u00e9l, vamos a hablar de <strong>c\u00f3mo utilizar esta herramienta para ofrecer almacenamiento persistente y distribuido a las aplicaciones desplegadas en <a href=\"https:\/\/kubernetes.io\/es\/docs\/concepts\/overview\/what-is-kubernetes\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Kubernetes<\/span><\/a>.&nbsp;<\/strong><\/p>\n\n\n\n<p>El caso que os traemos es desplegar un simple <a href=\"https:\/\/es.wordpress.com\/create\/?v=spain_go_to_market&amp;utm_source=google&amp;utm_campaign=google_wpcom_search_brand_desktop_es_es&amp;utm_medium=paid_search&amp;keyword=wordpress&amp;creative=339382685172&amp;campaignid=662707367&amp;adgroupid=54953985106&amp;matchtype=e&amp;device=c&amp;network=g&amp;targetid=kwd-313411415&amp;gclsrc=aw.ds&amp;gclid=Cj0KCQjw8rT8BRCbARIsALWiOvRjhRsQJR_ExXEEHHYsTjElBcnAsSOcgBLfQSxfk0XSwH_SCbJnl1oaAoxIEALw_wcB\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">WordPress<\/span><\/a>. <\/p>\n\n\n\n<p>Veremos c\u00f3mo el almacenamiento persistente nos permite mover la base de datos, o el propio frontal de <a href=\"https:\/\/es.wordpress.com\/create\/?v=spain_go_to_market&amp;utm_source=google&amp;utm_campaign=google_wpcom_search_brand_desktop_es_es&amp;utm_medium=paid_search&amp;keyword=wordpress&amp;creative=339382685172&amp;campaignid=662707367&amp;adgroupid=54953985106&amp;matchtype=e&amp;device=c&amp;network=g&amp;targetid=kwd-313411415&amp;gclsrc=aw.ds&amp;gclid=Cj0KCQjw8rT8BRCbARIsALWiOvRjhRsQJR_ExXEEHHYsTjElBcnAsSOcgBLfQSxfk0XSwH_SCbJnl1oaAoxIEALw_wcB\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">WordPress<\/span><\/a>, a cualquier nodo.<\/p>\n\n\n\n<p>Al tratarse de una versi\u00f3n gratuita, no tendremos acceso a algunas de las caracter\u00edsticas de la versi\u00f3n empresarial, a parte de las diferencias de volumen. Por ello, os recomendamos consultar m\u00e1s informaci\u00f3n sobre este despliegue <a href=\"https:\/\/docs.portworx.com\/concepts\/portworx-essentials\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">aqu\u00ed<\/span><\/a>.&nbsp;<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">Desplegar WordPress usando Portworx Essentials<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>#Paso 1<\/strong> <\/h4>\n\n\n\n<p>El primer paso es parte de un cluster muy sencillo de Kubernetes. Para esta prueba desplegamos cuatro m\u00e1quinas virtuales con <a href=\"https:\/\/www.terraform.io\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Terraform <\/span><\/a>y posteriormente lo realizamos con Kubernetes con nuestros playbooks <a href=\"https:\/\/www.redhat.com\/es\/technologies\/management\/ansible\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Ansible<\/span><\/a>.&nbsp;<\/p>\n\n\n\n<p>En unos minutos tenemos un cluster con un master y tres nodos worker.&nbsp;<\/p>\n\n\n\n<p>Nuestro despliegue Terraform prepara 25GB de disco en cada nodo worker. Estos discos son los que usaremos como dispositivo de bloques para que <a href=\"https:\/\/hoplasoftware.com\/portworx\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Portworx <\/span><\/a>gestione como almacenamiento persistente en nuestro cluster.&nbsp;<\/p>\n\n\n\n<p>Utilizaremos un <a href=\"https:\/\/es.wikipedia.org\/wiki\/Balanceador_de_carga\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">balanceador <\/span><\/a>externo que redirija las peticiones al FQDN \u201cwordpress.hoplalabs.local\u201d a nuestro <a href=\"https:\/\/www.nginx.com\/products\/nginx\/kubernetes-ingress-controller\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Ingress Controller <\/span><\/a>desplegado en el cluster.<\/p>\n\n\n\n<p>Para la instalaci\u00f3n de WordPress usaremos un Chart de <a href=\"https:\/\/bitnami.com\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Bitnami<\/span><\/a>, por lo que nuestro entorno cuenta con <a href=\"https:\/\/helm.sh\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Helm <\/span><\/a>ya instalado.<\/p>\n\n\n\n<p>Partiendo de este entorno, revisamos la versi\u00f3n de Kubernetes. <strong>IMPORTANTE<\/strong>: ser\u00e1 necesario para desplegar Portworx de forma apropiada.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ kubectl get nodes<\/strong><\/p>\n\n\n\n<p>NAME &nbsp; &nbsp; &nbsp; &nbsp; STATUS &nbsp; ROLES&nbsp; &nbsp; AGE &nbsp; &nbsp; VERSION<\/p>\n\n\n\n<p>kube-node1 &nbsp; Ready&nbsp; &nbsp; master &nbsp; 10m &nbsp; &nbsp; v1.18.2<\/p>\n\n\n\n<p>kube-node2 &nbsp; Ready&nbsp; &nbsp; &lt;none&gt; &nbsp; 7m45s &nbsp; v1.18.2<\/p>\n\n\n\n<p>kube-node3 &nbsp; Ready&nbsp; &nbsp; &lt;none&gt; &nbsp; 5m21s &nbsp; v1.18.2<\/p>\n<\/div><\/div>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Entramos en el portal de Portworx para generar un fichero de despliegue de la plataforma.&nbsp;<\/h4>\n\n\n\n<p>Es un proceso muy sencillo que nos gu\u00eda con sencillas preguntas sobre nuestra infraestructura subyacente. Con nuestras respuestas, el portal genera un fichero que podremos usar directamente.<\/p>\n\n\n\n<p>Registro en Portworx Essentials para crear una cuenta en la plataforma <a href=\"https:\/\/central.portworx.com\/.\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Portworx <\/span><\/a><span class=\"has-inline-color has-luminous-vivid-amber-color\"><a href=\"https:\/\/central.portworx.com\/.\">Central<\/a> <\/span>y obtener un usuario de acceso:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/cHooEo4MguWXGkfbeqGRlRsUqTb8q8e2Cb7nJU40JlSs6QzF30PdIlFsRWZbM3Z7IGF1qj4HJztsA2rrhRy_I--KmssRwkAkIdNEebHZL5dWDRt1gwbYlvKl00oXxc-w1JjBItDD\" alt=\"\"\/><\/figure>\n\n\n\n<p>Una vez dentro, nos dirigimos a \u201cInstall and Run\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/g1L1Z4nnH8jPm12JY6VUE_EyXx9Pz8Hxs0sJ2-aNdDpOKAvd8nPfWiFf_s3Nzyf_nEoaimi04GPxnUpVfC-FkqyykCx4JXP2OLqunE3XftzPjyJEtCl1DOvAP-q6ZMYWwdE4_FNi\" alt=\"\"\/><\/figure>\n\n\n\n<p>Nos abrir\u00e1 un entorno \u201dwizard\u201d que nos guiar\u00e1 por las distintas opciones de plataforma, recopilando la informaci\u00f3n necesaria para desplegar Portworx en nuestra infraestructura.&nbsp;<\/p>\n\n\n\n<p>Esta herramienta es <a href=\"https:\/\/github.com\/w3c\/spec-generator\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">Spec <\/span><\/a><span class=\"has-inline-color has-luminous-vivid-amber-color\"><a href=\"https:\/\/github.com\/w3c\/spec-generator\">Generator<\/a> <\/span>y nos permite generar los ficheros de despliegue completos, con todos los componentes y caracter\u00edsticas necesarias.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/yIG7ofBExtURyNEroLfHnWaiZecDzyHD74R-yGh5-s5NKRHZcbPT-v9mTeEBS7KCJzFIf-u00DqsyyeWJhySx17finpx6wkEII78jwOsVFtztSZOo1ntf2La_PgR2enDwhlVOqr9\" alt=\"\"\/><\/figure>\n\n\n\n<h5 class=\"wp-block-heading\">La primera opci\u00f3n que debemos elegir es qu\u00e9 tipo de plataforma vamos a desplegar.&nbsp;<\/h5>\n\n\n\n<p>Podemos elegir entre Portworx Essentials y<a href=\"https:\/\/portworx.com\/products\/portworx-enterprise\/\"> <span class=\"has-inline-color has-luminous-vivid-amber-color\">Portworx Enterprise<\/span><\/a>. <\/p>\n\n\n\n<p>Para un entorno de demo, preproducci\u00f3n o desarrollo, recomendamos usar Portworx Essentials. Esta plataforma nos ayudar\u00e1 a entender y ver las caracter\u00edsticas m\u00e1s importantes de Portworx.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/blTiQDbYiIlyGULExVJBEfB5muc_vhUN34zFV2Cqf-tjutqfSddlUKHwc_JHviqMEmDTy7Ua3nz0EcZmEwtTc3akQGSDyRWl0xVFfuSEwdvYeOfndJLf0juT9ilP9YQ3AHIs-00F\" alt=\"\"\/><\/figure>\n\n\n\n<p>Porworx Essentials nos permite gestionar un m\u00e1ximo de 500 vol\u00famenes y 5TB de informaci\u00f3n. Adem\u00e1s, acepta un m\u00e1ximo de 5 nodos, lo que supone un m\u00e1ximo de 1TB por nodo. Portworx Essentials se puede gestionar con un \u00fanico cluster de Portwox, por lo que ser\u00e1 recomendable usar Portworx Enterprise en entorno multi-tenant, por ejemplo.<\/p>\n\n\n\n<p>Una vez seleccionamos Portworx Essentials, comienza la recogida de informaci\u00f3n de nuestro despliegue. Lo primero que necesitamos saber es la versi\u00f3n de Kubernetes sobre la que se ejecutar\u00e1 la plataforma y la versi\u00f3n de Portworx que desplegaremos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/QiNwI7rczqBp_G5oq-AGzHK3Z0DTe8EBUMrseGC3cQKEL0PEapOOQ1UoawGaOff4rD0wkPiJOeGrsF3Xe_dojSDtwzSNbE1xNuHrGh7PrnLp2vCDYJ0U3eGh5wt_SLj3-vekhgae\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>#Paso 2<\/strong><\/h4>\n\n\n\n<p>En este paso se configura si el despliegue se realizar\u00e1 en alguna nube o en nuestro centro de datos.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/U1ffEWuZFm23WJA2JWBp4DHBHGc0Z_07qXnToLMAiay8KDzkgmZP-yXJ7RnH1HS9qbZ8jxnv_Gjb517GFefOFXrlL2BP-ihDodKleCX7rkjZhZQ-v7YsYe7O92pGfzQPhSeF-u9U\" alt=\"\"\/><\/figure>\n\n\n\n<p>Seleccionaremos c\u00f3mo queremos que Portworx gestione los discos. <\/p>\n\n\n\n<p>En este ejemplo, dejaremos que Portworx busque el almacenamiento disponible y lo adquiera para persistencia.<\/p>\n\n\n\n<p>Nos preguntar\u00e1, adem\u00e1s, por la generaci\u00f3n de un disco de journal para gestionar las sincronizaciones y evitar cuellos de botella.  Dejamos que Portworx lo genere por nosotros.<\/p>\n\n\n\n<p>El \u00faltimo punto de esta fase se refiere a la disposici\u00f3n de un entorno de KeyValue.&nbsp;<\/p>\n\n\n\n<p><strong>NOTA<\/strong>: Portworx puede usar un entorno externo (recomendable) o bien generar el suyo propio. En el caso de permitir la generaci\u00f3n de su propia base de datos, es recomendable usar un disco espec\u00edfico.  Dado que se trata de una demo r\u00e1pida, desplegaremos el entorno sin este recurso espec\u00edfico.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>#Paso 3<\/strong><\/h4>\n\n\n\n<p>En este paso podremos especificar los interfaces que usaremos para la red de datos, separando la gesti\u00f3n de la sincronizaci\u00f3n de los bloques. En este entorno de demo que estamos usando s\u00f3lo tenemos una interfaz, por lo que podemos dejar estas opciones en \u201cauto\u201d.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh5.googleusercontent.com\/Qkzsqov36KRQG2HxzqKxG0eVHzJIIdKg_-r1InmC7pDTEUZPh9hp5GpBumqle5uboN6qsDLb12-4Q6r2miM7aaJ1R403OWlM352U-zATbu0MsM08RKRjh5kfZrTSNmC3Tg1Pgg-L\" alt=\"\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>#Paso 4<\/strong><\/h4>\n\n\n\n<p>En el \u00faltimo paso debemos especificar sobre qu\u00e9 <a href=\"https:\/\/hoplasoftware.com\/infraestructura\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">infraestructura <\/span><\/a>estamos trabajando. De esta forma, Portwrox puede integrarse con la plataforma existente y crear\u00e1 el fichero de despliegue, teniendo en cuenta cualquier particularidad que pudiera ser relevante en el proceso.<\/p>\n\n\n\n<p>Si nuestras im\u00e1genes se encuentran en un registro interno o necesitamos configurar variables u opciones adicionales, este ser\u00e1 el momento de hacerlo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/a2uZpzRlVHgAbS8Ppr0Fq_rDEMNjiQfA4VIa1kZx0yHQxHEOauzo4Hyx1SHbAbsLRDeb6rdYuY_tUk9CJOLV7j_uY7DZnAl-bOZrauveNg8vd14QYQcn8KYKrZ7BHexM2lXhcGv8\" alt=\"\"\/><\/figure>\n\n\n\n<p>Cuando pulsemos \u201cNext\u201d, nos aparecer\u00e1 un acuerdo de licencia para poder usar la plataforma que vamos a desplegar. El proceso estar\u00e1 completo.<\/p>\n\n\n\n<p>Una vez finalicemos esta gu\u00eda, el portal generar\u00e1 un fichero de despliegue.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/zoBGP8X9X66ajMIXoDFYjSl4ov50Z7lSErs1sogZvUMo4wPaWzXxIkyFDOS1FIRZU7UhEeWXGzHsb4KePN5oSkll7Yj2LRjodgJ-USNDcuJDo1LQoyQCNLxMxiXpLCxncVNRYgpf\" alt=\"\"\/><\/figure>\n\n\n\n<p>Este fichero puede guardarse para posteriores usos, pudiendo identificarlo por nombre y a\u00f1adirle etiquetas.<\/p>\n\n\n\n<p>Copiaremos la l\u00ednea de despliegue. Esta l\u00ednea variar\u00e1 de unas instalaciones a otras porque identifica un\u00edvocamente cada despliegue.<\/p>\n\n\n\n<p>Aplicaremos entonces el despliegue en nuestro cluster *las capturas de pantalla en la demo corresponden a un despliegue anterior:<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ kubectl apply -f<\/strong><\/p>\n\n\n\n<p><strong>&#8216;<\/strong><a href=\"https:\/\/install.portworx.com\/2.5?mc=false&amp;kbver=1.18.2&amp;oem=esse&amp;user=d4f15375-d0bb-11ea-a2c5-c24e499c7467&amp;b=true&amp;f=true&amp;j=auto&amp;c=px-cluster-a09d6d11-b585-424f-ad96-08dd5d07b079&amp;stork=true&amp;lh=true&amp;st=k8s\"><strong>https:\/\/install.portworx.com\/2.5?mc=false&amp;kbver=1.18.2&amp;oem=esse&amp;user=d4f15375-d0bb-11ea-a2c5-c24e499c7467&amp;b=true&amp;f=true&amp;j=auto&amp;c=px-cluster-a09d6d11-b585-424f-ad96-08dd5d07b079&amp;stork=true&amp;lh=true&amp;st=k8s<\/strong><\/a><strong>&#8216;<\/strong><\/p>\n\n\n\n<p>service\/portworx-service created<\/p>\n\n\n\n<p>customresourcedefinition.apiextensions.k8s.io\/volumeplacementstrategies.portworx.io created<\/p>\n\n\n\n<p>serviceaccount\/px-account created<\/p>\n\n\n\n<p>clusterrole.rbac.authorization.k8s.io\/node-get-put-list-role created<\/p>\n\n\n\n<p>clusterrolebinding.rbac.authorization.k8s.io\/node-role-binding created<\/p>\n\n\n\n<p>namespace\/portworx created<\/p>\n\n\n\n<p>role.rbac.authorization.k8s.io\/px-role created<\/p>\n\n\n\n<p>rolebinding.rbac.authorization.k8s.io\/px-role-binding created<\/p>\n\n\n\n<p>secret\/px-essential created<\/p>\n\n\n\n<p>daemonset.apps\/portworx created<\/p>\n\n\n\n<p>service\/portworx-api created<\/p>\n\n\n\n<p>daemonset.apps\/portworx-api created<\/p>\n\n\n\n<p>serviceaccount\/stork-account created<\/p>\n\n\n\n<p>clusterrole.rbac.authorization.k8s.io\/stork-role created<\/p>\n\n\n\n<p>clusterrolebinding.rbac.authorization.k8s.io\/stork-role-binding created<\/p>\n\n\n\n<p>deployment.apps\/stork created<\/p>\n\n\n\n<p>storageclass.storage.k8s.io\/stork-snapshot-sc created<\/p>\n\n\n\n<p>service\/stork-service created<\/p>\n\n\n\n<p>configmap\/stork-config created<\/p>\n\n\n\n<p>serviceaccount\/stork-scheduler-account created<\/p>\n\n\n\n<p>clusterrole.rbac.authorization.k8s.io\/stork-scheduler-role created<\/p>\n\n\n\n<p>clusterrolebinding.rbac.authorization.k8s.io\/stork-scheduler-role-binding created<\/p>\n\n\n\n<p>deployment.apps\/stork-scheduler created<\/p>\n\n\n\n<p>serviceaccount\/px-lh-account created<\/p>\n\n\n\n<p>clusterrole.rbac.authorization.k8s.io\/px-lh-role created<\/p>\n\n\n\n<p>clusterrolebinding.rbac.authorization.k8s.io\/px-lh-role-binding created<\/p>\n\n\n\n<p>service\/px-lighthouse created<\/p>\n\n\n\n<p>deployment.apps\/px-lighthouse created<\/p>\n\n\n\n<p>configmap\/autopilot-config created<\/p>\n\n\n\n<p>serviceaccount\/autopilot-account created<\/p>\n\n\n\n<p>clusterrole.rbac.authorization.k8s.io\/autopilot-role created<\/p>\n\n\n\n<p>clusterrolebinding.rbac.authorization.k8s.io\/autopilot-role-binding created<\/p>\n\n\n\n<p>deployment.apps\/autopilot created<\/p>\n\n\n\n<p>service\/autopilot created<\/p>\n<\/div><\/div>\n\n\n\n<p>Como vemos, el despliegue genera un n\u00famero importante de recursos en el cluster. Se ejecutar\u00e1n varios procesos en cada nodo para gestionar la sincronizaci\u00f3n y uso de los dispositivos de bloques.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Nuestra idea es usar el almacenamiento de Portworx como <a href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/storage-classes\/\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">StorageClass <\/span><\/a>para poder gestionar los vol\u00famenes de forma din\u00e1mica.<\/h4>\n\n\n\n<p>Creamos entonces un recurso de tipo \u201cStoraceClass\u201d. Usamos \u201cportwrx-sc\u201d en este ejemplo:<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ cat&lt;&lt;EOF|kubectl create -f &#8211;&nbsp;&nbsp;<\/strong><\/p>\n\n\n\n<p><strong>kind: StorageClass<\/strong><\/p>\n\n\n\n<p><strong>apiVersion: storage.k8s.io\/v1<\/strong><\/p>\n\n\n\n<p><strong>metadata:<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;name: portworx-sc<\/strong><\/p>\n\n\n\n<p><strong>provisioner: kubernetes.io\/portworx-volume<\/strong><\/p>\n\n\n\n<p><strong>parameters:<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;repl: \u00ab1\u00bb<\/strong><\/p>\n\n\n\n<p><strong>EOF<\/strong><\/p>\n\n\n\n<p>storageclass.storage.k8s.io\/portworx-sc created<\/p>\n<\/div><\/div>\n\n\n\n<p>Una vez tenemos nuestro StorageClass creado, podemos proceder a desplegar WordPress. En este caso, usaremos Helm para realizar el despliegue de forma automatizada.<\/p>\n\n\n\n<p>Para ello, a\u00f1adimos el repositorio de Charts de Bitnami para la instalaci\u00f3n:&nbsp;<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ helm repo add bitnami https:\/\/charts.bitnami.com\/bitnami<\/strong><\/p>\n\n\n\n<p><strong>$ helm repo update<\/strong><\/p>\n<\/div><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Ahora configuramos la instalaci\u00f3n de WordPress. Para ello, revisamos las variables que tenemos a nuestro alcance en el Chart para modificar el comportamiento de WordPress (<a href=\"https:\/\/hub.helm.sh\/charts\/bitnami\/wordpress\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">https:\/\/hub.helm.sh\/charts\/bitnami\/wordpress<\/span><\/a>). Ponemos atenci\u00f3n fundamentalmente en las variables referentes al espacio de almacenamiento persistente de WordPress y <a href=\"https:\/\/go.mariadb.com\/download-mariadb-server-community.html?utm_source=google&amp;utm_medium=ppc&amp;utm_campaign=MKG-Search-Google-Branded-EMEA-bd-Server-DL&amp;gclid=Cj0KCQjw8rT8BRCbARIsALWiOvQWsV1_eFiASdw7uhtUb7vqfePxyGN_t7Ynlrm43rp8hPdtutKr5EIaAjfgEALw_wcB\"><span class=\"has-inline-color has-luminous-vivid-amber-color\">MariaDB<\/span><\/a>. Recordemos que tenemos tan s\u00f3lo 25GB de disco por nodo en nuestro entorno.<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ helm install wordpress \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&#8211;set global.storageClass=portworx-sc \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&#8211;set persistence.size=1Gi \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&#8211;set mariadb.master.persistence.size=2Gi \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&#8211;set ingress.enabled=true \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&#8211;set ingress.hostname=wordpress.hoplalabs.local \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&#8211;set wordpressUsername=admin \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&#8211;set wordpressPassword=password \\<\/strong><\/p>\n\n\n\n<p><strong>&nbsp;&nbsp;bitnami\/wordpress<\/strong><\/p>\n\n\n\n<p>NAME: wordpress<\/p>\n\n\n\n<p>LAST DEPLOYED: Thu Aug 27 14:58:43 2020<\/p>\n\n\n\n<p>NAMESPACE: default<\/p>\n\n\n\n<p>STATUS: deployed<\/p>\n\n\n\n<p>REVISION: 1<\/p>\n\n\n\n<p>NOTES:<\/p>\n\n\n\n<p>** Please be patient while the chart is being deployed **<\/p>\n\n\n\n<p>Your WordPress site can be accessed through the following DNS name from within your cluster:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;wordpress.default.svc.cluster.local (port 80)<\/p>\n\n\n\n<p>To access your WordPress site from outside the cluster follow the steps below:<\/p>\n\n\n\n<p>1. Get the WordPress URL and associate WordPress hostname to your cluster external IP:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;export CLUSTER_IP=$(minikube ip) # On Minikube. Use: `kubectl cluster-info` on others K8s clusters<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;echo \u00abWordPress URL: http:\/\/wordpress.hoplalabs.local\/\u00bb<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;echo \u00ab$CLUSTER_IP&nbsp; wordpress.hoplalabs.local\u00bb | sudo tee -a \/etc\/hosts<\/p>\n\n\n\n<p>2. Open a browser and access WordPress using the obtained URL.<\/p>\n\n\n\n<p>3. Login with the following credentials below to see your blog:<\/p>\n\n\n\n<p>&nbsp;&nbsp;echo Username: admin<\/p>\n\n\n\n<p>&nbsp;&nbsp;echo Password: $(kubectl get secret &#8211;namespace default wordpress -o jsonpath=\u00bb{.data.wordpress-password}\u00bb | base64 &#8211;decode)<\/p>\n<\/div><\/div>\n\n\n\n<p>Accedemos al FQDN de publicaci\u00f3n (en DNS y balanceado a las IP de los nodos de publicaci\u00f3n de nuestro cluster con el puerto de nuestro Ingress-Controller) y observamos que WordPress est\u00e1 funcionando correctamente.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/hLYmPSFhXuXUWoic-1go654E2HICCV1kv0NLaQMXXusLe7go54qL3YHfSSFOehkUnprxIatk7m3OSHuxBBuw00XH3BJxgyuwxYCwbBTEorm4hnMHjk91hQK5b0gAqmYlq0KNqVl0\" alt=\"\"\/><\/figure>\n\n\n\n<p>Si nos fijamos en los PerstentVolumeClaims creados en el proceso de instalaci\u00f3n de WordPress, observamos lo siguiente:<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ kubectl get pvc<\/strong><\/p>\n\n\n\n<p>NAME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; STATUS &nbsp; VOLUME &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CAPACITY &nbsp; ACCESS MODES &nbsp; STORAGECLASS &nbsp; AGE<\/p>\n\n\n\n<p>data-wordpress-mariadb-0 &nbsp; Bound&nbsp; &nbsp; pvc-34bb23a6-57d3-4ab7-943d-92f00d5dad39 &nbsp; 2Gi&nbsp; &nbsp; &nbsp; &nbsp; RWO&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; portworx-sc&nbsp; &nbsp; 1h<\/p>\n\n\n\n<p>wordpress&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bound&nbsp; &nbsp; pvc-f6b492c8-7791-42d0-8d85-b393ad598d15 &nbsp; 1Gi&nbsp; &nbsp; &nbsp; &nbsp; RWO&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; portworx-sc&nbsp; &nbsp; 1h<\/p>\n<\/div><\/div>\n\n\n\n<p>Los PVCs est\u00e1n asociados al recurso StorageClass que hemos creado usando Portworx.<\/p>\n\n\n\n<p>Creamos una entrada en el blog accediendo como \u201cadmin\u201d para poder comprobar la persistencia en caso de conmutaci\u00f3n del servicio.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/S8FZkrGv6vXDzs_Q2Gtud18AzO_Rnfr_Uz9wwZb0Y1_cBwc_4uq0-IGUNBKYBepMwU_0d_lOQJ1BI8Sj7uEGxLaLIF-gUArVa307x1Vwvxrf4YU93dtTMq40ADqCjtFx0uNFdo5k\" alt=\"\"\/><\/figure>\n\n\n\n<p>Vamos a ver qu\u00e9 ocurre ahora si conmutamos los datos. Observamos en qu\u00e9 nodos est\u00e1n los pods desplegados:<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ kubectl get pod -o wide<\/strong><\/p>\n\n\n\n<p>NAME&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; READY &nbsp; STATUS&nbsp; &nbsp; RESTARTS &nbsp; AGE &nbsp; &nbsp; IP&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NODE&nbsp; &nbsp; &nbsp; NOMINATED NODE &nbsp; READINESS GATES<\/p>\n\n\n\n<p>nginx-controller-nginx-ingress-controller-b645f985d-7kg6c &nbsp; &nbsp; &nbsp; &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 92m &nbsp; &nbsp; 10.10.13.8&nbsp; &nbsp; worker3 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>nginx-controller-nginx-ingress-controller-default-backend-65ngs &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4h29m &nbsp; 10.10.13.2&nbsp; &nbsp; worker3 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>wordpress-bfd5f4c68-z7cnt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 10m &nbsp; &nbsp; 10.10.9.198 &nbsp; worker2 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>wordpress-mariadb-0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 4h5m&nbsp; &nbsp; 10.10.13.7&nbsp; &nbsp; worker3 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n<\/div><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Lo m\u00e1s sencillo en esta situaci\u00f3n para asegurar que MariaDB se ir\u00e1 a otro nodo, ser\u00e1 hacer un \u201cdrain\u201d en el nodo worker3, por ejemplo. Veamos qu\u00e9 sucede:<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ kubectl drain&nbsp; worker3 &#8211;ignore-daemonsets<\/strong><\/p>\n\n\n\n<p>node\/worker3 cordoned<\/p>\n\n\n\n<p>WARNING: ignoring DaemonSet-managed Pods: kube-system\/calico-node-ps5f8, kube-system\/kube-proxy-tnjqw, kube-system\/portworx-api-wfhs4, kube-system\/portworx-sk2xz<\/p>\n\n\n\n<p>evicting pod default\/nginx-controller-nginx-ingress-controller-default-backend-65ngs<\/p>\n\n\n\n<p>evicting pod default\/nginx-controller-nginx-ingress-controller-b645f985d-7kg6c<\/p>\n\n\n\n<p>evicting pod kube-system\/autopilot-58db5f4dbb-2kd9x<\/p>\n\n\n\n<p>evicting pod default\/wordpress-mariadb-0<\/p>\n\n\n\n<p>evicting pod kube-system\/stork-f4799f469-m6k6h<\/p>\n\n\n\n<p>evicting pod kube-system\/stork-scheduler-8d85c5b46-gsnc4<\/p>\n\n\n\n<p>pod\/stork-f4799f469-m6k6h evicted<\/p>\n\n\n\n<p>pod\/nginx-controller-nginx-ingress-controller-default-backend-65ngs evicted<\/p>\n\n\n\n<p>pod\/stork-scheduler-8d85c5b46-gsnc4 evicted<\/p>\n<\/div><\/div>\n\n\n\n<p>pod\/autopilot-58db5f4dbb-2kd9x evicted<\/p>\n\n\n\n<p>pod\/nginx-controller-nginx-ingress-controller-b645f985d-7kg6c evicted<\/p>\n\n\n\n<p>pod\/wordpress-mariadb-0 evicted<\/p>\n\n\n\n<p>node\/worker3 evicted<\/p>\n<\/div><\/div>\n\n\n\n<p>Como es de esperar, el Pod de MariaDB se mueve a otro nodo. En este caso, worker1 recibe la carga.<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ kubectl get pod -o wide<\/strong><\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p class=\"has-text-align-left\">NAME&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; READY &nbsp; STATUS&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; RESTARTS &nbsp; AGE &nbsp; IP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NODE&nbsp; &nbsp; &nbsp; NOMINATED NODE &nbsp; READINESS GATES<\/p>\n<\/div><\/div>\n\n\n\n<p>nginx-controller-nginx-ingress-controller-b645f985d-l5qnn &nbsp; &nbsp; &nbsp; &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 95s &nbsp; 10.10.11.138 &nbsp; worker1 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>nginx-controller-nginx-ingress-controller-default-backend-46qc4 &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 96s &nbsp; 10.10.11.137 &nbsp; worker1 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>wordpress-bfd5f4c68-z7cnt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0\/1 &nbsp; &nbsp; Running &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 23h &nbsp; 10.10.9.198&nbsp; &nbsp; worker2 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>wordpress-mariadb-0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0\/1 &nbsp; &nbsp; ContainerCreating &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 37s &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; worker1 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n<\/div><\/div>\n<\/div><\/div>\n\n\n\n<p>Tras unos segundos, el proceso est\u00e1 de nuevo en ejecuci\u00f3n. Esta vez la base de datos se encuentra en el nodo worker1.<\/p>\n\n\n\n<div class=\"wp-block-group has-black-color has-cyan-bluish-gray-background-color has-text-color has-background\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p><strong>$ kubectl get pod -o wide<\/strong><\/p>\n\n\n\n<p>NAME&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; READY &nbsp; STATUS&nbsp; &nbsp; RESTARTS &nbsp; AGE &nbsp; &nbsp; IP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NODE&nbsp; &nbsp; &nbsp; NOMINATED NODE &nbsp; READINESS GATES<\/p>\n\n\n\n<p>nginx-controller-nginx-ingress-controller-b645f985d-l5qnn &nbsp; &nbsp; &nbsp; &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3m31s &nbsp; 10.10.11.138 &nbsp; worker1 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>nginx-controller-nginx-ingress-controller-default-backend-46qc4 &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 3m32s &nbsp; 10.10.11.137 &nbsp; worker1 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>wordpress-bfd5f4c68-z7cnt &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 23h &nbsp; &nbsp; 10.10.9.198&nbsp; &nbsp; worker2 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>wordpress-mariadb-0 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1\/1 &nbsp; &nbsp; Running &nbsp; 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2m33s &nbsp; 10.10.11.140 &nbsp; worker1 &nbsp; &lt;none&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;none&gt;<\/p>\n\n\n\n<p>provision@kube1:~$&nbsp;<\/p>\n<\/div><\/div>\n\n\n\n<p>Este es un ejemplo muy sencillo, con el que podemos ver c\u00f3mo de sencillo resulta usar Portworx Essentials para gestionar nuestro almacenamiento persistente en Kubernetes.&nbsp;<\/p>\n\n\n\n<p>Portworx nos permite garantizar los datos en un cluster e incluso entre varios distintos; siendo adem\u00e1s una herramienta fundamental cuando estos clusters se encuentran en diferentes localizaciones o entornos cloud.<\/p>\n\n\n\n<p>La gesti\u00f3n de la disponibilidad, n\u00famero de r\u00e9plicas de bloque, sincronizaci\u00f3n, snapshots, etc, en Portworx queda fuera del alcance de este sencillo post pero esperamos que os haya sido de utilidad y os anime a usar esta potente herramienta.<\/p>\n\n\n\n<p>Puedes descargarte el resultado final en este link<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/hoplasoftware.com\/wp-content\/uploads\/2020\/10\/Noviembre-2020-Ejemplo-de-entrada-creada-en-Wordpress.pdf\">Ejemplo-de-entrada-creada-en-Wordpress<\/a><a href=\"https:\/\/hoplasoftware.com\/wp-content\/uploads\/2020\/10\/Noviembre-2020-Ejemplo-de-entrada-creada-en-Wordpress.pdf\" class=\"wp-block-file__button\" download>Descarga<\/a><\/div>\n\n\n\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Javier Ram\u00edrez-Urea, arquitecto de soluciones en Hopla! Software Hoy, os traemos este post sobre Portworx Essentials. En \u00e9l, vamos a hablar de c\u00f3mo utilizar esta herramienta para ofrecer almacenamiento persistente y distribuido a las aplicaciones desplegadas en Kubernetes.&nbsp; El caso que os traemos es desplegar un simple WordPress. Veremos c\u00f3mo el almacenamiento persistente nos permite [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":12349,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[282],"tags":[216,217,162,218,190,219],"class_list":["post-3740","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-k8s-kubernetes","tag-base-de-datos","tag-ingress-controller","tag-kubernetes","tag-portworx","tag-servidor","tag-wordpress"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.4 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Portworx Essentials como almacenamiento persistente en Kubernetes<\/title>\n<meta name=\"description\" content=\"C\u00f3mo utilizar Portworx Essentials para proporcionar almacenamiento persistente y distribuido a las aplicaciones desplegadas en Kubernetes\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hopla.tech\/en\/portworx-essentials\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Portworx Essentials como almacenamiento persistente en Kubernetes\" \/>\n<meta property=\"og:description\" content=\"C\u00f3mo utilizar Portworx Essentials para proporcionar almacenamiento persistente y distribuido a las aplicaciones desplegadas en Kubernetes\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hopla.tech\/en\/portworx-essentials\/\" \/>\n<meta property=\"og:site_name\" content=\"Hopla! Tech\" \/>\n<meta property=\"article:published_time\" content=\"2020-10-19T11:01:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-17T10:08:15+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/10\/portworx-essentials-horizontal-color-500px.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"500\" \/>\n\t<meta property=\"og:image:height\" content=\"184\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Hopla!\u00a0Tech\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@HoplaSoftware\" \/>\n<meta name=\"twitter:site\" content=\"@HoplaSoftware\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hopla!\u00a0Tech\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/\"},\"author\":{\"name\":\"Hopla!\u00a0Tech\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/person\\\/9cf81e385f7a2f68085449a2e16e1d22\"},\"headline\":\"Portworx Essentials como almacenamiento persistente en Kubernetes\",\"datePublished\":\"2020-10-19T11:01:08+00:00\",\"dateModified\":\"2024-07-17T10:08:15+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/\"},\"wordCount\":2815,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/portworx-essentials-horizontal-color-500px.webp\",\"keywords\":[\"base de datos\",\"ingress controller\",\"kubernetes\",\"portworx\",\"servidor\",\"wordpress\"],\"articleSection\":[\"K8s (Kubernetes)\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/\",\"url\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/\",\"name\":\"Portworx Essentials como almacenamiento persistente en Kubernetes\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/portworx-essentials-horizontal-color-500px.webp\",\"datePublished\":\"2020-10-19T11:01:08+00:00\",\"dateModified\":\"2024-07-17T10:08:15+00:00\",\"description\":\"C\u00f3mo utilizar Portworx Essentials para proporcionar almacenamiento persistente y distribuido a las aplicaciones desplegadas en Kubernetes\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#primaryimage\",\"url\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/portworx-essentials-horizontal-color-500px.webp\",\"contentUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2020\\\/10\\\/portworx-essentials-horizontal-color-500px.webp\",\"width\":500,\"height\":184},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/portworx-essentials\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/hopla.tech\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Portworx Essentials como almacenamiento persistente en Kubernetes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#website\",\"url\":\"https:\\\/\\\/hopla.tech\\\/\",\"name\":\"Hopla! Tech\",\"description\":\"The enterprise software and consultancy company\",\"publisher\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\"},\"alternateName\":\"Hopla!\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/hopla.tech\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#organization\",\"name\":\"Hopla! Tech\",\"alternateName\":\"Hopla!\",\"url\":\"https:\\\/\\\/hopla.tech\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Hopla-by-BTW-b-3.webp\",\"contentUrl\":\"https:\\\/\\\/hopla.tech\\\/wp-content\\\/uploads\\\/2025\\\/12\\\/Hopla-by-BTW-b-3.webp\",\"width\":274,\"height\":115,\"caption\":\"Hopla! Tech\"},\"image\":{\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/HoplaSoftware\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/hopla-software\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@hoplasoftware7485\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/hopla.tech\\\/#\\\/schema\\\/person\\\/9cf81e385f7a2f68085449a2e16e1d22\",\"name\":\"Hopla!\u00a0Tech\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g\",\"caption\":\"Hopla!\u00a0Tech\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Portworx Essentials como almacenamiento persistente en Kubernetes","description":"C\u00f3mo utilizar Portworx Essentials para proporcionar almacenamiento persistente y distribuido a las aplicaciones desplegadas en Kubernetes","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hopla.tech\/en\/portworx-essentials\/","og_locale":"en_GB","og_type":"article","og_title":"Portworx Essentials como almacenamiento persistente en Kubernetes","og_description":"C\u00f3mo utilizar Portworx Essentials para proporcionar almacenamiento persistente y distribuido a las aplicaciones desplegadas en Kubernetes","og_url":"https:\/\/hopla.tech\/en\/portworx-essentials\/","og_site_name":"Hopla! Tech","article_published_time":"2020-10-19T11:01:08+00:00","article_modified_time":"2024-07-17T10:08:15+00:00","og_image":[{"width":500,"height":184,"url":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/10\/portworx-essentials-horizontal-color-500px.webp","type":"image\/webp"}],"author":"Hopla!\u00a0Tech","twitter_card":"summary_large_image","twitter_creator":"@HoplaSoftware","twitter_site":"@HoplaSoftware","twitter_misc":{"Written by":"Hopla!\u00a0Tech","Estimated reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hopla.tech\/portworx-essentials\/#article","isPartOf":{"@id":"https:\/\/hopla.tech\/portworx-essentials\/"},"author":{"name":"Hopla!\u00a0Tech","@id":"https:\/\/hopla.tech\/#\/schema\/person\/9cf81e385f7a2f68085449a2e16e1d22"},"headline":"Portworx Essentials como almacenamiento persistente en Kubernetes","datePublished":"2020-10-19T11:01:08+00:00","dateModified":"2024-07-17T10:08:15+00:00","mainEntityOfPage":{"@id":"https:\/\/hopla.tech\/portworx-essentials\/"},"wordCount":2815,"commentCount":0,"publisher":{"@id":"https:\/\/hopla.tech\/#organization"},"image":{"@id":"https:\/\/hopla.tech\/portworx-essentials\/#primaryimage"},"thumbnailUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/10\/portworx-essentials-horizontal-color-500px.webp","keywords":["base de datos","ingress controller","kubernetes","portworx","servidor","wordpress"],"articleSection":["K8s (Kubernetes)"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/hopla.tech\/portworx-essentials\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/hopla.tech\/portworx-essentials\/","url":"https:\/\/hopla.tech\/portworx-essentials\/","name":"Portworx Essentials como almacenamiento persistente en Kubernetes","isPartOf":{"@id":"https:\/\/hopla.tech\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hopla.tech\/portworx-essentials\/#primaryimage"},"image":{"@id":"https:\/\/hopla.tech\/portworx-essentials\/#primaryimage"},"thumbnailUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/10\/portworx-essentials-horizontal-color-500px.webp","datePublished":"2020-10-19T11:01:08+00:00","dateModified":"2024-07-17T10:08:15+00:00","description":"C\u00f3mo utilizar Portworx Essentials para proporcionar almacenamiento persistente y distribuido a las aplicaciones desplegadas en Kubernetes","breadcrumb":{"@id":"https:\/\/hopla.tech\/portworx-essentials\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hopla.tech\/portworx-essentials\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/hopla.tech\/portworx-essentials\/#primaryimage","url":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/10\/portworx-essentials-horizontal-color-500px.webp","contentUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2020\/10\/portworx-essentials-horizontal-color-500px.webp","width":500,"height":184},{"@type":"BreadcrumbList","@id":"https:\/\/hopla.tech\/portworx-essentials\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/hopla.tech\/"},{"@type":"ListItem","position":2,"name":"Portworx Essentials como almacenamiento persistente en Kubernetes"}]},{"@type":"WebSite","@id":"https:\/\/hopla.tech\/#website","url":"https:\/\/hopla.tech\/","name":"Hopla! Tech","description":"The enterprise software and consultancy company","publisher":{"@id":"https:\/\/hopla.tech\/#organization"},"alternateName":"Hopla!","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hopla.tech\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/hopla.tech\/#organization","name":"Hopla! Tech","alternateName":"Hopla!","url":"https:\/\/hopla.tech\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/hopla.tech\/#\/schema\/logo\/image\/","url":"https:\/\/hopla.tech\/wp-content\/uploads\/2025\/12\/Hopla-by-BTW-b-3.webp","contentUrl":"https:\/\/hopla.tech\/wp-content\/uploads\/2025\/12\/Hopla-by-BTW-b-3.webp","width":274,"height":115,"caption":"Hopla! Tech"},"image":{"@id":"https:\/\/hopla.tech\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/HoplaSoftware","https:\/\/www.linkedin.com\/company\/hopla-software\/","https:\/\/www.youtube.com\/@hoplasoftware7485"]},{"@type":"Person","@id":"https:\/\/hopla.tech\/#\/schema\/person\/9cf81e385f7a2f68085449a2e16e1d22","name":"Hopla!\u00a0Tech","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/74a9053adf21148080273a18b879a3392f96e141e511a337179a4438f6bde966?s=96&d=mm&r=g","caption":"Hopla!\u00a0Tech"}}]}},"_links":{"self":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/3740","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/comments?post=3740"}],"version-history":[{"count":1,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/3740\/revisions"}],"predecessor-version":[{"id":12076,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/posts\/3740\/revisions\/12076"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/media\/12349"}],"wp:attachment":[{"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/media?parent=3740"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/categories?post=3740"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hopla.tech\/en\/wp-json\/wp\/v2\/tags?post=3740"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}