<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>kubernetes | Webmago Dev</title>
	<atom:link href="https://webmago.dev/category/kubernetes/feed/" rel="self" type="application/rss+xml" />
	<link>https://webmago.dev</link>
	<description>Creando codigo desde 1990</description>
	<lastBuildDate>Tue, 01 Jul 2025 23:02:36 +0000</lastBuildDate>
	<language>es</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Automatizando Resultados Electorales en Kubernetes: Un Cron Job Crítico para México</title>
		<link>https://webmago.dev/automatizando-resultados-electorales-en-kubernetes-un-cron-job-critico-para-mexico/</link>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Fri, 27 Jun 2025 19:42:31 +0000</pubDate>
				<category><![CDATA[kubernetes]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=5915</guid>
					<description><![CDATA[<p>1. Contexto del Proyecto El 1 de junio de 2025, durante las elecciones judiciales en México, mi equipo fue responsable de una misión crítica: garantizar la descarga, validación y publicación automatizada de resultados electorales provenientes del INE (Instituto Nacional Electoral). Este flujo de datos tenía que funcionar 24/7, con una frecuencia de actualización de cada [&#8230;]</p>
The post <a href="https://webmago.dev/automatizando-resultados-electorales-en-kubernetes-un-cron-job-critico-para-mexico/">Automatizando Resultados Electorales en Kubernetes: Un Cron Job Crítico para México</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<h3 data-start="109" data-end="137">1. Contexto del Proyecto</h3>
<p data-start="139" data-end="573">El <strong data-start="142" data-end="164">1 de junio de 2025</strong>, durante las elecciones judiciales en México, mi equipo fue responsable de una misión crítica: garantizar la descarga, validación y publicación automatizada de resultados electorales provenientes del <strong>INE</strong> (Instituto Nacional Electoral). Este flujo de datos tenía que funcionar <strong data-start="455" data-end="463">24/7</strong>, con una <strong data-start="473" data-end="522">frecuencia de actualización de cada 5 minutos</strong>, y con <strong data-start="530" data-end="572">máxima seguridad y tolerancia a fallos</strong>.</p>
<p data-start="575" data-end="907">Operamos bajo un entorno regulado y expuesto mediáticamente, donde cualquier retraso, inconsistencia o vulnerabilidad sería inaceptable. Para esto, diseñamos una solución de automatización sobre <strong data-start="770" data-end="784">Kubernetes</strong>, combinando scripting en <strong data-start="810" data-end="818">Bash</strong>, tokens de autenticación y firmas criptográficas GPG. Aquí les comparto cómo lo hicimos.</p>
<hr data-start="909" data-end="912" />
<h3 data-start="914" data-end="938">2. Desafíos Técnicos</h3>
<ul data-start="940" data-end="1441">
<li data-start="940" data-end="1066">
<p data-start="942" data-end="1066"><strong data-start="942" data-end="965">Alta disponibilidad</strong>: La solución debía ejecutarse cada 5 minutos, sin interrupciones, durante toda la jornada electoral.</p>
</li>
<li data-start="1067" data-end="1175">
<p data-start="1069" data-end="1175"><strong data-start="1069" data-end="1091">Seguridad de datos</strong>: Era indispensable garantizar la autenticidad y no-repudio de los datos publicados.</p>
</li>
<li data-start="1176" data-end="1301">
<p data-start="1178" data-end="1301"><strong data-start="1178" data-end="1202">Tolerancia a errores</strong>: El sistema debía manejar fallos parciales en servicios externos sin detener la operación general.</p>
</li>
<li data-start="1302" data-end="1441">
<p data-start="1304" data-end="1441"><strong data-start="1304" data-end="1334">Infraestructura controlada</strong>: El ambiente se desplegó sobre clústeres Kubernetes autoescalables con nodos específicos para tareas cron.</p>
</li>
</ul>
<hr data-start="1443" data-end="1446" />
<h3 data-start="1448" data-end="1476">3. Solución Implementada</h3>
<p data-start="1478" data-end="1560">Decidimos implementar un <strong data-start="1503" data-end="1543">cron job especializado en Kubernetes</strong>, responsable de:</p>
<ol data-start="1562" data-end="1831">
<li data-start="1562" data-end="1626">
<p data-start="1565" data-end="1626">Autenticarse con un sistema remoto mediante un <strong data-start="1612" data-end="1625">API Token</strong>.</p>
</li>
<li data-start="1627" data-end="1678">
<p data-start="1630" data-end="1678">Recuperar el archivo de los resultados.</p>
</li>
<li data-start="1679" data-end="1739">
<p data-start="1682" data-end="1739">Verificar y validar digitalmente los datos recibidos usando <strong data-start="1731" data-end="1738">GPG</strong>.</p>
</li>
<li data-start="1740" data-end="1831">
<p data-start="1743" data-end="1831">Publicar los datos procesados en uno micrositio (con backup inmediato).</p>
</li>
</ol>
<h3 data-start="2003" data-end="2044">4. Detalles de Implementación Técnica</h3>
<p data-start="2046" data-end="2089"><strong data-start="2046" data-end="2089">Archivo YAML del CronJob en Kubernetes:</strong></p>
<pre><code class="language-bash">apiVersion: batch/v1
kind: CronJob
metadata:
  name: resultados-electorales
spec:
  schedule: &quot;*/5 * * * *&quot;
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: recolector
            image: myregistry.com/electoral-job:latest
            imagePullPolicy: Always
            env:
            - name: API_TOKEN
              valueFrom:
                secretKeyRef:
                  name: electoral-secrets
                  key: api-token
            volumeMounts:
            - name: gpg-keys
              mountPath: /gpg
            command: [&quot;/bin/sh&quot;]
            args: [&quot;-c&quot;, &quot;/scripts/monitor.sh&quot;]
          restartPolicy: OnFailure
          volumes:
          - name: gpg-keys
            secret:
              secretName: gpg-secret
</code></pre>
<p data-start="1833" data-end="1996">El job se ejecuta cada 5 minutos utilizando una imagen liviana basada en Alpine, con herramientas mínimas necesarias, reforzada para evitar accesos no autorizados.</p>
<p data-start="3569" data-end="3606"><strong data-start="3569" data-end="3606">Mecanismo de seguridad adicional:</strong></p>
<ul data-start="3608" data-end="3822">
<li data-start="3608" data-end="3664">
<p data-start="3610" data-end="3664">Las claves GPG se inyectan como secreto de Kubernetes.</p>
</li>
<li data-start="3665" data-end="3739">
<p data-start="3667" data-end="3739">Las salidas del script se redirigen a logs centralizados para auditoría.</p>
</li>
<li data-start="3740" data-end="3822">
<p data-start="3742" data-end="3822">Las fallas se notifican vía webhook a un canal Slack monitoreado en tiempo real.</p>
</li>
</ul>
<h3 data-start="3829" data-end="3861">5. Resultados y Aprendizajes</h3>
<ul data-start="3863" data-end="4233">
<li data-start="3863" data-end="3921">
<p data-start="3865" data-end="3921">🕔 <strong data-start="3868" data-end="3886">100% de uptime</strong> durante más de 24 horas continuas.</p>
</li>
<li data-start="3922" data-end="4006">
<p data-start="3924" data-end="4006">🔐 <strong data-start="3927" data-end="3956">0 incidentes de seguridad</strong>, gracias al control estricto de accesos y firmas.</p>
</li>
<li data-start="4007" data-end="4106">
<p data-start="4009" data-end="4106">📉 <strong data-start="4012" data-end="4032">Carga minimizada</strong> gracias a imágenes optimizadas y nodos taintados solo para procesamiento.</p>
</li>
<li data-start="4107" data-end="4233">
<p data-start="4109" data-end="4233">🔁 <strong data-start="4112" data-end="4142">Escalabilidad futura lista</strong>: el diseño permite extender el flujo a múltiples fuentes de datos judiciales o comiciales.</p>
</li>
</ul>
<p data-start="4235" data-end="4436">Este tipo de soluciones no solo demandan experiencia técnica, sino <strong data-start="4302" data-end="4324">criterio operativo</strong> y sentido de urgencia. Lo que está en juego es la <strong data-start="4375" data-end="4396">confianza pública</strong> y la <strong data-start="4402" data-end="4435">responsabilidad institucional</strong>.</p>
<h3 data-start="4443" data-end="4499">🚨 ¿Necesitas diseñar soluciones críticas como esta?</h3>
<p data-start="4501" data-end="4593">Si estás enfrentando un proyecto sensible en medios, gobierno o datos públicos, y necesitas:</p>
<ul data-start="4595" data-end="4731">
<li data-start="4595" data-end="4639">
<p data-start="4597" data-end="4639">Consultoría para despliegues en Kubernetes</p>
</li>
<li data-start="4640" data-end="4680">
<p data-start="4642" data-end="4680">Implementación de cron jobs confiables</p>
</li>
<li data-start="4681" data-end="4731">
<p data-start="4683" data-end="4731">Diseño de infraestructura segura y autoescalable</p>
</li>
</ul>
<p data-start="4733" data-end="4897">📩 <strong data-start="4736" data-end="4799"><a title="Contáctame para una sesión gratuita de diagnóstico técnico." href="https://webmago.dev/#contact" target="_blank" rel="noopener">Contáctame para una sesión gratuita de diagnóstico técnico</a>.</strong><br data-start="4799" data-end="4802" />Haz que tu próxima implementación funcione como un reloj suizo, incluso bajo presión electoral.</p>The post <a href="https://webmago.dev/automatizando-resultados-electorales-en-kubernetes-un-cron-job-critico-para-mexico/">Automatizando Resultados Electorales en Kubernetes: Un Cron Job Crítico para México</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>GitOps con Digital Ocean, Pulumi y ArgoCD</title>
		<link>https://webmago.dev/gitops-con-digital-ocean-pulumi-y-argocd/</link>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Wed, 10 Mar 2021 02:20:41 +0000</pubDate>
				<category><![CDATA[digital ocean]]></category>
		<category><![CDATA[gitops]]></category>
		<category><![CDATA[infraestructura]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[pulumi]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=796</guid>
					<description><![CDATA[<p>Gitops es un nuevo termino que vendrá a replantear lo que ya conocemos como DevOps, con Gitops la única fuente de verdad será el repositorio en donde reside el código. &#160; Recientemente hemos estado haciendo PoC´s con Pulumi y Digital Ocean así que metimos a un tercero a la ecuación, ArgoCD, una herramienta de Delivery [&#8230;]</p>
The post <a href="https://webmago.dev/gitops-con-digital-ocean-pulumi-y-argocd/">GitOps con Digital Ocean, Pulumi y ArgoCD</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>Gitops es un nuevo termino que vendrá a replantear lo que ya conocemos como DevOps, con Gitops la única fuente de verdad será el repositorio en donde reside el código.</p>
<p>&nbsp;</p>
<p>Recientemente hemos estado haciendo PoC´s con <a title="Pulumi" href="https://pulumi.com" target="_blank" rel="noopener noreferrer">Pulumi</a> y <a title="Digital Ocean" href="https://digitalocean.com" target="_blank" rel="noopener noreferrer">Digital Ocean</a> así que metimos a un tercero a la ecuación, <a href="https://argoproj.github.io/argo-cd/">ArgoCD</a>, una herramienta de Delivery para Kubernetes.</p>
<p>&nbsp;</p>
<p>A partir del <a title="Pulumi (IaC) con Digital Ocean" href="https://webmago.dev/pulumi-iac-con-digital-ocean/" target="_blank" rel="noopener noreferrer">PoC</a> hecho con Pulumi y Digital Ocean instalamos ArgoCD en el cluster de Kubernetes creado y vinculamos un único repositorio con dos ramas, <strong><em>master</em></strong> y <em><strong>feature/python-simple-web</strong></em> para dos apps diferentes <strong><em>mypage</em></strong> y <strong><em>simple-web </em></strong>en ArgoCD, lo que hace difiere estas dos ramas son el namespace del proyecto, la imagen del contenedor y la url que <strong>nginx-ingress</strong> deberá administrar.</p>
<p>&nbsp;</p>
<p>Esta nueva herramienta después de hacer todos los ajustes se vuelve divertida y amigable, como primer acercamiento puedo decir que tiene una agradable interface gráfica y que me hace pensar si dejaremos fuera a Pulumi para administrar el estatus deseado de los recursos creados previamente como <em>deployments</em>/<em>services</em>/<em>ingress</em>/<em>configMaps</em> etc, en el cluster.</p>
<p>&nbsp;</p>
<p>A continuación les dejo unas capturas del PoC.</p>
<div id="attachment_802" style="width: 1034px" class="wp-caption aligncenter"><img fetchpriority="high" decoding="async" aria-describedby="caption-attachment-802" class="size-large wp-image-802" src="https://webmago.dev/buvytsan/2021/03/01-repo-branches-1024x307.png" alt="Branches Repositorio Git" width="1024" height="307" srcset="https://webmago.dev/buvytsan/2021/03/01-repo-branches-1024x307.png 1024w, https://webmago.dev/buvytsan/2021/03/01-repo-branches-300x90.png 300w, https://webmago.dev/buvytsan/2021/03/01-repo-branches-768x230.png 768w, https://webmago.dev/buvytsan/2021/03/01-repo-branches-1536x460.png 1536w, https://webmago.dev/buvytsan/2021/03/01-repo-branches-2048x614.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-802" class="wp-caption-text">Branches Repositorio Git</p></div>
<p>&nbsp;</p>
<div id="attachment_803" style="width: 1034px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-803" class="size-large wp-image-803" src="https://webmago.dev/buvytsan/2021/03/02-argocd-apps-dashboard-1024x602.png" alt="ArgoCD Dashboard Applications" width="1024" height="602" srcset="https://webmago.dev/buvytsan/2021/03/02-argocd-apps-dashboard-1024x602.png 1024w, https://webmago.dev/buvytsan/2021/03/02-argocd-apps-dashboard-300x176.png 300w, https://webmago.dev/buvytsan/2021/03/02-argocd-apps-dashboard-768x451.png 768w, https://webmago.dev/buvytsan/2021/03/02-argocd-apps-dashboard-1536x902.png 1536w, https://webmago.dev/buvytsan/2021/03/02-argocd-apps-dashboard-2048x1203.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-803" class="wp-caption-text">ArgoCD Dashboard Applications</p></div>
<p>&nbsp;</p>
<div id="attachment_805" style="width: 1034px" class="wp-caption aligncenter"><img decoding="async" aria-describedby="caption-attachment-805" class="size-large wp-image-805" src="https://webmago.dev/buvytsan/2021/03/04-argocd-app-01-view2-1024x446.png" alt="ArgoCD vista de red del app &quot;mypage&quot;" width="1024" height="446" srcset="https://webmago.dev/buvytsan/2021/03/04-argocd-app-01-view2-1024x446.png 1024w, https://webmago.dev/buvytsan/2021/03/04-argocd-app-01-view2-300x131.png 300w, https://webmago.dev/buvytsan/2021/03/04-argocd-app-01-view2-768x334.png 768w, https://webmago.dev/buvytsan/2021/03/04-argocd-app-01-view2-1536x668.png 1536w, https://webmago.dev/buvytsan/2021/03/04-argocd-app-01-view2-2048x891.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-805" class="wp-caption-text">ArgoCD vista de red del app &#8220;mypage&#8221;</p></div>
<p>&nbsp;</p>
<div id="attachment_804" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-804" class="size-large wp-image-804" src="https://webmago.dev/buvytsan/2021/03/03-argocd-app-01-view1-1024x575.png" alt="ArgoCD vista de arbol del app &quot;mypage&quot;" width="1024" height="575" srcset="https://webmago.dev/buvytsan/2021/03/03-argocd-app-01-view1-1024x575.png 1024w, https://webmago.dev/buvytsan/2021/03/03-argocd-app-01-view1-300x169.png 300w, https://webmago.dev/buvytsan/2021/03/03-argocd-app-01-view1-768x432.png 768w, https://webmago.dev/buvytsan/2021/03/03-argocd-app-01-view1-1536x863.png 1536w, https://webmago.dev/buvytsan/2021/03/03-argocd-app-01-view1-2048x1151.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-804" class="wp-caption-text">ArgoCD vista de arbol del app &#8220;mypage&#8221;</p></div>
<p>&nbsp;</p>
<div id="attachment_807" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-807" class="size-large wp-image-807" src="https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view2-1024x420.png" alt="ArgoCD vista de red del app &quot;simple'web&quot;" width="1024" height="420" srcset="https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view2-1024x420.png 1024w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view2-300x123.png 300w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view2-768x315.png 768w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view2-1536x630.png 1536w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view2-2048x840.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-807" class="wp-caption-text">ArgoCD vista de red del app &#8220;simple-web&#8221;</p></div>
<p>&nbsp;</p>
<div id="attachment_806" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-806" class="size-large wp-image-806" src="https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view1-1024x527.png" alt="ArgoCD vista de arbol del app &quot;simple'web&quot;" width="1024" height="527" srcset="https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view1-1024x527.png 1024w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view1-300x154.png 300w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view1-768x396.png 768w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view1-1536x791.png 1536w, https://webmago.dev/buvytsan/2021/03/05-argocd-app-02-view1-2048x1055.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-806" class="wp-caption-text">ArgoCD vista de arbol del app &#8220;simple-web&#8221;</p></div>
<p>&nbsp;</p>
<div id="attachment_808" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-808" class="size-large wp-image-808" src="https://webmago.dev/buvytsan/2021/03/06-app-01-liveview-1024x360.png" alt="Vista en vivo de app &quot;mypage&quot;" width="1024" height="360" srcset="https://webmago.dev/buvytsan/2021/03/06-app-01-liveview-1024x360.png 1024w, https://webmago.dev/buvytsan/2021/03/06-app-01-liveview-300x105.png 300w, https://webmago.dev/buvytsan/2021/03/06-app-01-liveview-768x270.png 768w, https://webmago.dev/buvytsan/2021/03/06-app-01-liveview-1536x540.png 1536w, https://webmago.dev/buvytsan/2021/03/06-app-01-liveview-2048x720.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-808" class="wp-caption-text">Vista en vivo de app &#8220;mypage&#8221;</p></div>
<p>&nbsp;</p>
<div id="attachment_810" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-810" class="size-large wp-image-810" src="https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo2-1024x196.png" alt="Vista en vivo de app &quot;simple'web&quot; balance pod 2" width="1024" height="196" srcset="https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo2-1024x196.png 1024w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo2-300x57.png 300w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo2-768x147.png 768w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo2-1536x294.png 1536w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo2-2048x391.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-810" class="wp-caption-text">Vista en vivo de app &#8220;simple&#8217;web&#8221; balance pod 2</p></div>
<p>&nbsp;</p>
<div id="attachment_809" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-809" class="size-large wp-image-809" src="https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo1-1024x225.png" alt="Vista en vivo de app &quot;simple'web&quot; balance pod 1" width="1024" height="225" srcset="https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo1-1024x225.png 1024w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo1-300x66.png 300w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo1-768x169.png 768w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo1-1536x338.png 1536w, https://webmago.dev/buvytsan/2021/03/07-app-02-liveview-nodo1-2048x451.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-809" class="wp-caption-text">Vista en vivo de app &#8220;simple&#8217;web&#8221; balance pod 1</p></div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Si requieres de mi ayuda para administrar tu infraestructura e implementar un sistema GitOps <a href="https://webmago.dev/#contact">contáctame</a>.</p>
<div class="mceTemp"></div>The post <a href="https://webmago.dev/gitops-con-digital-ocean-pulumi-y-argocd/">GitOps con Digital Ocean, Pulumi y ArgoCD</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Pulumi (IaC) con Digital Ocean</title>
		<link>https://webmago.dev/pulumi-iac-con-digital-ocean/</link>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Thu, 04 Mar 2021 03:41:00 +0000</pubDate>
				<category><![CDATA[development]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[infraestructura]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[pulumi]]></category>
		<category><![CDATA[codigo]]></category>
		<category><![CDATA[digital ocean]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=778</guid>
					<description><![CDATA[<p>La administración de la infraestructura puede ser manejada a partir de generar código, es decir, Infraestructura como Código también conocida como IaC en ingles. &#160; Puedes usar una gran variedad de software para llevarlo a cabo, lo que implica en algunos casos aprender un nuevo lenguaje, algo que Pulumi ha tomado en cuenta para su [&#8230;]</p>
The post <a href="https://webmago.dev/pulumi-iac-con-digital-ocean/">Pulumi (IaC) con Digital Ocean</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>La administración de la infraestructura puede ser manejada a partir de generar código, es decir, Infraestructura como Código también conocida como IaC en ingles.</p>
<p>&nbsp;</p>
<p>Puedes usar una gran variedad de software para llevarlo a cabo, lo que implica en algunos casos aprender un nuevo lenguaje, algo que <a title="Pulumi" href="https://www.pulumi.com/" target="_blank" rel="noopener noreferrer">Pulumi</a> ha tomado en cuenta para su rápida adopción, por lo que si sabes Typescript, Go, Python, Javascript o .Net reducirás enormemente la curvatura de aprendizaje.</p>
<p>&nbsp;</p>
<p>Había escuchado de <a title="Pulumi" href="https://www.pulumi.com/" target="_blank" rel="noopener noreferrer">Pulumi</a> hace un año, hace unas semanas tome dos webinars  y las dudas que tenia sobre su uso, escenarios me animo a probarlo con una <a title="Promo Digital Ocean" href="https://m.do.co/c/82e9086ec3ae" target="_blank" rel="noopener noreferrer">promo</a> que obtuve en <a title="Digital Ocean" href="https://digitalocean.com" target="_blank" rel="noopener noreferrer">Digital Ocean</a> por lo que inicie con la creación de un cluster <a title="Kubernetes" href="https://kubernetes.io/" target="_blank" rel="noopener noreferrer">Kuberntes</a> usando Typescript. <a title="Pulumi" href="https://www.pulumi.com/" target="_blank" rel="noopener noreferrer">Pulumi</a> te ofrece una version <a title="Pricing" href="https://www.pulumi.com/pricing/" target="_blank" rel="noopener noreferrer">gratuita</a> si únicamente tú usas el entorno.</p>
<p>&nbsp;</p>
<p>La ventaja de esto que puedes ir haciéndolo poco a poco y esta es la lista ordenada de lo que fui administrando con mi código.</p>
<p>&nbsp;</p>
<ol>
<li>Creación del Cluster Kubernetes.</li>
<li>Creación de algunos namespaces, ex: staging, website</li>
<li>Creación de un primer Deployment con nginx en el namespace de staging.</li>
<li>Creación de un ClusterIP Service para el Deployment creado en el punto 3.</li>
<li>Una gran pausa para instalar Istio (muy complicado y tomaría mas horas) o nginx como Ingress</li>
<li>Después de decidirme en el punto 5 por nginx, procedí a crear el código para instalarlo como Ingress, con su namespace usando el <a title="Hlem" href="https://helm.sh/" target="_blank" rel="noopener noreferrer">Helm v3</a> Chart; esto me genero un LoadBalancer en <a title="Digital Ocean" href="https://digitalocean.com" target="_blank" rel="noopener noreferrer">Digital Ocean</a> a su vez asignándome la IP Publica.</li>
<li>Creación de un Service Ingress para dirigir el tráfico del ingress-nginx creado en el punto 6 hacia el ClusterIP creado en el punto 4, puedes verlo en <a title="do.webmago.dev" href="http://do.webmago.dev" target="_blank" rel="noopener noreferrer">do.webmago.dev</a> (puede no estar disponible en el futuro).</li>
</ol>
<div id="attachment_785" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-785" class="size-large wp-image-785" src="https://webmago.dev/buvytsan/2021/03/pulumi-do-step-1-1024x265.png" alt="Ejecucion Paso 1 Pulumi" width="1024" height="265" srcset="https://webmago.dev/buvytsan/2021/03/pulumi-do-step-1-1024x265.png 1024w, https://webmago.dev/buvytsan/2021/03/pulumi-do-step-1-300x78.png 300w, https://webmago.dev/buvytsan/2021/03/pulumi-do-step-1-768x199.png 768w, https://webmago.dev/buvytsan/2021/03/pulumi-do-step-1-1536x397.png 1536w, https://webmago.dev/buvytsan/2021/03/pulumi-do-step-1.png 1894w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-785" class="wp-caption-text">Ejecucion Paso 1 Pulumi</p></div>
<p>&nbsp;</p>
<div id="attachment_784" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-784" class="size-large wp-image-784" src="https://webmago.dev/buvytsan/2021/03/do-step-1-1024x595.png" alt="Revision Dashboard Digital Ocean" width="1024" height="595" srcset="https://webmago.dev/buvytsan/2021/03/do-step-1-1024x595.png 1024w, https://webmago.dev/buvytsan/2021/03/do-step-1-300x174.png 300w, https://webmago.dev/buvytsan/2021/03/do-step-1-768x446.png 768w, https://webmago.dev/buvytsan/2021/03/do-step-1-1536x893.png 1536w, https://webmago.dev/buvytsan/2021/03/do-step-1-2048x1191.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-784" class="wp-caption-text">Revision Dashboard Digital Ocean</p></div>
<p>&nbsp;</p>
<div id="attachment_786" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-786" class="size-large wp-image-786" src="https://webmago.dev/buvytsan/2021/03/pulumi-step-1-1024x597.png" alt="Dashboard Pulumi paso 1" width="1024" height="597" srcset="https://webmago.dev/buvytsan/2021/03/pulumi-step-1-1024x597.png 1024w, https://webmago.dev/buvytsan/2021/03/pulumi-step-1-300x175.png 300w, https://webmago.dev/buvytsan/2021/03/pulumi-step-1-768x448.png 768w, https://webmago.dev/buvytsan/2021/03/pulumi-step-1-1536x896.png 1536w, https://webmago.dev/buvytsan/2021/03/pulumi-step-1-2048x1195.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-786" class="wp-caption-text">Dashboard Pulumi paso 1</p></div>
<p>&nbsp;</p>
<p>Cabe señalar que para mantener mi entorno aislado y no interferir con mis configuraciones de mi equipo trabaje desde un contenedor de <a title="Docker" href="https://docker.com" target="_blank" rel="noopener noreferrer">docker</a>.</p>
<p>&nbsp;</p>
<p>Tengo que aclarar que tuve algunos glitches con Pulumi al aplicar/actualizar cambios y al parecer es un comportamiento algo raro que tiene <a title="Digital Ocean" href="https://digitalocean.com" target="_blank" rel="noopener noreferrer">Digital Ocean</a>, por lo que recibía errores y tenia que volver a ejecutar la actualización de cambios.</p>
<p>&nbsp;</p>
<p>En mi experiencia, puedo decir que <a title="Pulumi" href="https://www.pulumi.com/" target="_blank" rel="noopener noreferrer">Pulumi</a> reduce considerablemente su curvatura de aprendizaje y adopción permitiéndote administrar tu Infraestructura como Código con los lenguajes antes mencionados.</p>
<p>&nbsp;</p>
<div class="style-80 style-local-23-m39 position-relative" data-colibri-id="14-m39">
<div class="h-global-transition-all colibri-post-content">
<p>Si requieres de mi ayuda para administrar tu infraestructura <a href="https://webmago.dev/#contact">contáctame</a>.</p>
</div>
</div>The post <a href="https://webmago.dev/pulumi-iac-con-digital-ocean/">Pulumi (IaC) con Digital Ocean</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Weavescope metricas, administracion, visualizacion en tiempo real</title>
		<link>https://webmago.dev/weavescope-metricas-administracion-visualizacion-en-tiempo-real/</link>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Tue, 16 Feb 2021 21:13:01 +0000</pubDate>
				<category><![CDATA[devops]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[loggin]]></category>
		<category><![CDATA[monitoring]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[operations]]></category>
		<category><![CDATA[weavescope]]></category>
		<category><![CDATA[weaveworks]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=758</guid>
					<description><![CDATA[<p>Actualmente administro Clusters Kubernetes y algunos VPS con Docker con sitios web, parte de trabajar como DevOps es  observar cómo los micro-servicios consumen recursos tales como CPU o Memoria; y me ha tocado que fuera de horario de oficina tengo que acceder y monitorear recursos cuando se espera un consumo basado en noticias de impacto; [&#8230;]</p>
The post <a href="https://webmago.dev/weavescope-metricas-administracion-visualizacion-en-tiempo-real/">Weavescope metricas, administracion, visualizacion en tiempo real</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>Actualmente administro Clusters Kubernetes y algunos VPS con Docker con sitios web, parte de trabajar como DevOps es  observar cómo los micro-servicios consumen recursos tales como CPU o Memoria; y me ha tocado que fuera de horario de oficina tengo que acceder y monitorear recursos cuando se espera un consumo basado en noticias de impacto; por lo que debo cargar en todo momento un dispositivo movil.</p>
<p>&nbsp;</p>
<p>Para los clusters Kubernetes me auxilio de &#8220;Monitoring&#8221; (antes Stackdriver) en GCP o CloudWatch en AWS, o incluso Prometheus con Grafana.</p>
<p>&nbsp;</p>
<p>Lo que hace de <a href="https://www.weave.works/oss/scope/" target="_blank" rel="noopener noreferrer">Weavescope</a> un software Open Source tan peculiar no solo es ver métricas, sino pausar, detener, reiniciar un contenedor o acceder a la terminal del mismo para hacer algunas operaciones tal como si fuera una terminal remota.</p>
<p>&nbsp;</p>
<p>Esta versatilidad de <a href="https://www.weave.works/oss/scope/" target="_blank" rel="noopener noreferrer">Weavescope</a> me permite visualizar y hacer operaciones cuando solo cuento con un dispositivo móvil como una tableta o un iPad.</p>
<p>&nbsp;</p>
<p><a href="https://www.weave.works/oss/scope/" target="_blank" rel="noopener noreferrer">Weavescope</a> ofrece varias alternativas de ser <a href="https://www.weave.works/docs/scope/latest/installing/" target="_blank" rel="noopener noreferrer">instalado</a>, en mi caso donde uso VPS con docker-compose opte por esta version con algunos ajustes que no se mencionan en la version oficial, tal es el caso de la autenticacion, ya que de no contar con esto cualquiera que conozca la dirección de mi instalacion podria hacer un mal uso como detener o crear contenedores y vulnerar mi sistema.</p>
<p>&nbsp;</p>
<p><a href="https://www.weave.works/" target="_blank" rel="noopener noreferrer">Weaveworks</a> la compañia creadora de <a href="https://www.weave.works/oss/scope/" target="_blank" rel="noopener noreferrer">Weavescope</a> ofrece diferentes soluciones de automatizacion CI-CD, monitoreo y registros, una de las herramientas mas novedosas GitOps basado en Kubernetes.</p>
<p>&nbsp;</p>
<p>No olvides <a href="https://webmago.dev/#contact">contactarme</a> si requieres asistencia en tus proyectos.</p>
<p>&nbsp;</p>
<p>A continuacion dejo una serie de capturas de una de mis instalaciones de <a href="https://www.weave.works/oss/scope/" target="_blank" rel="noopener noreferrer">Weavescope</a>.</p>
<div id="attachment_760" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-760" class="size-large wp-image-760" src="https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.11.22-1024x570.png" alt="Filtrando por Contenedor" width="1024" height="570" srcset="https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.11.22-1024x570.png 1024w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.11.22-300x167.png 300w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.11.22-768x427.png 768w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.11.22-1536x854.png 1536w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.11.22-2048x1139.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-760" class="wp-caption-text">Filtrando los recursos por contenedor</p></div>
<p>&nbsp;</p>
<div id="attachment_761" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-761" class="wp-image-761 size-large" src="https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.21.25-1024x571.png" alt="Accediendo al contenedor" width="1024" height="571" srcset="https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.21.25-1024x571.png 1024w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.21.25-300x167.png 300w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.21.25-768x428.png 768w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.21.25.png 1431w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-761" class="wp-caption-text">En la ficha del contenedor se observan varios botones para efectuar operaciones tales como adjuntar, acceder a la terminal, refrescar, pausar, detener el contenedor.</p></div>
<p>&nbsp;</p>
<div id="attachment_762" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-762" class="size-large wp-image-762" src="https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.29.47-1024x567.png" alt="Accediendo a la terminal." width="1024" height="567" srcset="https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.29.47-1024x567.png 1024w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.29.47-300x166.png 300w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.29.47-768x425.png 768w, https://webmago.dev/buvytsan/2021/02/Captura-de-Pantalla-2021-02-16-a-las-14.29.47.png 1432w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-762" class="wp-caption-text">Esta version grafica es un atajo a la instruccion &#8220;docker exec -it dbadmin bash&#8221;</p></div>The post <a href="https://webmago.dev/weavescope-metricas-administracion-visualizacion-en-tiempo-real/">Weavescope metricas, administracion, visualizacion en tiempo real</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Blue-Green Deployment con Codefresh</title>
		<link>https://webmago.dev/blue-green-deployment-con-codefresh/</link>
					<comments>https://webmago.dev/blue-green-deployment-con-codefresh/#respond</comments>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Fri, 11 Dec 2020 14:51:29 +0000</pubDate>
				<category><![CDATA[codefresh]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[blue-green]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[kuberntes]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=500</guid>
					<description><![CDATA[<p>Entre los tipos de Deployment existentes Red/Black Blue/Green Rollout Canary Me he inclinado por usar el segundo de la lista, el deploy Blue/Green, el cual te permite lanzar una nueva versión e ir redirigiendo tráfico de forma gradual a la nueva versión. Existe una gran variedad de plugins en Codefresh uno de ellos, hacer un [&#8230;]</p>
The post <a href="https://webmago.dev/blue-green-deployment-con-codefresh/">Blue-Green Deployment con Codefresh</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>Entre los tipos de Deployment existentes</p>
<ul>
<li>Red/Black</li>
<li>Blue/Green</li>
<li>Rollout</li>
<li>Canary</li>
</ul>
<p>Me he inclinado por usar el segundo de la lista, el deploy <strong>Blue/Green</strong>, el cual te permite lanzar una nueva versión e ir redirigiendo tráfico de forma gradual a la nueva versión.</p>
<p>Existe una gran variedad de plugins en <a title="Codefresh" href="https://codefresh.io" target="_blank" rel="noopener noreferrer">Codefresh</a> uno de ellos, hacer un Deploy en tu entorno Kubernetes con Blue/Green, incluso hay un plugin y <a title="Howto" href="https://codefresh.io/kubernetes-tutorial/simple-canary-codefresh-k8s-2/" target="_blank" rel="noopener noreferrer">Howto</a> para hacer un Canary Deployment.</p>
<p>Una de las ventajas de este plugin es que en caso de existir algun timeout, o error en el despliegue de la nueva version, la version actual no se ve afectada debido a que la nueva version es eliminada del clúster.</p>
<p>En caso de ser exitoso el despliegue el plugin en automatico inicia el proceso de redireccion del trafico hacia la  nueva version de forma gradual.</p>
<p>La integracion de este plugin en mis pipelines me ha permitido hacer despliegues sin caídas en entornos de producción de alto tráfico.</p>The post <a href="https://webmago.dev/blue-green-deployment-con-codefresh/">Blue-Green Deployment con Codefresh</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
					<wfw:commentRss>https://webmago.dev/blue-green-deployment-con-codefresh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Kubernetes 1.20, no tengas pánico Docker seguirá disponible</title>
		<link>https://webmago.dev/kubernetes-1-20-no-tengas-panico-docker-seguira-disponible/</link>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Fri, 04 Dec 2020 17:25:21 +0000</pubDate>
				<category><![CDATA[development]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[dockershim]]></category>
		<category><![CDATA[upgrades]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=655</guid>
					<description><![CDATA[<p>Hace unos días leí en Twitter un hilo sobre los cambios que se vienen en Kubernetes 1.20 y la depreciación de Docker como runtime de los contenedores entrando en su lugar Containerd, varios colegas mostraron su preocupación al respecto. So, Kubernetes is deprecating Docker support and you&#8217;re either nervous or confused. That&#8217;s okay! I would [&#8230;]</p>
The post <a href="https://webmago.dev/kubernetes-1-20-no-tengas-panico-docker-seguira-disponible/">Kubernetes 1.20, no tengas pánico Docker seguirá disponible</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>Hace unos días leí en Twitter un hilo sobre los cambios que se vienen en Kubernetes 1.20 y la depreciación de Docker como runtime de los contenedores entrando en su lugar <a href="https://containerd.io/" target="_blank" rel="noopener noreferrer">Containerd,</a> varios colegas mostraron su preocupación al respecto.</p>
<blockquote class="twitter-tweet">
<p dir="ltr" lang="en">So, Kubernetes is deprecating Docker support and you&#8217;re either nervous or confused. That&#8217;s okay! I would like to help you understand what&#8217;s happening. A thread! 1/10</p>
<p>— Kat Cosgrove, but ✨festive✨ (@Dixie3Flatline) <a href="https://twitter.com/Dixie3Flatline/status/1334188913724850177?ref_src=twsrc%5Etfw">December 2, 2020</a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>Quienes trabajamos con Kubernetes o en Desarrollo de Software hemos usado Docker para desarrollar y generar las imágenes que finalmente usaremos en nuestro clúster, por supuesto que existen mas proveedores compatibles con <a href="https://opencontainers.org/" target="_blank" rel="noopener noreferrer">OCI</a> (Open Container Initiative) y esto quiere decir que las imágenes que generamos en Docker cumplen con esta normativa.</p>
<p>Ayer 3 de Noviembre 2020, Docker publico un articulo (en inglés) detallando quá sucederá con este cambio dándonos una tranquilidad a toda la comunidad que usa la tecnología de contenedores.</p>
<blockquote><p><strong><a href="https://www.docker.com/blog/what-developers-need-to-know-about-docker-docker-engine-and-kubernetes-v1-20/" target="_blank" rel="noopener noreferrer">What developers need to know about Docker, Docker Engine, and Kubernetes v1.20</a></strong></p></blockquote>
<p>En si, lo que se eliminará probablemente en un año será <a href="https://kubernetes.io/blog/2020/12/02/dockershim-faq/" target="_blank" rel="noopener noreferrer">dockershim</a>, por lo tanto, las imágenes que generes con Docker seguirán funcionando en tu clúster Kubernetes, el cambio es mas para los operadores y administradores de Kubernetes donde el acceso a la inspección de los contenedores usando comandos de Docker no podrán ser usados.</p>
<p>Así que mantén la calma y sigue usando Docker.</p>The post <a href="https://webmago.dev/kubernetes-1-20-no-tengas-panico-docker-seguira-disponible/">Kubernetes 1.20, no tengas pánico Docker seguirá disponible</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Recientes anuncios en Docker &#8211; &#8220;Pull Rate Limit Enforcement&#8221;</title>
		<link>https://webmago.dev/recientes-anuncios-en-docker-pull-rate-limit-enforcement/</link>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Tue, 01 Dec 2020 02:35:03 +0000</pubDate>
				<category><![CDATA[codefresh]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[anuncios]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=643</guid>
					<description><![CDATA[<p>Hace mas de medio año, Codefresh anuncio que el almacenamiento gratuito que ofrecía para almacenar las imágenes Docker en tu cuenta serían deshabilitadas, pregunte cuál era la causa de este cambio, y la respuesta fue que se debía a que no era tan demandado el servicio; personalmente quedé con cierta inquietud, al menos en nuestro [&#8230;]</p>
The post <a href="https://webmago.dev/recientes-anuncios-en-docker-pull-rate-limit-enforcement/">Recientes anuncios en Docker – “Pull Rate Limit Enforcement”</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>Hace mas de medio año, <a href="https://codefresh.io" target="_blank" rel="noopener noreferrer">Codefresh</a> anuncio que el almacenamiento gratuito que ofrecía para almacenar las imágenes Docker en tu cuenta serían deshabilitadas, pregunte cuál era la causa de este cambio, y la respuesta fue <em>que se debía a que no era tan demandado el servicio</em>; personalmente quedé con cierta inquietud, al menos en nuestro caso si lo usábamos y con bastante frecuencia. Así que  debería de  pensar en migrarlas a un tercero como <a href="https://cloud.google.com/container-registry/" target="_blank" rel="noopener noreferrer">Google Cloud Registry</a>, <a href="https://quay.io/" target="_blank" rel="noopener noreferrer">Quay</a>, el mismo <a href="https://docker.com" target="_blank" rel="noopener noreferrer">Docker</a> u otro proveedor.</p>
<p>Lo anterior hizo que trabajara en la creación del espacio en GCR, generar los permisos IAM, ajustar todos los pipelines en <a href="https://codefresh.io" target="_blank" rel="noopener noreferrer">Codefresh</a>  para enviar las imágenes resultantes, exportar las imágenes mas recientes y descargadas y por ultimo hacer los cambios en el cluster Kubernetes para que los deployments pudieran descargar las imágenes durante el proceso de CI/CD o regeneración.</p>
<p>Quienes hemos trabajado con Kubernetes existe un parámetro <code>ImagePullPolicy</code> cuyos valores pueden ser <code>Always</code> o <code>IfNotPresent</code>y dependerá del comportamiento esperado tomando en cuenta estas <a href="https://kubernetes.io/docs/concepts/containers/images/" target="_blank" rel="noopener noreferrer">recomendaciones</a>.</p>
<p>Recientemente <a href="https://docker.com" target="_blank" rel="noopener noreferrer">Docker</a> anuncio a través de un correo electrónico  que haría cambios para las descargas y retención de imágenes en su servicio.</p>
<p>Los descargas anónimas de imágenes solo podrán hacerse 100 veces en 6 horas, las descargas de tus imágenes en tu cuenta gratuita se extiende hasta 200 cada 6 horas; las cuentas Pro y Team y Large no tienen esta limitante ver comparativo en su pagina de <a href="https://www.docker.com/pricing" target="_blank" rel="noopener noreferrer">Precios</a>, dicha política entro en vigor en Noviembre 2, 2020.</p>
<p>Por otro lado, las retenciones de las imágenes solo estarán disponibles por seis meses, por lo que si tu imagen no es actualizada o descargada en ese tiempo será eliminada, este ultimo ha sido pausado ya que entraría en vigor en noviembre 1, 2020; y será retomado a mediados del año 2021.</p>
<p>Como recordaran, tenia duda si realmente <a href="https://codefresh.io" target="_blank" rel="noopener noreferrer">Codefresh</a> daría de baja el servicio por falta de uso, o por que le estaba generando un costo enorme mantener varias imágenes de todos los que formamos su plantilla de clientes, algo que también <a href="https://docker.com" target="_blank" rel="noopener noreferrer">Docker</a> acaba de hacer con su servicio.</p>
<p>Creo que el costo de <strong>$5.00 US siendo Pro</strong> en <a href="https://docker.com" target="_blank" rel="noopener noreferrer">Docker</a> vale la pena para tener nuestro Hub de nuestras imágenes de forma privada.</p>The post <a href="https://webmago.dev/recientes-anuncios-en-docker-pull-rate-limit-enforcement/">Recientes anuncios en Docker – “Pull Rate Limit Enforcement”</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ciclos de Integracion y Despliegue en Kubernetes</title>
		<link>https://webmago.dev/ciclos-de-integracion-y-despliegue-en-kubernetes/</link>
					<comments>https://webmago.dev/ciclos-de-integracion-y-despliegue-en-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Fri, 27 Sep 2019 18:00:46 +0000</pubDate>
				<category><![CDATA[codefresh]]></category>
		<category><![CDATA[devops]]></category>
		<category><![CDATA[kubernetes]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=479</guid>
					<description><![CDATA[<p>Como habrán leído alguna otra de mis historias, Codefresh Desplegando en Kubernetes, he usado esta plataforma SaaS &#8211;Codefresh&#8211; para generar varios pipelines, en algunos casos paralelos sin tener que depender de otra plataforma para que el ciclo suceda. Al momento de recibir la orden vía Webhook inicia el proceso de integración del código a través [&#8230;]</p>
The post <a href="https://webmago.dev/ciclos-de-integracion-y-despliegue-en-kubernetes/">Ciclos de Integracion y Despliegue en Kubernetes</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>Como habrán leído alguna otra de mis historias, <a href="https://webmago.dev/codefresg-desplegando-en-kubernetes/" target="_blank" rel="noopener noreferrer"><strong><em>Codefresh Desplegando en Kubernetes</em></strong></a>, he usado esta plataforma SaaS &#8211;<a href="https://codefresh.io" target="_blank" rel="noopener noreferrer"><strong>Codefresh</strong></a>&#8211; para generar varios pipelines, en algunos casos paralelos sin tener que depender de otra plataforma para que el ciclo suceda.</p>



<p>Al momento de recibir la orden vía <strong>Webhook</strong> inicia el proceso de integración del código a través de las ordenes indicadas en el <em>Dockerfile</em>, con esta imagen y/o con la ayuda de otras se realizan pruebas unitarias que los desarrolladores acompañan con sus commits.</p>



<p style="padding-left: 40px;">Muchos creen que Delivery y Deployment son lo mismo, sin embargo, Deployment es el siguiente paso a Continuos Delivery. En el proceso de Delivery, existe un paso manual, sin embargo, en el Deployment todo sucede de forma automática.</p>
<div id="attachment_514" style="width: 1034px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" aria-describedby="caption-attachment-514" class="wp-image-514 size-large" src="https://webmago.dev/buvytsan/2019/09/Continuous_DeliveryDeployment-1024x600.png" alt="Continuous Delivery, Continuous Deployment." width="1024" height="600" srcset="https://webmago.dev/buvytsan/2019/09/Continuous_DeliveryDeployment-1024x600.png 1024w, https://webmago.dev/buvytsan/2019/09/Continuous_DeliveryDeployment-300x176.png 300w, https://webmago.dev/buvytsan/2019/09/Continuous_DeliveryDeployment-768x450.png 768w, https://webmago.dev/buvytsan/2019/09/Continuous_DeliveryDeployment.png 1494w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><p id="caption-attachment-514" class="wp-caption-text">Inspired by <a href="https://blog.crisp.se/2013/02/05/yassalsundman/continuous-delivery-vs-continuous-deployment" target="_blank" rel="noopener noreferrer">Yassal Sundman’s blog post on Crisp’s Blog.</a></p></div>



<p>Tras el éxito del paso previo, viene el despliegue o liberación del producto final, <a href="https://codefresh.io" target="_blank" rel="noopener noreferrer"><strong>Codefresh</strong></a> provee una vasta serie de plugins e imágenes para que no tengas que recurrir a pasos adicionales fuera de su entorno, para mis actuales proyectos en clusters Kubernetes hice uso de su imagen <strong><em>k8s-blue-green</em></strong>, esta me permite hacer despliegues de la version actual y sacar la version previa &#8220;<strong><em>del aire</em></strong>&#8220;.</p>
<p>Si todo ha ido bien, o mal, el mismo SaaS de forma nativa o haciendo uso de sus plugins puedes notificar via Slack o Telegram a tu equipo sobre el ciclo, haciéndolos participes y corresponsables.</p>
<p>¿Quieres emular un <strong><em>Delivery</em></strong> en esta plataforma?, sin problema, introduce el paso <strong><em>pending-aproval</em></strong>, y através de  Slack, el usuario indicado recibirá la notificación con las opciones para <strong>Aprobar</strong> o <strong>Declinar</strong> el proceso desde este medio o el Dashboard del SaaS.</p>The post <a href="https://webmago.dev/ciclos-de-integracion-y-despliegue-en-kubernetes/">Ciclos de Integracion y Despliegue en Kubernetes</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
					<wfw:commentRss>https://webmago.dev/ciclos-de-integracion-y-despliegue-en-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Qué infraestructura estoy usando</title>
		<link>https://webmago.dev/que-infraestructura-estoy-usando/</link>
					<comments>https://webmago.dev/que-infraestructura-estoy-usando/#respond</comments>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Thu, 26 Sep 2019 12:02:54 +0000</pubDate>
				<category><![CDATA[devops]]></category>
		<category><![CDATA[infraestructura]]></category>
		<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[codefresh]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=444</guid>
					<description><![CDATA[<p>A lo largo de los años he usado distintos proveedores tanto para uso personal como profesional, algunos durante trienios la relación ha sido buena hasta que sus condiciones cambian, no muchos se han tomado la molestia de avisarme así que he tenido que recurrir al tema legal y respaldos. Hoy que estoy trabajando en todo [&#8230;]</p>
The post <a href="https://webmago.dev/que-infraestructura-estoy-usando/">Qué infraestructura estoy usando</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>A lo largo de los años he usado distintos proveedores tanto para uso personal como profesional, algunos durante trienios la relación ha sido buena hasta que sus condiciones cambian, no muchos se han tomado la molestia de avisarme así que he tenido que recurrir al tema legal y respaldos.</p>
<p>Hoy que estoy trabajando en todo el ciclo de DevOps con Kubernetes no me hacia sentido trabajar en un VPS para generar mis ciclos y demos que veras en el blog, por lo que analice las diferentes ofertas como <strong>AWS</strong>, <strong>Azure</strong>, <strong>Digital Ocean</strong> y finalmente <strong>Google</strong> donde se encuentra hospedado este blog.</p>
<p>Al inicio intente poner en marcha <strong>October CMS</strong>, sin embargo tiene muchos puntos que resolver aun para hacer una portación a K8S de forma completa, por lo que opte por WordPress, ya lo he usado con otros proyectos y sé cómo vincularlo a un Volumen.</p>
<p>Inicie el cluster de forma micro, con <strong>3</strong> instancias <strong>f1-micro </strong>las cuales te dan <strong>1 vCPU</strong> y <strong>0.6 GB RAM</strong>, sin embargo siempre presentaba un problema alguno de los nodos, por lo que lo incremente a <strong>8</strong> y resulto mas o menos la estabilidad, nace un nuevo problema, montar una BD MySQL para el blog, ya lo he aplicado en clusters K8S con mayores recursos sin problemas, claro, sin la <strong>HA</strong> que ofrece <strong>Cloud SQL</strong>; debido a la poca memoria que los nodos tienen, era imposible mantener estable el pod de MySQL, así que analice el costo y bien podría usar una instancia micro sin obtener, claro esta, el SLA por una instancia mas grande, algo que para este proyecto personal no es de gran impacto.</p>
<p><img loading="lazy" decoding="async" class="wp-image-448 alignright" src="https://webmago.dev/buvytsan/2019/09/Captura-de-Pantalla-2019-09-26-a-las-7.00.24-1024x239.png" alt="" width="580" height="146" />Todo marcha bien hasta que recordé a <a href="https://spotinst.com/"><strong>spotinst.com</strong></a> quienes te ofrecen reducir en un margen del <strong>70</strong> al <strong>80</strong> por ciento del costo de tu cluster, así que manos a la obra y ahora tenemos un cluster de <strong>2</strong> nodos <strong>n1-standard-1</strong>, lo que representa <strong>1 vCPU</strong> y <strong>3.75 GB</strong> por nodo, ya les contare en otro post como me ha ido en costos con <a href="https://spotinst.com/"><strong>spotinst.com</strong></a>, de momento el dashboard indica que me he ahorrado <strong>78.97%</strong></p>The post <a href="https://webmago.dev/que-infraestructura-estoy-usando/">Qué infraestructura estoy usando</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
					<wfw:commentRss>https://webmago.dev/que-infraestructura-estoy-usando/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Migración de dos sitios de alto impacto a Kubernetes.</title>
		<link>https://webmago.dev/migracion-de-dos-sitios-de-alto-impacto-a-kubernetes/</link>
					<comments>https://webmago.dev/migracion-de-dos-sitios-de-alto-impacto-a-kubernetes/#respond</comments>
		
		<dc:creator><![CDATA[webmago]]></dc:creator>
		<pubDate>Wed, 25 Sep 2019 19:44:50 +0000</pubDate>
				<category><![CDATA[kubernetes]]></category>
		<category><![CDATA[cms]]></category>
		<guid isPermaLink="false">https://webmago.dev/?p=371</guid>
					<description><![CDATA[<p>Durante unos años, la casa editorial uso un CMS para gestionar sus contenidos y vistas web/móvil, usaban varios servidores entre ellos cache, redis, elastic, frontales, backend, base de datos, sin embargo, tanto el backend como el frontend era un mismo sistema monolítico construido en symfony. El render de las versiones web y móvil lo hacia [&#8230;]</p>
The post <a href="https://webmago.dev/migracion-de-dos-sitios-de-alto-impacto-a-kubernetes/">Migración de dos sitios de alto impacto a Kubernetes.</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></description>
										<content:encoded><![CDATA[<p>Durante unos años, la casa editorial uso un CMS para gestionar sus contenidos y vistas web/móvil, usaban varios servidores entre ellos cache, redis, elastic, frontales, backend, base de datos, sin embargo, tanto el backend como el frontend era un mismo sistema monolítico construido en symfony.</p>
<p>El render de las versiones web y móvil lo hacia el código monolítico frontal, mientras que otro código (copia salvo entradas diferentes) proveían el acceso a la ingesta de contenidos.</p>
<p>Antes de separar todo, por encargo me solicitaron una aplicación móvil con una vista a sugerencia mía con Material Design, para ello, en la parte &#8220;frontal&#8221; monolítica se genero un exportador de contenidos en formato JSON, de esta forma la aplicación accedería a los contenidos de las portadas. Es a partir de este punto en donde se realizaron platicas con el Director de IT de la casa editorial para mejorar el CMS y separarlo, de tal forma que no fuera un sistema monolítico.</p>
<p>Así es como el equipo de desarrollo empieza separar en bloques el complejo sistema, al tiempo que nacía un segundo sitio hermano. De forma paralela tome cursos sobre Docker, Kubernetes y todo lo que conlleva su orquestación y uso.</p>
<p>Una vez separados los CMS, me di a la tarea de generar las imágenes y la IaC (Infraestructure as Code) de cada uno de los componentes y generar las pruebas de conectividad.</p>
<p>Hoy en día, ambos sitios gozan de estabilidad y auto-escalado vertical y horizontal a libre demanda.</p>The post <a href="https://webmago.dev/migracion-de-dos-sitios-de-alto-impacto-a-kubernetes/">Migración de dos sitios de alto impacto a Kubernetes.</a> first appeared on <a href="https://webmago.dev">Webmago Dev</a>.]]></content:encoded>
					
					<wfw:commentRss>https://webmago.dev/migracion-de-dos-sitios-de-alto-impacto-a-kubernetes/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
