{"id":10884,"date":"2021-07-07T13:02:10","date_gmt":"2021-07-07T13:02:10","guid":{"rendered":"https:\/\/beta.bluetab.net\/workshop-chaos-engineering-sobre-kubernetes-con-litmus\/"},"modified":"2023-10-17T12:56:26","modified_gmt":"2023-10-17T12:56:26","slug":"workshop-chaos-engineering-sobre-kubernetes-con-litmus","status":"publish","type":"post","link":"https:\/\/bluetab.org\/en\/workshop-chaos-engineering-sobre-kubernetes-con-litmus\/","title":{"rendered":"Workshop Ingenier\u00eda del caos sobre Kubernetes con Litmus"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"10884\" class=\"elementor elementor-10884\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-b2ad9fe elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"b2ad9fe\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-7eac278\" data-id=\"7eac278\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-45481b1 elementor-widget elementor-widget-heading\" data-id=\"45481b1\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">Workshop Ingenier\u00eda del caos sobre Kubernetes con Litmus<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7843b8f elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7843b8f\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-1a4ee60\" data-id=\"1a4ee60\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-ceb86e7 elementor-position-left elementor-vertical-align-middle elementor-widget elementor-widget-image-box\" data-id=\"ceb86e7\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/%C3%A1ngel-maroco-85a0807b\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2020\/11\/Angel-Maroco-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-image-6561 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-150x150.jpg 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-300x300.jpg 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-768x768.jpg 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-75x75.jpg 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco.jpg 800w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h4 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.linkedin.com\/in\/%C3%A1ngel-maroco-85a0807b\/\" target=\"_blank\">\u00c1ngel Maroco<\/a><\/h4><p class=\"elementor-image-box-description\">AWS Cloud Architect<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-ed6cc51\" data-id=\"ed6cc51\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-173edbe elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"173edbe\" data-element_type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Share on twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Share on linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-2b67acd\" data-id=\"2b67acd\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c738cdf elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c738cdf\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-55b901d\" data-id=\"55b901d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7668b05 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7668b05\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-592ef24\" data-id=\"592ef24\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6010029 elementor-widget elementor-widget-theme-post-featured-image elementor-widget-image\" data-id=\"6010029\" data-element_type=\"widget\" id=\"introduccion\" data-widget_type=\"theme-post-featured-image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-1024x512.png\" class=\"attachment-large size-large wp-image-17842\" alt=\"\" srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-1024x512.png 1024w, https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-300x150.png 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-768x384.png 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10.png 1200w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4abbf0e elementor-widget elementor-widget-text-editor\" data-id=\"4abbf0e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>LitmusChaos nace con el objetivo de ayudar a desarrolladores y SREs (Site Reliability Engineering ) de Kubernetes a identificar puntos d\u00e9biles y mejorar la resiliencia de sus aplicaciones\/plataformas proporcionando un marco de trabajo completo.<\/p><p>Sus principales ventajas respecto a otras herramientas son:<\/p><ul><li><strong>Experimentos declarativos mediante K8S CRDs (Custom Resource Definition): <\/strong>todos los componentes (planificaci\u00f3n, ejecuci\u00f3n, parametrizaci\u00f3n, etc.) de un experimento se definen dentro del \u00e1mbito de kubernetes haciendo uso de YAML.<\/li><li><strong>M\u00faltiples experimentos predefinidos:<\/strong> dispone de un conjunto de experimentos suficientemente amplio para dar cobertura a los principales recursos de K8s.<\/li><li><strong>SDK en Go\/Python\/Ansible para desarrollar tus propios experimentos:<\/strong>\u00a0dispone de un metodolog\u00eda de desarrollo bien definida para construir experimentos que se adapten a tus necesidades particulares.<\/li><li><strong>Creaci\u00f3n de workflows a trav\u00e9s de GUI:<\/strong>\u00a0con Litmus UI Portal puedes crear workflows complejos utilizando todos los experimentos predefinidos mediante interfaz web.<\/li><li><strong>F\u00e1cil integraci\u00f3n en pipelines CI\/CD:<\/strong>\u00a0invocar y obtener el resultado de un experimento es extremadamente f\u00e1cil.<\/li><li><strong>Exportaci\u00f3n de m\u00e9tricas:<\/strong>\u00a0puedes exportar distintas m\u00e9tricas de tus experimentos directamente a Prometheus.<\/li><\/ul><p>El producto est\u00e1 liberado bajo licencia Apache-2.0, dispone de una amplia comunidad de desarrolladores y desde 2020 pertenece a Cloud Native Computing Foundation.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a182dd1 elementor-widget elementor-widget-heading\" data-id=\"a182dd1\" data-element_type=\"widget\" id=\"objetivos\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Objetivos del workshop<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e272341 elementor-widget elementor-widget-text-editor\" data-id=\"e272341\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ol><li>Conocer los principales componentes de un experimento y realizar su despliegue<\/li><li>Analizar detalladamente la ejecuci\u00f3n de tres experimentos (criterios de entrada, hip\u00f3tesis, observaciones y resultados)<\/li><li>Ver las m\u00faltiples opciones referentes a planificaci\u00f3n de experimentos.<\/li><li>Visualizar los resultados mediante Prometheus\/Grafana.<\/li><li>Analizar un caso de pruebas de resiliencia + test de rendimiento con JMeter.<\/li><li>Principales funcionalidades de Litmus UI Portal<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d89a293 elementor-widget elementor-widget-heading\" data-id=\"d89a293\" data-element_type=\"widget\" id=\"consola\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Preparaci\u00f3n de consola<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-84f6117 elementor-widget elementor-widget-text-editor\" data-id=\"84f6117\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Recomendamos abrir una consola y crear 4 paneles:<\/p><ol><li>Panel principal (ejecutaremos todo el contenido del workshop)<\/li><li>Monitorizaci\u00f3n de la aplicaci\u00f3n de test<\/li><li>Monitorizaci\u00f3n de pods<\/li><li>Monitorizaci\u00f3n de eventos<\/li><\/ol>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aaf133e elementor-widget elementor-widget-image\" data-id=\"aaf133e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/07\/console-tabs.png\" title=\"\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9d85896 elementor-widget elementor-widget-heading\" data-id=\"9d85896\" data-element_type=\"widget\" id=\"clonar\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Clonaci\u00f3n de repositorio<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7cb88c9 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"7cb88c9\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>git clone https:\/\/github.com\/angelmaroco\/litmus-chaos-engineering-workshop.git\r\ncd litmus-chaos-engineering-workshop <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1e2ea9f elementor-widget elementor-widget-heading\" data-id=\"1e2ea9f\" data-element_type=\"widget\" id=\"minikube\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Creaci\u00f3n de entorno de pruebas K8s con minikube<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cffc795 elementor-widget elementor-widget-text-editor\" data-id=\"cffc795\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Para este workshop vamos a utilizar minikube pero Litmus puede ser desplegado en cualquier servicio gestionado tipo EKS\/AKS\/GKE.<\/p><p>Minikube requiere de un gestor de contenedores o m\u00e1quinas virtuales (Docker, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMWare).<\/p><p>Recomendamos hacer uso de docker. En el caso de no estar disponible en el sistema, puedes realizar la instalaci\u00f3n con los siguientes comandos:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d847bb elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"3d847bb\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>if ! [ -x &quot;$(command -v docker)&quot; ]; then\r\n    curl -fsSL https:\/\/get.docker.com -o \/tmp\/get-docker.sh\r\n    sh \/tmp\/get-docker.sh\r\nfi <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-493dd93 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"493dd93\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'># install kubectl\r\ncurl -Ls &quot;https:\/\/dl.k8s.io\/release\/$(curl -L -s https:\/\/dl.k8s.io\/release\/stable.txt)\/bin\/linux\/amd64\/kubectl&quot; --output \/tmp\/kubectl\r\nsudo install \/tmp\/kubectl \/usr\/local\/bin\/kubectl\r\nkubectl version --client\r\n\r\n# install minikube\r\ncurl -Ls https:\/\/storage.googleapis.com\/minikube\/releases\/latest\/minikube-linux-amd64 --output \/tmp\/minikube-linux-amd64\r\nsudo install \/tmp\/minikube-linux-amd64 \/usr\/local\/bin\/minikube\r\nminikube version\r\n\r\n# starting minikube\r\nminikube start --cpus 2 --memory 4096\r\n\r\n# enabled ingress &amp; metrics servers\r\nminikube addons enable ingress\r\nminikube addons enable metrics-server\r\n\r\n# enabled tunnel &amp; dashboard\r\nminikube tunnel &gt; \/dev\/null &amp;\r\nminikube dashboard &gt; \/dev\/null &amp;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7a8126 elementor-widget elementor-widget-heading\" data-id=\"b7a8126\" data-element_type=\"widget\" id=\"namespaces\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Creaci\u00f3n de namespaces K8s<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f752b4 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"5f752b4\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'># create namespace testing\r\nkubectl apply -f src\/base\/testing-ns.yaml\r\n\r\n# create namespace litmus\r\nkubectl apply -f src\/base\/litmus-ns.yaml\r\n\r\n# create namespace monitoring (prometheus + grafana)\r\nkubectl apply -f src\/base\/monitoring-ns.yaml\r\n\r\nTESTING_NAMESPACE=&quot;testing&quot;\r\nLITMUS_NAMESPACE=&quot;litmus&quot;\r\nMONITORING_NAMESPACE=&quot;monitoring&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1de2b72 elementor-widget elementor-widget-heading\" data-id=\"1de2b72\" data-element_type=\"widget\" id=\"test\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Despliegue de aplicaci\u00f3n de test<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a61428a elementor-widget elementor-widget-text-editor\" data-id=\"a61428a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Desplegamos una aplicaci\u00f3n de test para poder ejecutar los experimentos de litmus.<\/p><ul><li><strong>nginx-deployment.yaml<\/strong>: creaci\u00f3n de despliegue &#8220;app-sample&#8221;, con recursos de cpu\/memoria &#8220;limits&#8221;\/&#8221;request&#8221; y configuraci\u00f3n de &#8220;readinessProbe&#8221;. Exponemos el servicio en el puerto 80 a trav\u00e9s de un balanceador.<\/li><li><strong>nginx-hpa.yaml<\/strong>: creaci\u00f3n de\u00a0<em>Horizontal Pod Autoscaler<\/em>\u00a0(min 2 r\u00e9plicas \/ max 10 r\u00e9plicas)<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8fb10e6 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"8fb10e6\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'># deployment\r\nkubectl apply -f src\/nginx\/nginx-deployment.yaml --namespace=&quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# enable hpa\r\nkubectl apply -f src\/nginx\/nginx-hpa.yaml --namespace=&quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# expose service \r\nkubectl expose deployment app-sample --type=LoadBalancer --port=80  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# wait deployment\r\nkubectl wait --for=condition=available --timeout=60s deployment\/app-sample -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# get pods\r\nkubectl get pods -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n#-----------------------------------------\r\n\r\nNAME                          READY   STATUS    RESTARTS   AGE\r\napp-sample-7ff489dbd5-82ppw   1\/1     Running   0          45m\r\napp-sample-7ff489dbd5-jg9vh   1\/1     Running   0          45m\r\n\r\n# get service\r\nkubectl get services -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# -----------------------------------------\r\n\r\nNAME         TYPE           CLUSTER-IP       EXTERNAL-IP      PORT(S)        AGE\r\napp-sample   LoadBalancer   10.109.196.239   10.109.196.239   80:30020\/TCP   3m54s\r\n\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-be10592 elementor-position-left elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"be10592\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-info-circle\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\t En PANEL 2 ejecutar:\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2b0cd8 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"f2b0cd8\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>TESTING_NAMESPACE=&#039;testing&#039;\r\nURL_SERVICE=$(minikube service app-sample --url -n &quot;${TESTING_NAMESPACE}&quot;)\r\nwhile true; do sleep 5; curl --connect-timeout 2 -s -o \/dev\/null -w &quot;Response code %{http_code}&quot;  ${URL_SERVICE}; echo -e &#039; - &#039;$(date);done\r\n\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d2d4b33 elementor-position-left elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"d2d4b33\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-info-circle\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tEn PANEL 3 ejecutar:\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2778540 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"2778540\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>TESTING_NAMESPACE=&#039;testing&#039;\r\nwatch -n 1 kubectl get pods -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e6f177 elementor-position-left elementor-view-default elementor-mobile-position-top elementor-widget elementor-widget-icon-box\" data-id=\"4e6f177\" data-element_type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-info-circle\"><\/i>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h3 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tEn PANEL 4 ejecutar:\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h3>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9115d4 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"c9115d4\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl get events -A -w <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cac82c9 elementor-widget elementor-widget-heading\" data-id=\"cac82c9\" data-element_type=\"widget\" id=\"chaos\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Despliegue Chaos Experiments<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5823b4 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"a5823b4\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'># litmus operator &amp; experiments\r\nkubectl apply -f https:\/\/litmuschaos.github.io\/litmus\/litmus-operator-v1.13.0.yaml -n &quot;${LITMUS_NAMESPACE}&quot;\r\n\r\nkubectl apply -f https:\/\/hub.litmuschaos.io\/api\/chaos\/1.13.0\\?file\\=charts\/generic\/experiments.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7261fb elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b7261fb\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl get chaosexperiments -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# ----------------------------------------------------\r\n\r\nNAME                      AGE\r\ncontainer-kill            6s\r\ndisk-fill                 6s\r\ndisk-loss                 6s\r\ndocker-service-kill       6s\r\nk8-pod-delete             6s\r\nk8-service-kill           6s\r\nkubelet-service-kill      6s\r\nnode-cpu-hog              6s\r\nnode-drain                6s\r\nnode-io-stress            6s\r\nnode-memory-hog           6s\r\nnode-poweroff             6s\r\nnode-restart              6s\r\nnode-taint                6s\r\npod-autoscaler            6s\r\npod-cpu-hog               6s\r\npod-delete                6s\r\npod-io-stress             6s\r\npod-memory-hog            6s\r\npod-network-corruption    6s\r\npod-network-duplication   6s\r\npod-network-latency       6s\r\npod-network-loss          6s\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f13fa3 elementor-widget elementor-widget-heading\" data-id=\"0f13fa3\" data-element_type=\"widget\" id=\"grafana\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Despliegue servicios monitorizaci\u00f3n: Prometheus + Grafana<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aefe4a2 elementor-widget elementor-widget-text-editor\" data-id=\"aefe4a2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Litmus permite exportar las m\u00e9tricas de los experimentos a Prometheus a trav\u00e9s de\u00a0<em>chaos-exporter<\/em>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-13ebbf6 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"13ebbf6\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl -n ${MONITORING_NAMESPACE} apply -f src\/litmus\/monitoring\/utils\/prometheus\/prometheus-operator\/\r\n\r\nkubectl -n ${MONITORING_NAMESPACE} apply -f src\/litmus\/monitoring\/utils\/metrics-exporters-with-service-monitors\/kube-state-metrics\/\r\n\r\nkubectl -n ${MONITORING_NAMESPACE} apply -f src\/litmus\/monitoring\/utils\/alert-manager-with-service-monitor\/\r\n\r\nkubectl -n ${LITMUS_NAMESPACE} apply -f src\/litmus\/monitoring\/utils\/metrics-exporters-with-service-monitors\/litmus-metrics\/chaos-exporter\/\r\n\r\nkubectl -n ${MONITORING_NAMESPACE} apply -f src\/litmus\/monitoring\/utils\/prometheus\/prometheus-configuration\/\r\n\r\nkubectl -n ${MONITORING_NAMESPACE} apply -f src\/litmus\/monitoring\/utils\/grafana\/\r\n\r\nkubectl -n ${MONITORING_NAMESPACE} apply -f src\/litmus\/monitoring\/utils\/metrics-exporters-with-service-monitors\/node-exporter\/\r\n\r\n# wait deployment\r\nkubectl wait --for=condition=available --timeout=60s deployment\/grafana -n ${MONITORING_NAMESPACE}\r\nkubectl wait --for=condition=available --timeout=60s deployment\/prometheus-operator -n ${MONITORING_NAMESPACE}\r\n\r\necho &quot;Acceso dashboard --&gt; $(minikube service grafana -n ${MONITORING_NAMESPACE} --url)\/d\/nodepodmetrics\/node-and-pod-chaos-metrics?orgId=1&amp;refresh=5s&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-564441d elementor-widget elementor-widget-text-editor\" data-id=\"564441d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Para este workshop hemos personalizado un dashboard de grafana donde visualizaremos:<\/p><ul><li>Timelime de experimentos ejecutados<\/li><li>4 gr\u00e1ficas tipo &#8220;Gauge&#8221; con n\u00famero de total de experimentos, estado Pass, estado Fail y estado Awaited.<\/li><li>Consumo de CPU nivel nodo<\/li><li>Consumo de CPU a nivel POD (app-sample)<\/li><li>Consumo de memoria nivel nodo<\/li><li>Consumo de memoria a nivel POD (app-sample)<\/li><li>Tr\u00e1fico red (IN\/OUT) nivel nodo<\/li><li>Tr\u00e1fico red (IN\/OUT) nivel POD (app-sample)<\/li><\/ul><p><br \/>Datos acceso grafana:<\/p><ul><li>usuario: admin<\/li><li>password: admin<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5f3fdc elementor-widget elementor-widget-image\" data-id=\"a5f3fdc\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/07\/grafana-main.png\" title=\"\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9df208d elementor-widget elementor-widget-heading\" data-id=\"9df208d\" data-element_type=\"widget\" id=\"litmuschaos\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Creaci\u00f3n de anotaci\u00f3n \"litmuschaos\"<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b5f4a4 elementor-widget elementor-widget-text-editor\" data-id=\"1b5f4a4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Para habilitar la ejecuci\u00f3n de experimentos contra nuestro deployment, necesitamos a\u00f1adir la anotaci\u00f3n <em>litmuschaos.io\/chaos=<\/em>\u201c<em>true<\/em>\u201c.\u00a0Como veremos m\u00e1s adelante, todos los experimentos tienen la propiedad\u00a0<em>annotationCheck: \u201ctrue\u201d.<\/em><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a94f345 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"a94f345\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'># add annotate (enable chaos)\r\nkubectl annotate deploy\/app-sample litmuschaos.io\/chaos=&quot;true&quot; -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-790ed99 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"790ed99\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl describe deploy\/app-sample -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# -----------------------------------------------------------\r\n\r\nName:                   app-sample\r\nNamespace:              testing\r\nCreationTimestamp:      Mon, 29 Mar 2021 09:35:53 +0200\r\nLabels:                 app=app-sample\r\n                        app.kubernetes.io\/name=app-sample\r\nAnnotations:            deployment.kubernetes.io\/revision: 1\r\n                        litmuschaos.io\/chaos: true # &lt;-- HABILITAMOS EXPERIMENTOS\r\nSelector:               app.kubernetes.io\/name=app-sample\r\nReplicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable\r\nStrategyType:           RollingUpdate\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c1d5e82 elementor-widget elementor-widget-heading\" data-id=\"c1d5e82\" data-element_type=\"widget\" id=\"detalle\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Detalle componentes de un experimento<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-68fdf9a elementor-widget elementor-widget-text-editor\" data-id=\"68fdf9a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>Service Account, Role y RoleBinding<\/strong><\/h4><p>Cada experimento debe tener asociado un ServiceAccount, un Role para definir permisos y un RoleBinding para relacionar el ServiceAccount\/Role.<\/p><p>Pod\u00e9is encontrar todas las definiciones dentro de\u00a0<em>src\/litmus\/nombre-experimento\/nombre-experimento-sa.yaml<\/em><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d4f400f elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"d4f400f\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: v1\r\nkind: ServiceAccount\r\nmetadata:\r\n  name: container-kill-sa\r\n  namespace: testing\r\n  labels:\r\n    name: container-kill-sa\r\n    app.kubernetes.io\/part-of: litmus\r\n---\r\napiVersion: rbac.authorization.k8s.io\/v1\r\nkind: Role\r\nmetadata:\r\n  name: container-kill-sa\r\n  namespace: testing\r\n  labels:\r\n    name: container-kill-sa\r\n    app.kubernetes.io\/part-of: litmus\r\nrules:\r\n  - apiGroups: [&quot;&quot;]\r\n    resources:\r\n      [&quot;pods&quot;, &quot;pods\/exec&quot;, &quot;pods\/log&quot;, &quot;events&quot;, &quot;replicationcontrollers&quot;]\r\n    verbs:\r\n      [&quot;create&quot;, &quot;list&quot;, &quot;get&quot;, &quot;patch&quot;, &quot;update&quot;, &quot;delete&quot;, &quot;deletecollection&quot;]\r\n  - apiGroups: [&quot;batch&quot;]\r\n    resources: [&quot;jobs&quot;]\r\n    verbs: [&quot;create&quot;, &quot;list&quot;, &quot;get&quot;, &quot;delete&quot;, &quot;deletecollection&quot;]\r\n  - apiGroups: [&quot;apps&quot;]\r\n    resources: [&quot;deployments&quot;, &quot;statefulsets&quot;, &quot;daemonsets&quot;, &quot;replicasets&quot;]\r\n    verbs: [&quot;list&quot;, &quot;get&quot;]\r\n  - apiGroups: [&quot;apps.openshift.io&quot;]\r\n    resources: [&quot;deploymentconfigs&quot;]\r\n    verbs: [&quot;list&quot;, &quot;get&quot;]\r\n  - apiGroups: [&quot;argoproj.io&quot;]\r\n    resources: [&quot;rollouts&quot;]\r\n    verbs: [&quot;list&quot;, &quot;get&quot;]\r\n  - apiGroups: [&quot;litmuschaos.io&quot;]\r\n    resources: [&quot;chaosengines&quot;, &quot;chaosexperiments&quot;, &quot;chaosresults&quot;]\r\n    verbs: [&quot;create&quot;, &quot;list&quot;, &quot;get&quot;, &quot;patch&quot;, &quot;update&quot;]\r\n---\r\napiVersion: rbac.authorization.k8s.io\/v1\r\nkind: RoleBinding\r\nmetadata:\r\n  name: container-kill-sa\r\n  namespace: testing\r\n  labels:\r\n    name: container-kill-sa\r\n    app.kubernetes.io\/part-of: litmus\r\nroleRef:\r\n  apiGroup: rbac.authorization.k8s.io\r\n  kind: Role\r\n  name: container-kill-sa\r\nsubjects:\r\n  - kind: ServiceAccount\r\n    name: container-kill-sa\r\n    namespace: testing <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9af0ec4 elementor-widget elementor-widget-text-editor\" data-id=\"9af0ec4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>Definici\u00f3n ChaosEngine<\/strong><\/h4><p>Para facilitar la comprensi\u00f3n, hemos dividido en 3 secciones el contenido de un experimento. Pod\u00e9is encontrar todas las definiciones dentro de\u00a0<em>src\/litmus\/nombre-experimento\/chaos-engine-<\/em>.<em>yaml<\/em><\/p><h5><a id=\"user-content-especificaciones-generales\" class=\"anchor\" href=\"https:\/\/github.com\/angelmaroco\/litmus-chaos-engineering-workshop\/blob\/master\/README.md#especificaciones-generales\" aria-hidden=\"true\"><\/a><strong>Especificaciones generales<\/strong><\/h5><p>En esta secci\u00f3n especificaremos atributos comunes a todos los experimentos. Para este workshop, debido a que estamos realizando los experimentos contra un \u00fanico deployment, el \u00fanico atributo que cambiar\u00e1 entre experimentos es &#8220;chaosServiceAccount&#8221;.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-797b7c6 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"797b7c6\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosEngine\r\nmetadata:\r\n  name: app-sample-chaos # Nombre del chaos-engine\r\n  namespace: testing     # Namespace de testing\r\nspec:\r\n  annotationCheck: &quot;true&quot; # Hemos creado una anotaci&oacute;n en nuestro deployment app-sample. Con la propiedad marcada a &quot;true&quot; indicamos que aplicarmeos el experimento a este despliegue.\r\n\r\n  engineState: &quot;active&quot;   # Activaci&oacute;n\/desactivaci&oacute;n de experimento\r\n\r\n  appinfo:                # En esta secci&oacute;n proporcionamos la informaci&oacute;n de nuestro deployment.\r\n    appns: &quot;testing&quot;      # Namespace donde se localiza\r\n    applabel: &quot;app.kubernetes.io\/name=app-sample&quot; # Etiqueta asociada a nuestro deployment\r\n    appkind: &quot;deployment&quot; # Tipo de recurso (s&oacute;lo admite deployment, lo que afectar&aacute; a todos los pods)\r\n\r\n  chaosServiceAccount: container-kill-sa # Nombre del service account (creado en el paso anterior)\r\n  monitoring: true       # si queremos activar la monitorizaci&oacute;n (prometheus o similares)\r\n  jobCleanUpPolicy: &quot;delete&quot; # Permite controlar la limpieza de recursos tras la ejecuci&oacute;n. Especificar &quot;retain&quot; para debug.\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a08c0c8 elementor-widget elementor-widget-text-editor\" data-id=\"a08c0c8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><strong>Especificaciones de componentes<\/strong><\/h5><p>En esta secci\u00f3n definiremos las variables de entorno propias de cada experimento. Las variables &#8220;CHAOS_INTERVAL&#8221; y &#8220;TOTAL_CHAOS_DURATION&#8221; son comunes a todos los experimentos.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-26ec09f elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"26ec09f\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>  experiments:\r\n    - name: container-kill # Nombre del experimento\r\n      spec:\r\n        components:\r\n          env:\r\n            # Intervalo (segundos) por cada iteraci&oacute;n\r\n            - name: CHAOS_INTERVAL\r\n              value: &quot;10&quot;\r\n\r\n            # Tiempo total (segundos) que durar&aacute; el experimento\r\n            - name: TOTAL_CHAOS_DURATION\r\n              value: &quot;60&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-508a6fa elementor-widget elementor-widget-text-editor\" data-id=\"508a6fa\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><strong>Especificaciones de pruebas<\/strong><\/h5><p>En esta secci\u00f3n se informan los atributos para las pruebas de validaci\u00f3n. El resultado del experimento depender\u00e1 del cumplimiento de la validaci\u00f3n especificada.<\/p><p>En el siguiente\u00a0<a href=\"https:\/\/docs.litmuschaos.io\/docs\/litmus-probe\/\" rel=\"nofollow\">enlace<\/a>\u00a0podeis consultar los tipos de pruebas disponibles.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bf88319 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"bf88319\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>        probe:\r\n          - name: &quot;check-frontend-access-url&quot; # Nombre de prueba\r\n            type: &quot;httpProbe&quot;                 # Petici&oacute;n de tipo HTTP(S). Alternativas: cmdProbe, k8sProbe, promProbe.\r\n            httpProbe\/inputs:                  \r\n              url: &quot;http:\/\/app-sample.testing.svc.cluster.local&quot; # URL a validar\r\n              insecureSkipVerify: false                               # Permitir HTTP sin TLS\r\n              method:\r\n                get:                          # Petici&oacute;n tipo GET\r\n                  criteria: ==                # Criterio a evaluar\r\n                  responseCode: &quot;200&quot;         # Respuesta a evaluar\r\n            mode: &quot;Continuous&quot;                # La prueba se ejecuta de forma continua (alternativas: SoT, EoT, Edge, OnChaos)\r\n            runProperties:\r\n              probeTimeout: 5                 # N&uacute;mero de segundos para timeout en la petici&oacute;n\r\n              interval: 5                     # Intervalo (segundos) entre re-intentos\r\n              retry: 1                        # N&uacute;mero de re-intento antes de dar por fallida la validaci&oacute;n   \r\n              probePollingInterval: 2         # Intervalo (segundos) entre peticiones\r\n\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a42a8e9 elementor-widget elementor-widget-text-editor\" data-id=\"a42a8e9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h5><strong>Gesti\u00f3n de experimentos<\/strong><\/h5><p>Una de las principales ventajas de litmus es poder definir los experimentos de forma declarativa, lo que nos permite incluir f\u00e1cilmente nuestros gestores de plantillas. Recomendamos el uso de\u00a0<a href=\"https:\/\/kustomize.io\/\" rel=\"nofollow\">kustomize<\/a>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c72f17b elementor-widget elementor-widget-heading\" data-id=\"c72f17b\" data-element_type=\"widget\" id=\"experimentos\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Ejecuci\u00f3n de experimentos<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd3a2f3 elementor-widget elementor-widget-text-editor\" data-id=\"fd3a2f3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>Container Kill<\/strong><\/h4><ul><li><p><strong>Descripci\u00f3n:<\/strong>\u00a0Aborta la ejecuci\u00f3n del servicio docker dentro de un pod. La selecci\u00f3n del pod es aleatoria.<\/p><\/li><li><p><strong>Informaci\u00f3n oficial del experimento:<\/strong>\u00a0<a href=\"https:\/\/docs.litmuschaos.io\/docs\/container-kill\/\" rel=\"nofollow\">enlace<\/a><\/p><\/li><li><p><strong>Criterio de entrada:<\/strong>\u00a02 pods de app-sample en estado &#8220;Running&#8221;<\/p><div class=\"highlight highlight-source-shell position-relative\"><pre>  kubectl get pods -n <span class=\"pl-s\"><span class=\"pl-pds\">\"<\/span><span class=\"pl-smi\">${TESTING_NAMESPACE}<\/span><span class=\"pl-pds\">\"<\/span><\/span><\/pre><\/div><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-74fbee9 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"74fbee9\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>  kubectl get pods -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n  # -----------------------------------------\r\n\r\n  NAME                          READY   STATUS    RESTARTS   AGE\r\n  app-sample-7ff489dbd5-82ppw   1\/1     Running   0          9h\r\n  app-sample-7ff489dbd5-jg9vh   1\/1     Running   0          9h\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-034d231 elementor-widget elementor-widget-text-editor\" data-id=\"034d231\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Par\u00e1metros de entrada experimento:<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b0d76b8 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b0d76b8\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>experiments:\r\n    - name: container-kill\r\n    spec:\r\n        components:\r\n        env:\r\n            # provide the chaos interval\r\n            - name: CHAOS_INTERVAL\r\n            value: &quot;10&quot;\r\n\r\n            # provide the total chaos duration\r\n            - name: TOTAL_CHAOS_DURATION\r\n            value: &quot;20&quot;\r\n\r\n            - name: CONTAINER_RUNTIME\r\n            value: &quot;docker&quot;\r\n\r\n            - name: SOCKET_PATH\r\n            value: &quot;\/var\/run\/docker.sock&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2093992 elementor-widget elementor-widget-text-editor\" data-id=\"2093992\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Hip\u00f3tesis:<\/strong>\u00a0Tenemos dos pods escuchando por el 80 tras un balanceador. Nuestro deployment tiene readinessProbe con periodSeconds=1 y failureThreshold=1. Si uno de los pods deja de responder, el balanceador deja de enviar tr\u00e1fico a ese pod y debe responder el otro. Hemos establecido el healthcheck del experimento cada 5s (tiempo m\u00e1ximo de respuesta aceptable) atacando directamente contra el balanceador, por lo que no deber\u00edamos de tener p\u00e9rdida de servicio en ning\u00fan momento.<\/p><\/li><li><p><strong>Creaci\u00f3n de SA, Role y RoleBinding<\/strong><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d6ed3c8 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"d6ed3c8\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/kill-container\/kill-container-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7566df0 elementor-widget elementor-widget-text-editor\" data-id=\"7566df0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Ejecuci\u00f3n de experimento<\/strong><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d2443ae elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"d2443ae\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/kill-container\/chaos-engine-kill-container.yaml  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# Awaited -&gt; Pass\/Fail\r\nwatch -n 1 kubectl get chaosresult app-sample-chaos-container-kill -n &quot;${TESTING_NAMESPACE}&quot; -o jsonpath=&quot;{.status.experimentstatus.verdict}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae62281 elementor-widget elementor-widget-text-editor\" data-id=\"ae62281\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Observaciones:<\/strong>\u00a0durante el experimento observamos 2 reinicios de pod con transici\u00f3n &#8220;Running&#8221; -&gt; &#8220;Error&#8221; -&gt; &#8220;Running&#8221;.<\/p><\/li><li><p><strong>Validaci\u00f3n:<\/strong>\u00a0Peticiones get al balanceador con respuesta 200.<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-da924d4 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"da924d4\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>probe:\r\n- name: &quot;check-frontend-access-url&quot;\r\n    type: &quot;httpProbe&quot;\r\n    httpProbe\/inputs:\r\n    url: &quot;http:\/\/app-sample.testing.svc.cluster.local&quot;\r\n    insecureSkipVerify: false\r\n    method:\r\n        get:\r\n        criteria: ==\r\n        responseCode: &quot;200&quot;\r\n    mode: &quot;Continuous&quot;\r\n    runProperties:\r\n    probeTimeout: 5\r\n    interval: 5\r\n    retry: 1\r\n    probePollingInterval: 2\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-efc52d3 elementor-widget elementor-widget-text-editor\" data-id=\"efc52d3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Resultado:<\/strong>\u00a0resultado &#8220;Pass&#8221; (dos pods en estado &#8220;Running&#8221;, sin p\u00e9rdida de servicio durante la duraci\u00f3n del experimento)<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2badf63 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"2badf63\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>$ kubectl describe chaosresult app-sample-chaos-container-kill -n &quot;${TESTING_NAMESPACE}&quot; \r\n\r\n# --------------------------------------------------------------------------------------\r\n\r\nSpec:\r\n    Engine:      app-sample-chaos\r\n    Experiment:  container-kill\r\nStatus:\r\n    Experimentstatus:\r\n        Fail Step:                 N\/A\r\n        Phase:                     Completed\r\n        Probe Success Percentage:  100\r\n        Verdict:                   Pass\r\nHistory:\r\n    Failed Runs:   0\r\n    Passed Runs:   6\r\n    Stopped Runs:  0\r\nProbe Status:\r\n    Name:  check-frontend-access-url\r\n    Status:\r\n        Continuous:  Passed \ud83d\udc4d\r\n    Type:            httpProbe\r\nEvents:\r\n    Type    Reason   Age    From                         Message\r\n    ----    ------   ----   ----                         -------\r\n    Normal  Awaited  4m48s  container-kill-5i56m6-4pkxg  experiment: container-kill, Result: Awaited\r\n    Normal  Pass     4m4s   container-kill-5i56m6-4pkxg  experiment: container-kill, Result: Pass\r\n\r\n\r\n$ kubectl get pods -n testing\r\n\r\nNAME                          READY   STATUS    RESTARTS   AGE\r\napp-sample-6c48f8c4cc-74lvl   1\/1     Running   2          25m\r\napp-sample-6c48f8c4cc-msdmj   1\/1     Running   0          25m\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e0f9344 elementor-widget elementor-widget-image\" data-id=\"e0f9344\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/07\/kill-container.png\" title=\"\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7eb4f96 elementor-widget elementor-widget-text-editor\" data-id=\"7eb4f96\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><h4><strong>Pod autoscaler<\/strong><\/h4><ul><li><p><strong>Descripci\u00f3n:<\/strong>\u00a0permite escalar las r\u00e9plicas para testear el autoescalado en el nodo.<\/p><\/li><li><p><strong>Informaci\u00f3n oficial del experimento:<\/strong>\u00a0<a href=\"https:\/\/docs.litmuschaos.io\/docs\/pod-autoscaler\/\" rel=\"nofollow\">enlace<\/a><\/p><\/li><li><p><strong>Criterio de entrada:<\/strong>\u00a02 pods de app-sample en estado &#8220;Running&#8221;<\/p><\/li><\/ul><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8c7cc82 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"8c7cc82\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>  $ kubectl get pods -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n  # ------------------------------------------\r\n\r\n  NAME                          READY   STATUS    RESTARTS   AGE\r\n  app-sample-6c48f8c4cc-74lvl   1\/1     Running   2          29m\r\n  app-sample-6c48f8c4cc-msdmj   1\/1     Running   0          28m\r\n\r\n\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3eaa079 elementor-widget elementor-widget-text-editor\" data-id=\"3eaa079\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Par\u00e1metros de entrada experimento:<\/strong><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-785da59 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"785da59\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>experiments:\r\n  - name: pod-autoscaler\r\n    spec:\r\n      components:\r\n        env:\r\n          # set chaos duration (in sec) as desired\r\n          - name: TOTAL_CHAOS_DURATION\r\n            value: &quot;60&quot;\r\n\r\n          # number of replicas to scale\r\n          - name: REPLICA_COUNT\r\n            value: &quot;10&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c586d30 elementor-widget elementor-widget-text-editor\" data-id=\"c586d30\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Hip\u00f3tesis:<\/strong>\u00a0Disponemos de un HPA con min = 2 y max = 10. Con la ejecuci\u00f3n de este experimento queremos validar que nuestro nodo es capaz de escalar a 10 r\u00e9plicas (el max. establecido en el HPA). Cuando ejecutemos el experimento, se crear\u00e1n 10 r\u00e9plicas y en ning\u00fan momento tendremos p\u00e9rdida de servicio. Nuestro HPA tiene establecido el par\u00e1metro &#8220;&#8211;horizontal-pod-autoscaler-downscale-stabilization&#8221; a 300s, por lo que durante ese intervalo tendremos 10 r\u00e9plicas en estado &#8220;Running&#8221; y transcurrido ese intervalo, volveremos a tener 2 r\u00e9plicas.<\/p><\/li><li><p><strong>Creaci\u00f3n de SA, Role y RoleBinding<\/strong><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dbc480c elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"dbc480c\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>$ kubectl apply -f src\/litmus\/pod-autoscaler\/pod-autoscaler-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aabb416 elementor-widget elementor-widget-text-editor\" data-id=\"aabb416\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Ejecuci\u00f3n de experimento<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-77ac680 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"77ac680\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>$ kubectl apply -f src\/litmus\/pod-autoscaler\/chaos-engine-pod-autoscaler.yaml  -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a398faf elementor-widget elementor-widget-text-editor\" data-id=\"a398faf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Observaciones:<\/strong><\/p><\/li><li><p><strong>Validaci\u00f3n:<\/strong>\u00a0Peticiones get al balanceador con respuesta 200.<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-47a9bb2 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"47a9bb2\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>probe:\r\n- name: &quot;check-frontend-access-url&quot;\r\n    type: &quot;httpProbe&quot;\r\n    httpProbe\/inputs:\r\n    url: &quot;http:\/\/app-sample.testing.svc.cluster.local&quot;\r\n    insecureSkipVerify: false\r\n    method:\r\n        get:\r\n        criteria: ==\r\n        responseCode: &quot;200&quot;\r\n    mode: &quot;Continuous&quot;\r\n    runProperties:\r\n    probeTimeout: 5\r\n    interval: 5\r\n    retry: 1\r\n    probePollingInterval: 2\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a02bce8 elementor-widget elementor-widget-text-editor\" data-id=\"a02bce8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Resultado:<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b3ea10a elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"b3ea10a\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>$ kubectl describe chaosresult app-sample-chaos-pod-autoscaler  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# ----------------------------------------------------------------------------------------\r\n\r\nSpec:\r\n    Engine:      app-sample-chaos\r\n    Experiment:  pod-autoscaler\r\nStatus:\r\n    Experimentstatus:\r\n        Fail Step:                 N\/A\r\n        Phase:                     Completed\r\n        Probe Success Percentage:  100\r\n        Verdict:                   Pass\r\nHistory:\r\n    Failed Runs:   0\r\n    Passed Runs:   6\r\n    Stopped Runs:  0\r\nProbe Status:\r\n    Name:  check-frontend-access-url\r\n    Status:\r\n        Continuous:  Passed \ud83d\udc4d\r\n    Type:            httpProbe\r\nEvents:\r\n    Type    Reason   Age    From                         Message\r\n    ----    ------   ----   ----                         -------\r\n    Normal  Awaited  4m46s  pod-autoscaler-95wa6x-858jv  experiment: pod-autoscaler, Result: Awaited\r\n    Normal  Pass     3m32s  pod-autoscaler-95wa6x-858jv  experiment: pod-autoscaler, Result: Pass\r\n\r\n$ kubectl get pods -n testing\r\n\r\n# ---------------------------\r\n\r\nNAME                          READY   STATUS        RESTARTS   AGE\r\napp-sample-6c48f8c4cc-5kzpg   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-74lvl   0\/1     Running       2          32m\r\napp-sample-6c48f8c4cc-bflws   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-c5ls8   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-d9zj4   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-f2xnt   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-f7qdl   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-ff84v   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-k29rr   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-l5fqp   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-m587t   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-msdmj   1\/1     Running       0          32m\r\napp-sample-6c48f8c4cc-n5h6l   0\/1     Completed     0          39s\r\napp-sample-6c48f8c4cc-qr5nd   0\/1     Completed     0          39s\r\napp-sample-chaos-runner       0\/1     Completed     0          47s\r\npod-autoscaler-95wa6x-858jv   0\/1     Completed     0          45s\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ab78857 elementor-widget elementor-widget-image\" data-id=\"ab78857\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/07\/pod-autoscaler.png\" title=\"\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ed3b63e elementor-widget elementor-widget-text-editor\" data-id=\"ed3b63e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>Pod CPU Hog<\/strong><\/h4><ul><li><p><strong>Descripci\u00f3n:<\/strong>\u00a0permite consumir recursos de CPU dentro de POD<\/p><\/li><li><p><strong>Informaci\u00f3n oficial del experimento:<\/strong>\u00a0<a href=\"https:\/\/docs.litmuschaos.io\/docs\/pod-cpu-hog\/\" rel=\"nofollow\">enlace<\/a><\/p><\/li><li><p><strong>Criterio de entrada:<\/strong>\u00a02 pods de app-sample en estado &#8220;Running&#8221;<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf6ba11 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"cf6ba11\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>  kubectl get pods -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n  # ---------------------------------------\r\n\r\n  NAME                          READY   STATUS    RESTARTS   AGE\r\n  app-sample-6c48f8c4cc-74lvl   1\/1     Running   2          52m\r\n  app-sample-6c48f8c4cc-msdmj   1\/1     Running   0          52m\r\n\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f5f641a elementor-widget elementor-widget-text-editor\" data-id=\"f5f641a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Par\u00e1metros de entrada experimento:<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b65708 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"7b65708\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>experiments:\r\n  - name: pod-cpu-hog\r\n    spec:\r\n      components:\r\n        env:\r\n          #number of cpu cores to be consumed\r\n          #verify the resources the app has been launched with\r\n          - name: CPU_CORES\r\n            value: &quot;1&quot;\r\n\r\n          - name: TOTAL_CHAOS_DURATION\r\n            value: &quot;60&quot; # in seconds\r\n\r\n          - name: PODS_AFFECTED_PERC\r\n            value: &quot;0&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40c1d99 elementor-widget elementor-widget-text-editor\" data-id=\"40c1d99\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Hip\u00f3tesis:<\/strong>\u00a0Disponemos de un HPA con min = 2 y max = 10. Con la ejecuci\u00f3n de este experimento queremos validar que nuestro HPA funciona correctamente. Tenemos establecido un targetCPUUtilizationPercentage=50%, lo que quiere decir que si inyectamos consumo de CPU en un pod, el HPA debe establecer el n\u00famero de r\u00e9plicas a 3 (2 min + 1 autoscaler). En ning\u00fan momento debemos tener p\u00e9rdida de servicio. Nuestro HPA tiene establecido el par\u00e1metro &#8220;&#8211;horizontal-pod-autoscaler-downscale-stabilization&#8221; a 300s, por lo que durante ese intervalo tendremos 10 r\u00e9plicas en estado &#8220;Running&#8221; y transcurrido ese intervalo, volveremos a tener 2 r\u00e9plicas.<\/p><\/li><li><p><strong>Creaci\u00f3n de SA, Role y RoleBinding<\/strong><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e301a0 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"3e301a0\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/pod-cpu-hog\/pod-cpu-hog-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e178f49 elementor-widget elementor-widget-text-editor\" data-id=\"e178f49\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Ejecuci\u00f3n de experimento<\/strong><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6ada140 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"6ada140\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/pod-cpu-hog\/chaos-engine-pod-cpu-hog.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d904a0 elementor-widget elementor-widget-text-editor\" data-id=\"8d904a0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Observaciones:<\/strong>\u00a0durante el experimento vemos 2 pods en estado &#8220;Runnning&#8221;. Se comienza a inyectar consumo en uno de los POD y se autoescala a 3 r\u00e9plicas. A los 300s se vuelve a tener 2 r\u00e9plicas.<\/p><\/li><li><p><strong>Validaci\u00f3n:<\/strong>\u00a0Peticiones get al balanceador con respuesta 200.<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8ab9e6d elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"8ab9e6d\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>probe:\r\n- name: &quot;check-frontend-access-url&quot;\r\n    type: &quot;httpProbe&quot;\r\n    httpProbe\/inputs:\r\n    url: &quot;http:\/\/app-sample.testing.svc.cluster.local&quot;\r\n    insecureSkipVerify: false\r\n    method:\r\n        get:\r\n        criteria: ==\r\n        responseCode: &quot;200&quot;\r\n    mode: &quot;Continuous&quot;\r\n    runProperties:\r\n    probeTimeout: 5\r\n    interval: 5\r\n    retry: 1\r\n    probePollingInterval: 2\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e5302fc elementor-widget elementor-widget-text-editor\" data-id=\"e5302fc\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><p><strong>Resultado:<\/strong>\u00a0resultado &#8220;Pass&#8221; (tres pods en estado &#8220;Running&#8221;, sin p\u00e9rdida de servicio durante la duraci\u00f3n del experimento)<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5602087 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"5602087\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>$ kubectl describe chaosresult app-sample-chaos-pod-cpu-hog -n &quot;${TESTING_NAMESPACE}&quot; \r\n\r\n# -----------------------------------------------------------------------------------\r\n\r\nSpec:\r\n    Engine:      app-sample-chaos\r\n    Experiment:  pod-cpu-hog\r\nStatus:\r\n    Experimentstatus:\r\n        Fail Step:                 N\/A\r\n        Phase:                     Completed\r\n        Probe Success Percentage:  100\r\n        Verdict:                   Pass\r\nHistory:\r\n    Failed Runs:   0\r\n    Passed Runs:   6\r\n    Stopped Runs:  0\r\nProbe Status:\r\n    Name:  check-frontend-access-url\r\n    Status:\r\n        Continuous:  Passed \ud83d\udc4d\r\n    Type:            httpProbe\r\nEvents:\r\n    Type    Reason   Age    From                         Message\r\n    ----    ------   ----   ----                         -------\r\n    Normal  Awaited  2m23s  pod-cpu-hog-mpen59-zcpr6  experiment: pod-cpu-hog, Result: Awaited\r\n    Normal  Pass     74s    pod-cpu-hog-mpen59-zcpr6  experiment: pod-cpu-hog, Result: Pass\r\n\r\n$ kubectl get pods -n testing\r\n\r\n  NAME                          READY   STATUS      RESTARTS   AGE\r\n  app-sample-6c48f8c4cc-74lvl   1\/1     Running     6          46m\r\n  app-sample-6c48f8c4cc-msdmj   1\/1     Running     0          46m\r\n  app-sample-5c5575cdb7-hq5gs   1\/1     Running     0          49s\r\n  app-sample-chaos-runner       0\/1     Completed   0          104s\r\n  pod-cpu-hog-mpen59-zcpr6      0\/1     Completed   0          103s\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40fc87e elementor-widget elementor-widget-image\" data-id=\"40fc87e\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" data-src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2021\/07\/pod-cpu.png\" title=\"\" alt=\"\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" class=\"lazyload\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cd2fe5b elementor-widget elementor-widget-text-editor\" data-id=\"cd2fe5b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>Extra &#8211; Otros experimentos<\/strong><\/h4><ul><li><p><strong>pod-network-loss<\/strong><\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8722621 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"8722621\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/pod-network-loss\/pod-network-loss-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nkubectl apply -f src\/litmus\/pod-network-loss\/chaos-engine-pod-network-loss.yaml  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nkubectl describe chaosresult app-sample-chaos-pod-network-loss -n &quot;${TESTING_NAMESPACE}&quot;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6b65284 elementor-widget elementor-widget-text-editor\" data-id=\"6b65284\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>pod-memory-hog<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bd8a8ea elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"bd8a8ea\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/pod-memory\/pod-memory-hog-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nkubectl apply -f src\/litmus\/pod-memory\/chaos-engine-pod-memory-hog.yaml  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nkubectl describe chaosresult app-sample-chaos-pod-memory-hog -n &quot;${TESTING_NAMESPACE}&quot; \r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dcc30a1 elementor-widget elementor-widget-text-editor\" data-id=\"dcc30a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>pod-delete<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e723690 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"e723690\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/pod-delete\/pod-delete-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nkubectl apply -f src\/litmus\/pod-delete\/chaos-engine-pod-delete.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nkubectl describe chaosresult app-sample-chaos-pod-delete -n &quot;${TESTING_NAMESPACE}&quot; \r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ae553d2 elementor-widget elementor-widget-heading\" data-id=\"ae553d2\" data-element_type=\"widget\" id=\"plan\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Planificaci\u00f3n de experimentos<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b7aa40 elementor-widget elementor-widget-text-editor\" data-id=\"4b7aa40\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Litmus soporta el uso de planificaciones de experimentos. Dispone de las siguientes opciones:<\/p><ul><li><strong>Inmediato<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9fc542f elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"9fc542f\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    now: true\r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7621bb4 elementor-widget elementor-widget-text-editor\" data-id=\"7621bb4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Timestamp espec\u00edfico<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5f7e736 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"5f7e736\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    once:\r\n      #should be modified according to current UTC Time\r\n      executionTime: &quot;2020-05-12T05:47:00Z&quot; \r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aff2bf0 elementor-widget elementor-widget-text-editor\" data-id=\"aff2bf0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Repeticiones<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6837fd3 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"6837fd3\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    repeat:\r\n      properties:\r\n         #format should be like &quot;10m&quot; or &quot;2h&quot; accordingly for minutes or hours\r\n        minChaosInterval: &quot;2m&quot;  \r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-304d05e elementor-widget elementor-widget-text-editor\" data-id=\"304d05e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Repeticiones entre un rango de fechas<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1976a28 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"1976a28\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    repeat:\r\n      timeRange:\r\n        #should be modified according to current UTC Time\r\n        startTime: &quot;2020-05-12T05:47:00Z&quot;   \r\n        endTime: &quot;2020-09-13T02:58:00Z&quot;   \r\n      properties:\r\n        #format should be like &quot;10m&quot; or &quot;2h&quot; accordingly for minutes and hours\r\n        minChaosInterval: &quot;2m&quot;  \r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0891884 elementor-widget elementor-widget-text-editor\" data-id=\"0891884\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Repeticiones con una fecha de finalizaci\u00f3n<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7efd52d elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"7efd52d\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    repeat:\r\n      timeRange:\r\n        #should be modified according to current UTC Time\r\n        endTime: &quot;2020-09-13T02:58:00Z&quot;   \r\n      properties:\r\n        #format should be like &quot;10m&quot; or &quot;2h&quot; accordingly for minutes and hours\r\n        minChaosInterval: &quot;2m&quot;   \r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b9b1ed9 elementor-widget elementor-widget-text-editor\" data-id=\"b9b1ed9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Repeticiones desde una fecha de inicio (ejecuciones indefinidas)<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2901efd elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"2901efd\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    repeat:\r\n      timeRange:\r\n        #should be modified according to current UTC Time\r\n        startTime: &quot;2020-05-12T05:47:00Z&quot;   \r\n      properties:\r\n         #format should be like &quot;10m&quot; or &quot;2h&quot; accordingly for minutes and hours\r\n        minChaosInterval: &quot;2m&quot; \r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d27b0c8 elementor-widget elementor-widget-text-editor\" data-id=\"d27b0c8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Ejecuci\u00f3n entre horas con frecuencia<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8007fef elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"8007fef\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    repeat:\r\n      properties:\r\n        #format should be like &quot;10m&quot; or &quot;2h&quot; accordingly for minutes and hours\r\n        minChaosInterval: &quot;2m&quot;   \r\n      workHours:\r\n        # format should be &lt;starting-hour-number&gt;-&lt;ending-hour-number&gt;(inclusive)\r\n        includedHours: 0-12\r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2e9d94 elementor-widget elementor-widget-text-editor\" data-id=\"f2e9d94\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><strong>Ejecuciones peri\u00f3dicas en d\u00edas espec\u00edficos<\/strong><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-117138c elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"117138c\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>apiVersion: litmuschaos.io\/v1alpha1\r\nkind: ChaosSchedule\r\nmetadata:\r\n  name: schedule-nginx\r\nspec:\r\n  schedule:\r\n    repeat:\r\n      properties:\r\n        #format should be like &quot;10m&quot; or &quot;2h&quot; accordingly for minutes and hours\r\n        minChaosInterval: &quot;2m&quot;   \r\n      workDays:\r\n        includedDays: &quot;Mon,Tue,Wed,Sat,Sun&quot;\r\n  engineTemplateSpec:\r\n    appinfo:\r\n      appns: testing\r\n      applabel: app.kubernetes.io\/name=app-sample\r\n      appkind: deployment\r\n    annotationCheck: &#039;true&#039;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-835780c elementor-widget elementor-widget-heading\" data-id=\"835780c\" data-element_type=\"widget\" id=\"apache\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">LitmusChaos + Load Test Performance con Apache Jmeter<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ff79bad elementor-widget elementor-widget-text-editor\" data-id=\"ff79bad\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Hasta el momento hemos realizado pruebas para validar c\u00f3mo se comporta nuestro nodo de k8s bajo escenarios ideales, sin carga en el sistema por parte de los usuarios finales de la aplicaci\u00f3n.<\/p><p>Por lo general, tendremos definidos SLIs\/SLOs\/SLAs los cuales hay que garantizar que cumplimos bajo cualquier eventualidad y para ello debemos de disponer de las herramientas adecuadas. En este caso, Litmus +\u00a0<a href=\"https:\/\/jmeter.apache.org\/\" rel=\"nofollow\">Apache Jmeter<\/a>\u00a0nos facilitar\u00e1n la tarea de simular m\u00faltiples escenarios de concurrencia con inyecci\u00f3n de anomal\u00edas en el sistema. Durante esta fase de pruebas es posible que tengamos que realizar ajustes de dimensionamiento, modificar alguna pol\u00edtica de escalado o incluso que identifiquemos cuellos de botella y los equipos de desarrollo tengan que ajustar alg\u00fan componente.<\/p><p>Para no desvirtuar el objetivo del workshop con la definici\u00f3n de SLIs\/SLOs\/SLAs (m\u00e1s info\u00a0<a href=\"https:\/\/cloud.google.com\/blog\/products\/devops-sre\/sre-fundamentals-slis-slas-and-slos\" rel=\"nofollow\">aqu\u00ed<\/a>), \u00fanicamente vamos a utilizar la m\u00e9trica &#8220;Ratio de error&#8221;, la cual vamos a establecer en &lt; 2,00%.<\/p><p>Planteamos un escenario ficticio donde nuestra aplicaci\u00f3n tiene 200 usuarios concurrentes durante la mayor parte del tiempo de servicio.<\/p><p>Procedemos a descargar el binario de JMeter y unos complementos para la visualizaci\u00f3n de gr\u00e1ficas:<\/p><p>JMeter requiere Java JRE. En el caso de no estar disponible en el sistema, puedes realizar la instalaci\u00f3n de [<span class=\"pl-e\">OpenJDK<\/span>](https:\/\/adoptopenjdk.net\/index.html). En caso contrario, omite este paso.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-07f564f elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"07f564f\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>curl -L https:\/\/ftp.cixug.es\/apache\/\/jmeter\/binaries\/apache-jmeter-5.4.1.tgz --output \/tmp\/apache-jmeter.tgz\r\ntar zxvf \/tmp\/apache-jmeter.tgz &amp;&amp; mv apache-jmeter-5.4.1 apache-jmeter\r\n\r\n# install plugins-manager\r\ncurl -L https:\/\/jmeter-plugins.org\/get\/ --output apache-jmeter\/lib\/ext\/jmeter-plugins-manager-1.6.jar\r\n\r\n# install bzm - Concurrency Thread Group\r\ncurl -L https:\/\/repo1.maven.org\/maven2\/kg\/apc\/jmeter-plugins-casutg\/2.9\/jmeter-plugins-casutg-2.9.jar --output apache-jmeter\/lib\/ext\/jmeter-plugins-casutg-2.9.jar\r\ncurl -L https:\/\/repo1.maven.org\/maven2\/kg\/apc\/jmeter-plugins-cmn-jmeter\/0.6\/jmeter-plugins-cmn-jmeter-0.6.jar --output apache-jmeter\/lib\/jmeter-plugins-cmn-jmeter-0.6.jar\r\ncurl -L https:\/\/repo1.maven.org\/maven2\/kg\/apc\/cmdrunner\/2.2\/cmdrunner-2.2.jar --output apache-jmeter\/lib\/cmdrunner-2.2.jar\r\ncurl -L https:\/\/repo1.maven.org\/maven2\/net\/sf\/json-lib\/json-lib\/2.4\/json-lib-2.4.jar --output apache-jmeter\/lib\/json-lib-2.4-jdk15.jar\r\n\r\n\r\ncurl -L https:\/\/repo1.maven.org\/maven2\/kg\/apc\/jmeter-plugins-graphs-basic\/2.0\/jmeter-plugins-graphs-basic-2.0.jar --output apache-jmeter\/lib\/ext\/jmeter-plugins-graphs-basic-2.0.jar\r\ncurl -L https:\/\/repo1.maven.org\/maven2\/kg\/apc\/jmeter-plugins-graphs-additional\/2.0\/jmeter-plugins-graphs-additional-2.0.jar --output apache-jmeter\/lib\/ext\/jmeter-plugins-graphs-additional-2.0.jar\r\n\r\n# Get url service\r\nurl=$(minikube service app-sample --url -n &quot;${TESTING_NAMESPACE}&quot;)\r\n\r\nHOST_APP_SAMPLE=$(echo ${url} | cut -d\/ -f3 | cut -d: -f1)\r\nPORT_APP_SAMPLE=$(echo ${url} | cut -d: -f3)\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-43de7f7 elementor-widget elementor-widget-text-editor\" data-id=\"43de7f7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Vamos a validar que con el dimensionamiento actual cumplimos con los requisitos. Durante 60 segundos, ejecutamos 200 peticiones concurrentes, lo que se traduce en 12.000 peticiones. La petici\u00f3n ser\u00e1 de tipo &#8220;GET&#8221; por el puerto 80 del balanceador.<\/p><p>Este es el aspecto que tiene la GUI de JMeter con el plan de pruebas.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-125c6aa elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"125c6aa\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>TARGET_RATE=200\r\nRAMP_UP_TIME=60\r\nRAMP_UP_STEPS=1\r\n\r\n# GUI mode\r\nbash apache-jmeter\/bin\/jmeter.sh -t src\/jmeter\/litmus-k8s-workshop.jmx -f -l apache-jmeter\/logs\/result.jtl -j apache-jmeter\/logs\/jmeter.log -Jhost=${HOST_APP_SAMPLE} -Jport=${PORT_APP_SAMPLE} -Jtarget_rate=${TARGET_RATE} -Jramp_up_time=${RAMP_UP_TIME} -Jramp_up_steps=${RAMP_UP_STEPS}\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-96b7398 elementor-widget elementor-widget-image\" data-id=\"96b7398\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"581\" data-src=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-1024x581-1.png\" class=\"attachment-large size-large wp-image-10871 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-1024x581-1.png 1024w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-1024x581-1-300x170.png 300w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-1024x581-1-768x436.png 768w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/581;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2df97d5 elementor-widget elementor-widget-text-editor\" data-id=\"2df97d5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Nuestro dimensionamiento base son dos r\u00e9plicas de nuestro servicio app-sample:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8962426 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"8962426\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl get pods -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n# ----------------------------------------\r\n\r\nNAME                         READY   STATUS    RESTARTS   AGE\r\napp-sample-d9d578cfb-55flr   1\/1     Running   8          3h1m\r\napp-sample-d9d578cfb-klmxn   1\/1     Running   0          3h2m\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-862d444 elementor-widget elementor-widget-text-editor\" data-id=\"862d444\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Ejecutamos el plan de pruebas sin GUI:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7b27f2e elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"7b27f2e\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>TARGET_RATE=200\r\nRAMP_UP_TIME=60\r\nRAMP_UP_STEPS=1\r\n\r\nbash apache-jmeter\/bin\/jmeter.sh -n -t src\/jmeter\/litmus-k8s-workshop.jmx -f -l apache-jmeter\/logs\/result.jtl -j apache-jmeter\/logs\/jmeter.log -Jhost=${HOST_APP_SAMPLE} -Jport=${PORT_APP_SAMPLE} -Jtarget_rate=${TARGET_RATE} -Jramp_up_time=${RAMP_UP_TIME} -Jramp_up_steps=${RAMP_UP_STEPS}\r\n\r\nrm -rf apache-jmeter\/logs\/report &amp;&amp; bash apache-jmeter\/bin\/jmeter.sh -g apache-jmeter\/logs\/result.jtl -o apache-jmeter\/logs\/report\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-230de1b elementor-widget elementor-widget-text-editor\" data-id=\"230de1b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>En la ruta &#8220;.\/apache-jmeter\/logs\/report\/index.html&#8221; pod\u00e9is ver un dashboard con los resultados.<\/p><p>Hemos realizado 12000 peticiones con 200 usuarios concurrentes durante 60s. Estos son los resultados:<\/p><ul><li>Ratio de error: 0.00%<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a5fe0bf elementor-widget elementor-widget-image\" data-id=\"a5fe0bf\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"481\" data-src=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-001-1024x481-1.png\" class=\"attachment-large size-large wp-image-10865 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-001-1024x481-1.png 1024w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-001-1024x481-1-300x141.png 300w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-001-1024x481-1-768x361.png 768w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/481;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cf33709 elementor-widget elementor-widget-text-editor\" data-id=\"cf33709\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Vamos a realizar la misma prueba pero inyectando disrupcci\u00f3n de red en uno de los pods, lo que provocar\u00e1 que deje de responder (estado CrashLoopBackOff) y s\u00f3lo tengamos disponible una r\u00e9plica.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e04824 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"4e04824\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/pod-network-loss\/pod-network-loss-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\nkubectl apply -f src\/litmus\/pod-network-loss\/chaos-engine-pod-network-loss.yaml  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nTARGET_RATE=200\r\nRAMP_UP_TIME=60\r\nRAMP_UP_STEPS=1\r\n\r\nbash apache-jmeter\/bin\/jmeter.sh -n -t src\/jmeter\/litmus-k8s-workshop.jmx -f -l apache-jmeter\/logs\/result.jtl -j apache-jmeter\/logs\/jmeter.log -Jhost=${HOST_APP_SAMPLE} -Jport=${PORT_APP_SAMPLE} -Jtarget_rate=${TARGET_RATE} -Jramp_up_time=${RAMP_UP_TIME} -Jramp_up_steps=${RAMP_UP_STEPS}\r\n\r\nrm -rf apache-jmeter\/logs\/report &amp;&amp; bash apache-jmeter\/bin\/jmeter.sh -g apache-jmeter\/logs\/result.jtl -o apache-jmeter\/logs\/report\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3de1637 elementor-widget elementor-widget-image\" data-id=\"3de1637\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"509\" data-src=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-002-1024x509-1.png\" class=\"attachment-large size-large wp-image-10867 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-002-1024x509-1.png 1024w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-002-1024x509-1-300x149.png 300w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-002-1024x509-1-768x382.png 768w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/509;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-38719a9 elementor-widget elementor-widget-text-editor\" data-id=\"38719a9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>\u00bfQu\u00e9 ha sucedido?<\/strong><\/p><p>Al inyectar el experimento, uno de los pods ha dejado de responder. Si nos fijamos en la definici\u00f3n del\u00a0<em>deployment app-sample<\/em>, tenemos un\u00a0<em>livenessProbe<\/em>\u00a0cuya propiedad\u00a0<em>periodSeconds<\/em>\u00a0est\u00e1 establecida a 5 segundos y\u00a0<em>failureThreshold<\/em>\u00a0a 1 intento. Seg\u00fan nuestra configuraci\u00f3n, el balanceador env\u00eda el 50% aprox. del tr\u00e1fico a cada uno de los pods. Durante 5 segundos tenemos que el pod al que hemos inyectado una disrupci\u00f3n de red mediante el experimento no responde, lo que se traduce en error en la petici\u00f3n. Transcurridos los 5 segundos, el balanceador deja de enviar tr\u00e1fico a ese pod y s\u00f3lo tendremos un pod recibiendo peticiones.<\/p><p>Ten\u00edamos establecido un requisito que nuestro servicio no puede superar el 2% de errores bajo ning\u00fan escenario y hemos obtenido un 5,03% (603 peticiones err\u00f3neas), por lo que debemos realizar alg\u00fan ajuste para cumplir el objetivo.<\/p><p><strong>\u00bfCu\u00e1l es el resultado del experimento?<\/strong><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9cb8113 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"9cb8113\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl describe chaosresult app-sample-chaos-pod-network-loss  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\n#-------------------------\r\n\r\nEvents:\r\nType    Reason   Age    From                           Message\r\n----    ------   ----   ----                           -------\r\nNormal  Awaited  4m16s  pod-network-loss-uf6hms-sk47z  experiment: pod-network-loss, Result: Awaited\r\nNormal  Pass     2m23s  pod-network-loss-uf6hms-sk47z  experiment: pod-network-loss, Result: Pass\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b3de0a2 elementor-widget elementor-widget-text-editor\" data-id=\"b3de0a2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Aunque nuestro requisito de ratio de error &lt; 2,00% no se cumple, el experimento termina con resultado &#8220;Pass&#8221;. Esto es debido a que Litmus tiene como criterio de salida &#8220;Pass&#8221; si el pod vuelve a estar disponible, lo cual se cumple. Aqu\u00ed estamos haciendo uso de litmus para inyectar errores en el sistema.<\/p><p><strong>\u00bfC\u00f3mo podemos conseguir reducir el ratio de error?<\/strong><\/p><p>\u00danicamente con fines ilustrativos, para resolver el problema que nos ocupa, vamos a incrementar el n\u00famero de r\u00e9plicas a 4 en el HorizontalPodAutoscaler y en el\u00a0<em>deployment<\/em>\u00a0disminuir el valor de la propiedad\u00a0<em>periodSeconds<\/em>\u00a0de 5s a 2s. Con esto pasamos a distribuir el 25% del tr\u00e1fico a cada pod y adem\u00e1s, el tiempo que el pod afectado por la disrupci\u00f3n de tr\u00e1fico pasa de 5s a 2s, lo que debe traducirse en una reducci\u00f3n del ratio de error.<\/p><p>\u2139\ufe0f\u00a0Nuestro sistema debe estar dise\u00f1ado para adaptarse a la demanda en base a m\u00e9tricas (CPU, memoria, peticiones por segundo, latencia, I\/O, etc.) siempre manteniendo los m\u00ednimos recursos activos. Con la expansi\u00f3n de servicios gestionados de kubernetes en los principales proveedores cloud (EKS\/GKE\/AKS), disponemos de m\u00faltiples estrategias para conseguir dicho objetivo.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-54a594f elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"54a594f\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl edit deployment app-sample -n &quot;${TESTING_NAMESPACE}&quot; \r\n\r\nkubectl edit HorizontalPodAutoscaler app-sample-ha -n &quot;${TESTING_NAMESPACE}&quot; \r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e01f080 elementor-widget elementor-widget-text-editor\" data-id=\"e01f080\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Volvemos a ejecutar nuestro test:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7ad6bd9 elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"7ad6bd9\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'>kubectl apply -f src\/litmus\/pod-network-loss\/pod-network-loss-sa.yaml -n &quot;${TESTING_NAMESPACE}&quot;\r\nkubectl apply -f src\/litmus\/pod-network-loss\/chaos-engine-pod-network-loss.yaml  -n &quot;${TESTING_NAMESPACE}&quot;\r\n\r\nTARGET_RATE=200\r\nRAMP_UP_TIME=60\r\nRAMP_UP_STEPS=1\r\n\r\nbash apache-jmeter\/bin\/jmeter.sh -n -t src\/jmeter\/litmus-k8s-workshop.jmx -f -l apache-jmeter\/logs\/result.jtl -j apache-jmeter\/logs\/jmeter.log -Jhost=${HOST_APP_SAMPLE} -Jport=${PORT_APP_SAMPLE} -Jtarget_rate=${TARGET_RATE} -Jramp_up_time=${RAMP_UP_TIME} -Jramp_up_steps=${RAMP_UP_STEPS}\r\n\r\nrm -rf apache-jmeter\/logs\/report &amp;&amp; bash apache-jmeter\/bin\/jmeter.sh -g apache-jmeter\/logs\/result.jtl -o apache-jmeter\/logs\/report\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0392cb3 elementor-widget elementor-widget-image\" data-id=\"0392cb3\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"509\" data-src=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-003-1024x509-1.png\" class=\"attachment-large size-large wp-image-10869 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-003-1024x509-1.png 1024w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-003-1024x509-1-300x149.png 300w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/jmeter-gui-003-1024x509-1-768x382.png 768w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/509;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34d2189 elementor-widget elementor-widget-text-editor\" data-id=\"34d2189\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Como podemos observar, nuestros cambios han provocado disminuir nuestro ratio de error a 1,60%, por lo que conseguimos cumplir nuestro objetivo de &lt; 2,00%.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-83696b6 elementor-widget elementor-widget-heading\" data-id=\"83696b6\" data-element_type=\"widget\" id=\"portal\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Litmus UI Portal<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d9c771 elementor-widget elementor-widget-text-editor\" data-id=\"3d9c771\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Litmus dispone de un portal para poder realizar experimentos sin necesidad de utilizar la consola. Dispone de las siguientes funcionalidades:<\/p><ul><li>Gesti\u00f3n de workflows: dispone de todos los experimentos pre-cargados listos para ejecutar en tu k8s.<\/li><li>MyHubs: permite conectar a repositorios p\u00fablicos\/privados para hacer uso de tus propios experimentos.<\/li><li>Analytics: permite visualizar las ejecuciones de tus experimentos, as\u00ed como estad\u00edsticas sobre los mismos. Adem\u00e1s, permite conectar a otros DataSources como Prometheus.<\/li><li>Gesti\u00f3n de equipos y usuarios.<\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b4333e elementor-widget elementor-widget-elementor-syntax-highlighter\" data-id=\"4b4333e\" data-element_type=\"widget\" data-widget_type=\"elementor-syntax-highlighter.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<pre><code class='language-python'># install litmus portal\r\nkubectl apply -f src\/litmus\/portal\/portal.yaml\r\n\r\nminikube service litmusportal-frontend-service -n  ${LITMUS_NAMESPACE} &gt; \/dev\/null &amp;\r\n <\/code><\/pre><script>\nif (!document.getElementById('syntaxed-prism')) {\n\tvar my_awesome_script = document.createElement('script');\n\tmy_awesome_script.setAttribute('src','https:\/\/bluetab.org\/wp-content\/plugins\/syntax-highlighter-for-elementor\/assets\/prism2.js');\n\tmy_awesome_script.setAttribute('id','syntaxed-prism');\n\tdocument.body.appendChild(my_awesome_script);\n} else {\n\twindow.Prism && Prism.highlightAll();\n}\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3c81169 elementor-widget elementor-widget-image\" data-id=\"3c81169\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"438\" data-src=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/litmus-portal-1024x438-1.png\" class=\"attachment-large size-large wp-image-10875 lazyload\" alt=\"\" data-srcset=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/litmus-portal-1024x438-1.png 1024w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/litmus-portal-1024x438-1-300x128.png 300w, https:\/\/www.bluetab.com\/wp-content\/uploads\/2021\/07\/litmus-portal-1024x438-1-768x329.png 768w\" data-sizes=\"(max-width: 1024px) 100vw, 1024px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1024px; --smush-placeholder-aspect-ratio: 1024\/438;\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-93b281c elementor-widget elementor-widget-heading\" data-id=\"93b281c\" data-element_type=\"widget\" id=\"guia\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Gu\u00eda Litmus para desarrolladores<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-cec51ec elementor-widget elementor-widget-text-editor\" data-id=\"cec51ec\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>En la actualidad, litmus dispone de 53 experimentos a trav\u00e9s de\u00a0<a href=\"https:\/\/hub.litmuschaos.io\/\" rel=\"nofollow\">Litmus ChaosHub<\/a>. Est\u00e1n desarrollados principalmente en Go, aunque disponen de una SDK para python y ansible.<\/p><p>Los experimentos tienen una estructura bien definida (pre-checks, chaos-injection, litmus-probes, post-checks y result-updates) y es viable desarrollar experimentos que se ajusten a tus necesidades.<\/p><p>En este\u00a0<a href=\"https:\/\/docs.litmuschaos.io\/docs\/devguide\/\" rel=\"nofollow\">enlace<\/a>\u00a0encontrar\u00e9is toda la informaci\u00f3n para desarrolladores.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a18a33f elementor-widget elementor-widget-heading\" data-id=\"a18a33f\" data-element_type=\"widget\" id=\"finales\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Consideraciones finales<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9910ade elementor-widget elementor-widget-text-editor\" data-id=\"9910ade\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Debemos asumir que nuestro sistema no va a ser 100% tolerante a fallos pero ello no implica que pongamos todos los medios para minimizar los riesgos y en caso de producirse el desastre, lo hagamos de una forma relativamente controlada. La clave del \u00e9xito pasa por aplicar las pr\u00e1cticas de ingenier\u00eda del caos en fases tempranas del desarrollo, conocer las particularidades de la infraestructura donde ejecuta y disponer de herramientas adecuadas para automatizar las pruebas.<\/p><p>Un factor importante es dimensionar los esfuerzos en base a la criticidad del servicio que presta nuestro sistema: el esfuerzo en validar la resiliencia de un portal con informaci\u00f3n para empleados con 100 usuarios potenciales cuyo SLA es del 98% difiere mucho de una aplicaci\u00f3n bancaria que realiza operaciones financieras a miles de usuarios concurrentes cuyo SLA es del 99.9XX%. En ambos casos el \u00fanico m\u00e9todo para verificar el cumplimiento del SLA es mediante test de resiliencia pero existe una notable diferencia respecto al esfuerzo que deber\u00edamos dedicar.<\/p><p>En este workshop nos hemos centrado en Litmus y Kubernetes pero cabe recordar que dependiendo del sistema que estemos desarrollando, tengamos que complementar nuestras pruebas con otras herramientas, principalmente las enfocadas a la inyecci\u00f3n de fallos sobre infraestructura (<a href=\"https:\/\/github.com\/dastergon\/awesome-chaos-engineering\">+ info<\/a>).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80b23d7 elementor-widget elementor-widget-heading\" data-id=\"80b23d7\" data-element_type=\"widget\" id=\"referencias\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Referencias<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-625fc8f elementor-widget elementor-widget-text-editor\" data-id=\"625fc8f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li><a href=\"https:\/\/litmuschaos.io\/\" rel=\"nofollow\">Litmus official web<\/a><\/li><li><a href=\"https:\/\/github.com\/litmuschaos\/litmu\">Litmus GitHub<\/a><\/li><li><a href=\"https:\/\/principlesofchaos.org\/\" rel=\"nofollow\">Principles of Chaos Engineering<\/a><\/li><li><a href=\"https:\/\/www.gremlin.com\/community\/tutorials\/chaos-engineering-the-history-principles-and-practice\/\" rel=\"nofollow\">Chaos Engineering: the history, principles and practice<\/a><\/li><li><a href=\"https:\/\/github.com\/dastergon\/awesome-chaos-engineering\">Awesome Chaos Engineering<\/a><\/li><li><a href=\"https:\/\/cloud.google.com\/blog\/products\/devops-sre\/sre-fundamentals-sli-vs-slo-vs-sla\" rel=\"nofollow\">SRE Fundamentals &#8211; Google<\/a><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ec942c1 elementor-widget elementor-widget-heading\" data-id=\"ec942c1\" data-element_type=\"widget\" id=\"licencia\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Licencia<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-08987e4 elementor-widget elementor-widget-text-editor\" data-id=\"08987e4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Este workshop est\u00e1 licenciado bajo MIT (ver <a href=\"https:\/\/github.com\/angelmaroco\/litmus-chaos-engineering-workshop\/blob\/master\/LICENSE\">LICENSE<\/a>\u00a0para m\u00e1s detalle).<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-65c3381 elementor-widget elementor-widget-spacer\" data-id=\"65c3381\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-f668113 nav-column elementor-hidden-phone\" data-id=\"f668113\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0508221 nav-post elementor-widget elementor-widget-text-editor\" data-id=\"0508221\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h6><strong>Navegaci\u00f3n<\/strong><\/h6><p><a href=\"#introduccion\">Introducci\u00f3n<\/a><\/p><p><a href=\"#objetivos\">Objetivos del workshop<\/a><\/p><p><a href=\"#consola\">Preparaci\u00f3n de consola<\/a><\/p><p><a href=\"#clonar\">Clonaci\u00f3n de repositorio<\/a><\/p><p><a href=\"#minikube\">Creaci\u00f3n de entorno de pruebas K8s con minikube<\/a><\/p><p><a href=\"#namespaces\">Creaci\u00f3n de namespaces K8s<\/a><\/p><p><a href=\"#test\">Despliegue de aplicaci\u00f3n de test<\/a><\/p><p><a href=\"#chaos\">Despliegue\u00a0<em>Chaos Experiments<\/em><\/a><\/p><p><a href=\"#grafana\">Despliegue servicios monitorizaci\u00f3n: Prometheus + Grafana<\/a><\/p><p><a href=\"#litmuschaos\">Creaci\u00f3n de anotaci\u00f3n &#8220;litmuschaos&#8221;<\/a><\/p><p><a href=\"#detalle\">Detalle componentes de un experimento<\/a><\/p><p><a href=\"#experimentos\">Ejecuci\u00f3n de experimentos<\/a><\/p><p><a href=\"#plan\">Planificaci\u00f3n de experimentos<\/a><\/p><p><a href=\"#apache\">LitmusChaos +\u00a0<em>Load Test Performance<\/em>\u00a0con Apache Jmeter<\/a><\/p><p><a href=\"#portal\">Litmus UI Portal<\/a><\/p><p><a href=\"#guia\">Gu\u00eda Litmus para desarrolladores<\/a><\/p><p><a href=\"#finales\">Consideraciones finales<\/a><\/p><p><a href=\"#referencias\">Referencias<\/a><\/p><p><a href=\"#licencia\">Licencia<\/a><\/p><p><a href=\"#autor\">Autor<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-09395a3 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"09395a3\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-2ba3c08\" data-id=\"2ba3c08\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-f18d1b8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"f18d1b8\" data-element_type=\"section\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-inner-column elementor-element elementor-element-b490454\" data-id=\"b490454\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-a76f07c elementor-widget elementor-widget-heading\" data-id=\"a76f07c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7365ecc elementor-align-center elementor-widget elementor-widget-button\" data-id=\"7365ecc\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"\/es\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">DESCUBRE BLUETAB<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-7a7e9b1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7a7e9b1\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-0225831\" data-id=\"0225831\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-816937f\" data-id=\"816937f\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-756365e elementor-share-buttons--view-icon elementor-share-buttons--skin-minimal elementor-share-buttons--shape-circle elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"756365e\" data-element_type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Share on twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-twitter\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Share on linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<i class=\"fab fa-linkedin\" aria-hidden=\"true\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-92da4e0 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"92da4e0\" data-element_type=\"section\" id=\"autor\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-873c04e\" data-id=\"873c04e\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0f990c2 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"0f990c2\" data-element_type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.linkedin.com\/in\/elipajares\/\" target=\"_blank\" tabindex=\"-1\"><img decoding=\"async\" width=\"150\" height=\"150\" data-src=\"https:\/\/www.bluetab.com\/wp-content\/uploads\/2020\/11\/Angel-Maroco-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-image-6561 lazyload\" alt=\"\" data-srcset=\"https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-150x150.jpg 150w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-300x300.jpg 300w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-768x768.jpg 768w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco-75x75.jpg 75w, https:\/\/bluetab.org\/wp-content\/uploads\/2020\/11\/Angel-Maroco.jpg 800w\" data-sizes=\"(max-width: 150px) 100vw, 150px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 150px; --smush-placeholder-aspect-ratio: 150\/150;\" \/><\/a><\/figure><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-a73061d\" data-id=\"a73061d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1305fc6 elementor-widget elementor-widget-heading\" data-id=\"1305fc6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">\u00c1ngel Maroco\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-253ec8b elementor-widget elementor-widget-heading\" data-id=\"253ec8b\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div class=\"elementor-heading-title elementor-size-default\">AWS Cloud Architect<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0af43c4 elementor-widget elementor-widget-text-editor\" data-id=\"0af43c4\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong><a href=\"https:\/\/www.linkedin.com\/in\/%C3%A1ngel-maroco-85a0807b\/\">\u00c1ngel Maroco<\/a><\/strong> llevo en el sector IT m\u00e1s de una d\u00e9cada, iniciando mi carrera profesional con el desarrollo web, pasando una buena etapa en distintas plataformas informacionales en entornos bancarios y los \u00faltimos 5 a\u00f1os dedicado al dise\u00f1o de soluciones en entornos AWS.<\/p><p>En la actualidad, compagino mi papel de arquitecto junto al de responsable de la\u00a0<a href=\"https:\/\/www.linkedin.com\/feed\/hashtag\/?keywords=cloudpractice\">P\u0155actica Cloud<\/a>\u00a0\/bluetab, cuya misi\u00f3n es impulsar la cultura Cloud dentro de la compa\u00f1\u00eda.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e6097d2 elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"e6097d2\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-a66a650\" data-id=\"a66a650\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-38e61b8 elementor-widget elementor-widget-text-editor\" data-id=\"38e61b8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-9975abb elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9975abb\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-e5edefb\" data-id=\"e5edefb\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-0628f91 elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"0628f91\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-strategy\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"strategy-opt\" data-bg-image=\"url(https:\/\/www.bluetab.com\/wp-content\/uploads\/2020\/10\/strategy-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA STRATEGY\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-8724c63\" data-id=\"8724c63\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bc8b25d elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"bc8b25d\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/data-fabric\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"fabric-opt\" data-bg-image=\"url(https:\/\/www.bluetab.com\/wp-content\/uploads\/2020\/10\/fabric-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tDATA FABRIC\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-inner-column elementor-element elementor-element-ddc996d\" data-id=\"ddc996d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1d384cf elementor-cta--skin-cover elementor-cta--valign-middle elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"1d384cf\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<a class=\"elementor-cta\" href=\"\/es\/soluciones\/augmented-analytics\/\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg lazyload\" style=\"background-image:inherit;\" role=\"img\" aria-label=\"AUGMENTED-ANALYTICS-opt\" data-bg-image=\"url(https:\/\/www.bluetab.com\/wp-content\/uploads\/2020\/10\/AUGMENTED-ANALYTICS-opt.jpg)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<h5 class=\"elementor-cta__title elementor-cta__content-item elementor-content-item elementor-animated-item--grow\">\n\t\t\t\t\t\tAUGMENTED ANALYTICS\t\t\t\t\t<\/h5>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-f61bae8\" data-id=\"f61bae8\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-f3fe106 elementor-widget elementor-widget-text-editor\" data-id=\"f3fe106\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Te puede interesar<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Workshop Ingenier\u00eda del caos sobre Kubernetes con Litmus \u00c1ngel Maroco AWS Cloud Architect Share on twitter Share on linkedin LitmusChaos nace con el objetivo de ayudar a desarrolladores y SREs (Site Reliability Engineering ) de Kubernetes a identificar puntos d\u00e9biles y mejorar la resiliencia de sus aplicaciones\/plataformas proporcionando un marco de trabajo completo. Sus principales [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":17842,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"content-sidebar","footnotes":""},"categories":[19,668,633],"tags":[],"class_list":{"0":"post-10884","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-blog","8":"category-practices-en","9":"category-tech-en","10":"entry"},"uagb_featured_image_src":{"full":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10.png",1200,600,false],"thumbnail":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-150x150.png",150,150,true],"medium":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-300x150.png",300,150,true],"medium_large":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-768x384.png",768,384,true],"large":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-1024x512.png",1024,512,true],"1536x1536":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10.png",1200,600,false],"2048x2048":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10.png",1200,600,false],"sidebar-featured":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-75x75.png",75,75,true],"genesis-singular-images":["https:\/\/bluetab.org\/wp-content\/uploads\/2021\/07\/10-702x526.png",702,526,true]},"uagb_author_info":{"display_name":"Bluetab","author_link":"https:\/\/bluetab.org\/en\/author\/user\/"},"uagb_comment_info":0,"uagb_excerpt":"Workshop Ingenier\u00eda del caos sobre Kubernetes con Litmus \u00c1ngel Maroco AWS Cloud Architect Share on twitter Share on linkedin LitmusChaos nace con el objetivo de ayudar a desarrolladores y SREs (Site Reliability Engineering ) de Kubernetes a identificar puntos d\u00e9biles y mejorar la resiliencia de sus aplicaciones\/plataformas proporcionando un marco de trabajo completo. Sus principales&hellip;","_links":{"self":[{"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/posts\/10884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/comments?post=10884"}],"version-history":[{"count":5,"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/posts\/10884\/revisions"}],"predecessor-version":[{"id":16037,"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/posts\/10884\/revisions\/16037"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/media\/17842"}],"wp:attachment":[{"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/media?parent=10884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/categories?post=10884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.org\/en\/wp-json\/wp\/v2\/tags?post=10884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}