<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Carlos Nogueira</title>
    <description>The latest articles on DEV Community by Carlos Nogueira (@cedon).</description>
    <link>https://dev.to/cedon</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F226109%2F4c181e01-9de0-47e0-8185-256a92b7f779.webp</url>
      <title>DEV Community: Carlos Nogueira</title>
      <link>https://dev.to/cedon</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cedon"/>
    <language>en</language>
    <item>
      <title>[PT-BR] Pois é! Um post sobre o hype.</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Fri, 06 Feb 2026 01:04:17 +0000</pubDate>
      <link>https://dev.to/cedon/pois-e-um-post-sobre-o-hype-kpa</link>
      <guid>https://dev.to/cedon/pois-e-um-post-sobre-o-hype-kpa</guid>
      <description>&lt;p&gt;Enfim, resolvi dar uma pausa na escrita do livro para escrever sobre um tema que, como muitos que acompanham as &lt;a href="https://www.youtube.com/@carlosenog" rel="noopener noreferrer"&gt;#engineeringsessions&lt;/a&gt; já perceberam, me incomoda bastante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DISCLAIMER&lt;/strong&gt;: SEMPRE enfatizo que as críticas não são à tecnologia. Tirando o lado  óbvio dos prejuízos ao meio-ambiente &lt;a href="https://aclanthology.org/2025.findings-emnlp.939.pdf" rel="noopener noreferrer"&gt;¹&lt;/a&gt; &lt;a href="https://arxiv.org/html/2503.05804v1" rel="noopener noreferrer"&gt;²&lt;/a&gt; e à saúde mental ocasionados pelo hype de LLM &lt;a href="https://mental.jmir.org/2024/1/e59479/" rel="noopener noreferrer"&gt;³&lt;/a&gt; &lt;a href="https://futurism.com/commitment-jail-chatgpt-psychosis" rel="noopener noreferrer"&gt;⁴&lt;/a&gt; &lt;a href="https://futurism.com/chatgpt-mental-health-crises" rel="noopener noreferrer"&gt;⁵&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"É ÉLE-ÉLE-EME, nada de botar a culpa na conta da AI, que por sinal é uma área muito mais abrangente do que o hype vende.&lt;a href="https://roadmap.sh/ai-engineer" rel="noopener noreferrer"&gt;⁶&lt;/a&gt; &lt;a href="https://roadmap.sh/ai-data-scientist" rel="noopener noreferrer"&gt;⁷&lt;/a&gt; &lt;a href="https://roadmap.sh/machine-learning" rel="noopener noreferrer"&gt;⁸&lt;/a&gt;"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Sem falar na carga pesada de propaganda do tipo "&lt;em&gt;comprem meu produto&lt;/em&gt;", "&lt;em&gt;façam meu treinamento&lt;/em&gt;", "&lt;em&gt;assinem meu serviço&lt;/em&gt;" coisas que tentam deturpar (até) os próprios conceitos que fazem parte do núcleo base da tecnologia que tá sendo empurrada em nossa direção pelo hype.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DISCLAIMER 2&lt;/strong&gt;: A Stack HOMOLOGADA do seu trabalho é(ou ao menos deveria ser) de utilização OBRIGATÓRIA do profissional de T.I. que faz parte dos times técnicos. &lt;/p&gt;

&lt;p&gt;Logo, se vc veio aqui "&lt;em&gt;se queixar que o Carlos está a incentivar a não utilização de ferramentas de LLM no trabalho&lt;/em&gt;", pode dar meia-volta. &lt;/p&gt;

&lt;p&gt;Não sou "&lt;strong&gt;hater de AI&lt;/strong&gt;", aliás, nem acredito que esta persona exista no mundo profissional real. &lt;/p&gt;

&lt;p&gt;Pois se não tem como evitarmos a utilização, não existe essa pessoa que vai chegar com os gestores e dizer "ME RECUSO A USAR!".&lt;/p&gt;

&lt;p&gt;Cada um usa o que bem entender, traça a estratégia que achar mais adequada para sua própria vida profissional/carreira, ninguém precisa de "babá de tecnologia/stack" e cada um sabe onde o calo aperta.&lt;/p&gt;

&lt;p&gt;Apesar disso, não utilizar no trabalho ferramentas que não sejam homologadas pela sua organização é requisito básico de compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"NÃO DÁ PRA DERROTAR QUEM JÁ TÁ NO CHÃO"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;É ruim "bater em bêbado", quando o assunto é falhas de cybersegurança&lt;a href="https://arxiv.org/html/2405.03644v2" rel="noopener noreferrer"&gt;⁹&lt;/a&gt;, ou as diversas reticências no que diz respeito aos desafios de manter&lt;a href="https://arxiv.org/abs/2502.02368" rel="noopener noreferrer"&gt;¹⁰&lt;/a&gt; um software gerado por ferramentas de LLM que auxiliam na codificação.&lt;/p&gt;

&lt;p&gt;Então essas são outras coisas que NÃO irei abordar aqui. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"NÃO, ESTE HYPE NÃO É IGUAL AOS OUTROS"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Muitos comentam que &lt;em&gt;"este hype é parecido com o de microsserviços"&lt;/em&gt; (por exemplo). &lt;/p&gt;

&lt;p&gt;Não, não é. &lt;/p&gt;

&lt;p&gt;Poderia ser só mais uma (boa) tecnologia para acrescentarmos à nossa stack e ao nosso trabalho. &lt;/p&gt;

&lt;p&gt;O problema é que MUITA GENTE tenta vender como um "PARADIGMA", algo que vai "MATAR os Devs", ou substituir a engenharia de software como ela é hoje. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;E é nessa parte que a propaganda me pega.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;(Sob meu ponto de vista) Chega a ser ultrajante desconsiderar os avanços da engenharia depois de mais de 40 anos de história. &lt;/p&gt;

&lt;p&gt;Existe um fluxo para a evolução e implementação da Engenharia. &lt;/p&gt;

&lt;p&gt;Os últimos anos consolidaram um conjunto de processos, organização de times, metodologias, frameworks de trabalho, matérias relacionadas a automação, plataformas e maturidade das tecnologias que são base de tudo que é utilizado para a confecção de produtos digitais. &lt;/p&gt;

&lt;p&gt;O fator preponderante do que nós vemos no mercado hoje, é o papel cada vez mais presente do método científico servir como base para as engenharias. &lt;/p&gt;

&lt;p&gt;O embate entre quem se preocupa com a forma e  "agradabilidade de leitura" do código(artesãos) e quem "só" deseja resolver os problemas(engenheiros) havia encontrado o chão comum: a ciência. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Dave Farley aborda o papel da ciência na evolução das engenharias aqui neste vídeo: &lt;br&gt;
&lt;a href="https://youtube.com/watch?v=J8vCm1NdKIc" rel="noopener noreferrer"&gt;&lt;em&gt;-Engineering for Software&lt;/em&gt;&lt;/a&gt;"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Esse fluxo não sumiu(e nem vai tão cedo). Ele está aí e construir produtos digitais ainda obedece aos mesmos fundamentos. &lt;/p&gt;

&lt;p&gt;Quando aquela pessoa Dev amiga (de verdade) diz pra você "utilize a LLM para auxiliar no código, mas tenha senso crítico", na realidade ela não está nada mais do que afirmando nas entrelinhas que você precisa estudar os fundamentos da engenharia moderna para poder implementar. &lt;/p&gt;

&lt;p&gt;Isso não mudou, mesmo que a propaganda tente vender as técnicas de engenharia &lt;em&gt;(Ágil,Cloud Native,FLOSS,Entrega Contínua,12factor app, OpenAPI,DDD,BDD,TDD,etc.)&lt;/em&gt; usando outro nome, outra roupagem. &lt;/p&gt;

&lt;p&gt;O desafio está em conseguir filtrar o que é evolução de fundação, do que é propaganda de uma solução proprietária.&lt;/p&gt;

&lt;p&gt;Muitas "novidades" alardeadas pelo hype, não passam de imagens de contêineres que fazem chamadas para consumir alguma API proprietária, ou padrões(como OpenAPI) "repaginados"(por vezes mal implementados) para a "nova realidade".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"PARE DE TREINAR O MODELO DOS OUTROS E VÁ TREINAR O SEU CÉREBRO!"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Se você faz parte de times com pouca senioridade (estou falando sobre senioridade do TIME e não individual), muito provavelmente a  utilização de codificação assistida por LLM vai acelerar o prejuízo e dívida técnica que o seu time naturalmente já iria produzir&lt;a href="https://dora.dev/research/2025/dora-report/" rel="noopener noreferrer"&gt;¹¹&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Então sabendo disso, você deve atuar para auxiliar na evolução do conhecimento de engenharia do seu time. &lt;/p&gt;

&lt;p&gt;Este deveria ser o papel de quem é Senior++ e gestores, porém a situação atual pede que todas e todos que fazem parte da equipe tenham de procurar um papel de compartilhamento de conhecimento no time. &lt;/p&gt;

&lt;p&gt;Neste caso, as ferramentas de AI também podem auxiliar. &lt;/p&gt;

&lt;p&gt;Toda equipe, mesmo antes do hype, já deveria ter um contexto de gestão do conhecimento. Isso agora tem um papel muito mais forte. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"PROPAGANDA NÃO É FUNDAMENTO, SOFTWARE PROPRIETÁRIO NÃO É FLOSS(Free Libre Open Source Software)"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Propaganda não é fundamento, o "método de utilização do software do zezinho" não é o mesmo do software do pedrinho. &lt;/p&gt;

&lt;p&gt;Aliás, nem as metodologias de desenvolvimento estão fincadas em pedra. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/bliki/ExtremeProgramming.html" rel="noopener noreferrer"&gt;XP&lt;/a&gt; foi uma experiência que deu certo com o Kent Beck &lt;a href="https://a.co/d/08pK3Wgo" rel="noopener noreferrer"&gt;naqueles projetos&lt;/a&gt;, mas talvez não vá dar certo na sua organização. &lt;/p&gt;

&lt;p&gt;Em resumo: ATÉ as experiências que deram certo no passado, muito provavelmente não vão funcionar no caso da sua organização.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Mas por que ressaltar isso?&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;O hype atual emula EXPERIÊNCIAS QUE NÃO DERAM CERTO no passado. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;focar em soluções proprietárias &lt;a href="https://version-2.com/en/2024/10/exploring-the-differences-between-community-foss-open-core-and-commercial-oss/" rel="noopener noreferrer"&gt;¹²&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;aproximar programação da linguagem humana&lt;a href="https://www.cs.utexas.edu/~EWD/transcriptions/EWD01xx/EWD117.html" rel="noopener noreferrer"&gt;¹³&lt;/a&gt; &lt;a href="https://news.ycombinator.com/item?id=43564386" rel="noopener noreferrer"&gt;¹⁵&lt;/a&gt; &lt;a href="https://medium.com/@Szypetike/llms-programming-and-re-dijkstras-on-the-foolishness-of-natural-language-programming-1978-831729c4b968" rel="noopener noreferrer"&gt;¹⁶&lt;/a&gt; &lt;a href="https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667.html" rel="noopener noreferrer"&gt;¹⁷&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Não é "discurso de doidinho do GNU/Linux". O core das bigtechs/Cloud e principais produtos digitais do mercado é FLOSS &lt;a href="https://share.google/bAbLvFJ3QfqWE369s" rel="noopener noreferrer"&gt;&lt;em&gt;(FOSS analytical)&lt;/em&gt;&lt;/a&gt;. E o hype não tem como base FLOSS. &lt;/p&gt;

&lt;p&gt;Ano passado(2025) as primeiras iniciativas mais relevantes começaram a aparecer &lt;a href="https://opensource.org/ai/webinars/the-ideology-of-foss-and-ai-what-open-means-relating-to-platforms-and-black-box-systems" rel="noopener noreferrer"&gt;¹⁸&lt;/a&gt;, o problema é que estão vindo tarde &lt;a href="https://www.linuxfoundation.org/press/linux-foundation-announces-the-formation-of-the-agentic-ai-foundation" rel="noopener noreferrer"&gt;¹⁹&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;E para completar, o ritmo de surgimento de "padrões" e "especificações" é frenético, a ponto de vermos a "morte" de padrões que não duram sequer 3 meses&lt;a href="https://acuvity.ai/the-clawdbot-dumpster-fire-72-hours-that-exposed-everything-wrong-with-ai-security/" rel="noopener noreferrer"&gt;²⁰&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"CUIDADO COM O SENIOR++ ENDOSER DO HYPE"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Desde o surgimento do hype de LLM diversas pesquisas já demonstraram que isto acelera sua equipe(pro bem e/ou pro mal)&lt;a href="https://dora.dev/research/2025/dora-report/" rel="noopener noreferrer"&gt;²¹&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Se a equipe for boa, vai acelerar a qualidade  boa da entrega.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Se a equipe for ruim, vai acelerar os problemas.&lt;a href="https://youtu.be/b9EbCb5A408?si=PF2RLGI2fudhOd0p" rel="noopener noreferrer"&gt;²²&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Essa lógica vale pros devs Seniors++ individualmente também. &lt;/p&gt;

&lt;p&gt;A pessoa tem os fundamentos bem definidos na memória muscular, já têm bastante vivência de mercado. Daí fica fácil enxergar o grande valor que a ferramenta pode gerar no trabalho do dia-a-dia.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;E isso é um problema.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Nós temos nossas experiências pessoais, porém da mesma forma devs e projetos crescem em conjunto, seja num time, seja numa organização, seja na comunidade de profissionais de tecnologia.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Não existe time de uma pessoa só!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Dev senior consegue aproveitar, mas TEM DE SER SENIOR e não dá pra fingir que "todo time é repleto de seniors".&lt;/p&gt;

&lt;p&gt;Não dá pra fingir que times com senioridade baixa não existem, se bobear são a grande maioria no mercado. &lt;/p&gt;

&lt;p&gt;Então muito cuidado com Dev Senior++ que está empolgado nas redes sociais. A experiencia desse tipo de pessoa NÃO É a mesma que a sua, principalmente se você tem pouca senioridade e ainda tem um caminho grande de estudo/trabalho por percorrer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSÃO DO DESABAFO&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E é isso, este foi um desabafo que estava a correr na minha cabeça já tem umas semanas. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sugestões de Eps das Sessões de Engenharia relacionados ao texto:&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "Vida do Profissional de Tecnologia": &lt;a href="https://youtu.be/3hNH881-5cw" rel="noopener noreferrer"&gt;https://youtu.be/3hNH881-5cw&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "Engenheiros Staff+":  &lt;a href="https://youtu.be/15Zbg7Vk8Kw" rel="noopener noreferrer"&gt;https://youtu.be/15Zbg7Vk8Kw&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "Retrospectiva 2025": &lt;a href="https://youtu.be/kdkPBE7fj20" rel="noopener noreferrer"&gt;https://youtu.be/kdkPBE7fj20&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "Limites da Simplicidade": &lt;a href="https://youtu.be/byl4QAPajrU" rel="noopener noreferrer"&gt;https://youtu.be/byl4QAPajrU&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "Velocidade":&lt;br&gt;
&lt;a href="https://youtu.be/QWRsLrbFch0" rel="noopener noreferrer"&gt;https://youtu.be/QWRsLrbFch0&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "Filosofia UNIX: &lt;a href="https://youtu.be/mWXR_OBwjqY" rel="noopener noreferrer"&gt;https://youtu.be/mWXR_OBwjqY&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "BDD":&lt;br&gt;
&lt;a href="https://youtu.be/VMY_Z2jDl00" rel="noopener noreferrer"&gt;https://youtu.be/VMY_Z2jDl00&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "O Mítico Homem-mês": &lt;a href="https://youtu.be/f3z794AMpng" rel="noopener noreferrer"&gt;https://youtu.be/f3z794AMpng&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "DDD":&lt;br&gt;
&lt;a href="https://youtu.be/rt0gSnwqcGY" rel="noopener noreferrer"&gt;https://youtu.be/rt0gSnwqcGY&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "Complexidade Acidental":&lt;br&gt;
&lt;a href="https://youtu.be/IO4kOGfyVds" rel="noopener noreferrer"&gt;https://youtu.be/IO4kOGfyVds&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "TDD":&lt;br&gt;
&lt;a href="https://youtu.be/H3N2B5gcGYs" rel="noopener noreferrer"&gt;https://youtu.be/H3N2B5gcGYs&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;- "12 Factor App":&lt;br&gt;
&lt;a href="https://youtu.be/8SMdEiNSKf4" rel="noopener noreferrer"&gt;https://youtu.be/8SMdEiNSKf4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;*A leitura fica mais completa com consulta aos links das referências no texto.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>ai</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Crossplane: GKE Installation</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Wed, 24 Feb 2021 14:27:50 +0000</pubDate>
      <link>https://dev.to/cedon/crossplane-gke-installation-i01</link>
      <guid>https://dev.to/cedon/crossplane-gke-installation-i01</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;..Crossplane is an open source Kubernetes add-on that supercharges your Kubernetes clusters enabling you to provision and manage infrastructure, services, and applications from kubectl.&lt;/em&gt; (crossplane.io)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Crossplane is a CNCF sandbox project, open source, community driven solution and add-on for your kubernetes API to manage and compose infrastructure.&lt;/p&gt;

&lt;p&gt;It uses a team centric approach with Open Application Model.&lt;/p&gt;

&lt;p&gt;The idea is to use a kubernetes cluster as a single control panel. where there is freedom to provision resources in any cloud and link these services with the cluster itself. The cluster does not need to be in the same cloud as the services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz3dp5pfbhx0rgl2ejst.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz3dp5pfbhx0rgl2ejst.png" alt="Alt Text" width="641" height="467"&gt;&lt;/a&gt;&lt;/p&gt;
Crossplane Application Architecture Example



&lt;p&gt;Basically a provider is configured in the cluster linked to a service account of a specific cloud.&lt;/p&gt;

&lt;p&gt;Crossplane CRDs use this provider to deploy and link services across the cluster.&lt;/p&gt;

&lt;p&gt;Each cloud service has its particularity and is defined through structures of compositions, definitions and namespaced k8s specifications.&lt;/p&gt;

&lt;p&gt;The CRDs that define the crossplane providers services are called XRDs.&lt;/p&gt;

&lt;p&gt;Crossplane has an external CLI and its own CRDs that are deployed in the cluster. &lt;/p&gt;

&lt;p&gt;Since CRDs and XRDs are deployed, the provisioning operation no longer requires the local CLI. Just having kubectl configured needed to re-deploy the types of resources that are already configured.&lt;/p&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Follows ansible to automate the installation of a crossplane + GCP Provider in a GKE cluster&lt;/p&gt;

&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;GKE&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Google Cloud SDK (316.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;bq (2.0.62+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;core (2020.10.23.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;gsutil (4.54.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Kubernetes(1.16.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;kubectl(1.16.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Helm(3.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;ansible (2.10.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;openshift python client (0.11.+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;PyYAML (5.3.+)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deploy
&lt;/h2&gt;

&lt;p&gt;1 - Git clone the repo to bastion&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - $ git clone https://gitlab.com/cedon/crossplane-gcp.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2 - Check if roles/crossplane/defaults/main.yml is right for the environment you want to deploy&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tov5u0nlm441s3iuvmj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9tov5u0nlm441s3iuvmj.png" alt="Alt Text" width="800" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3 - Deploy with ansible command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - $ ansible-playbook -i ./hosts -e \ 
'ansible_python_interpreter=/usr/bin/python3' crossplane.yml 
\ --tags "install, gcp" -vvv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;After the Deploy you must take care about the file creds.json. It will be located at the repo root, and has the service account credentials.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;4 - Check Crossplane Installation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - $ kubectl get all -n crossplane-system
  - $ kubectl crossplane --help
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Crossplane - &lt;a href="https://crossplane.io" rel="noopener noreferrer"&gt;https://crossplane.io&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Crossplane Install and Configure V1.0 - &lt;a href="https://crossplane.io/docs/v1.0/getting-started/install-configure.html" rel="noopener noreferrer"&gt;https://crossplane.io/docs/v1.0/getting-started/install-configure.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Crossplane Provision Infrastructure - &lt;a href="https://crossplane.io/docs/v1.0/getting-started/provision-infrastructure.html" rel="noopener noreferrer"&gt;https://crossplane.io/docs/v1.0/getting-started/provision-infrastructure.html&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>multicloud</category>
      <category>provider</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Linkerd: Service Mesh Overview</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Thu, 19 Nov 2020 05:37:26 +0000</pubDate>
      <link>https://dev.to/cedon/linkerd-service-mesh-overview-an7</link>
      <guid>https://dev.to/cedon/linkerd-service-mesh-overview-an7</guid>
      <description>&lt;p&gt;Linkerd is a ultralight, ultrafast, security-first service mesh for Kubernetes.&lt;/p&gt;

&lt;p&gt;Linkerd Service Mesh comes to solve the problem to add 3 layers at Cloud-Native Kubernetes app:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Security&lt;/li&gt;
&lt;li&gt;Reliability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Going back in monolith time, we have to deal with one language technology stack(for example: Java). And 3 operations teams to interact, deploy, operate with it: Devs, Networking and Security.&lt;/p&gt;

&lt;p&gt;But if we look at a Cloud-Native Kubernetes app, we have multi-language and architecture scenarios. So, the chalengers are most complex, and add Observability, Security Layer and Reliability becomes a implementation and operations difficult task. &lt;/p&gt;

&lt;p&gt;On earliest 2010 years, Twitter, Netflix and Google dealt with this situations making native languages libraries for their microservices stacks. &lt;/p&gt;

&lt;p&gt;Twitter has evolved its jvm based library Finable to deal with a multilanguage architecture. Then changed the name to Linkerd on 2016. Became the first Service Mesh Plataform.  &lt;/p&gt;

&lt;p&gt;In 2017 Linkerd was donated to CNCF.&lt;/p&gt;

&lt;p&gt;In 2018 was launched the Linkerd 2.0 version. With several changes. Now we have a Linkerd2-proxy Rust-based and Control Plane Golang-based. &lt;/p&gt;

&lt;p&gt;Implement a network of proxies that communicate securely(mTLS) using HTTP and gRPC. It was the solution found to inject the mesh layer. Each microservice meshed has a proxy injected like a side-car container. &lt;/p&gt;

&lt;p&gt;The name of the proxies network layer is Data Plane. This is the base of collected metrics and active operations. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkugzn5aje8q3wmaml8t7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkugzn5aje8q3wmaml8t7.png" alt="Alt Text" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;
Data Plane




&lt;p&gt;The other module is the Control Plane. This is the Linkerd Plataform Owners API Operations interface. Can be access by CLI or Browser. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkihnxc72kbd6igb9mdug.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkihnxc72kbd6igb9mdug.png" alt="Alt Text" width="756" height="516"&gt;&lt;/a&gt;&lt;/p&gt;
Linkerd 2.x Architecture




&lt;p&gt;Linkerd Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Observability: Service-level golden metrics: success rates, latencies, throughput. Service topologies&lt;/li&gt;
&lt;li&gt;Reliability: Retries, timeouts, load balancing, circuit breaking&lt;/li&gt;
&lt;li&gt;Security: Transparent mTLS, cert management and rotation, policy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most Service Mesh Plataforms are based on Envoy Proxy, but it isn't The Linkerd case. &lt;/p&gt;

&lt;p&gt;Use a "micro-proxy" Rust-based let the project to..&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;avoid a entire class of memory vulnerabilities. &lt;/li&gt;
&lt;li&gt;compiles to native code(no runtime env/GC). So it can be ultralight and ultrafast &lt;/li&gt;
&lt;li&gt;built on Tokio, Hyper, H2, Tower and the rest of modern Rust async networking stack. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Linkerd has huge numbers and benchmark results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4+ years in production&lt;/li&gt;
&lt;li&gt;5,000+ Slack channel members&lt;/li&gt;
&lt;li&gt;10,000+ GitHub stars&lt;/li&gt;
&lt;li&gt;100+ contributors&lt;/li&gt;
&lt;li&gt;Weekly edge releases&lt;/li&gt;
&lt;li&gt;Open governance, neutral home&lt;/li&gt;
&lt;li&gt;Tl;dr: really fast. Not as fast as "no service mesh", but significantly smaller and faster than Istio.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't use Linkerd if your app..&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;..is a monolith&lt;/li&gt;
&lt;li&gt;..that communicate purely via Kafka or another distributed queue&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Previous Post
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/cedon/linkerd-install-and-basic-ops-2l90"&gt;Linkerd: Install and Basic Ops&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Linkerd Docs - &lt;a href="https://linkerd.io/docs" rel="noopener noreferrer"&gt;https://linkerd.io/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.edx.org/course/introduction-to-service-mesh-with-linkerd" rel="noopener noreferrer"&gt;Course: Introduction to Service Mesh with Linkerd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;CNCF - &lt;a href="https://www.cncf.io/" rel="noopener noreferrer"&gt;https://www.cncf.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;gRPC - &lt;a href="https://grpc.io/" rel="noopener noreferrer"&gt;https://grpc.io/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Rust - &lt;a href="https://www.rust-lang.org/" rel="noopener noreferrer"&gt;https://www.rust-lang.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Golang - &lt;a href="https://golang.org/" rel="noopener noreferrer"&gt;https://golang.org/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kinvolk Benchmark - &lt;a href="https://kinvolk.io/blog/2019/05/performance-benchmark-analysis-of-istio-and-linkerd/" rel="noopener noreferrer"&gt;https://kinvolk.io/blog/2019/05/performance-benchmark-analysis-of-istio-and-linkerd/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tokio - &lt;a href="https://tokio.rs/" rel="noopener noreferrer"&gt;https://tokio.rs/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Hyper - &lt;a href="https://github.com/hyperium/hyper" rel="noopener noreferrer"&gt;https://github.com/hyperium/hyper&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;H2 - &lt;a href="https://github.com/hyperium/h2" rel="noopener noreferrer"&gt;https://github.com/hyperium/h2&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Tower - &lt;a href="https://github.com/tower-rs/tower" rel="noopener noreferrer"&gt;https://github.com/tower-rs/tower&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kafka - &lt;a href="https://kafka.apache.org/intro" rel="noopener noreferrer"&gt;https://kafka.apache.org/intro&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>linkerd</category>
      <category>mesh</category>
      <category>kubernetes</category>
      <category>fundamentals</category>
    </item>
    <item>
      <title>Linkerd: Install and Basic Ops</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Sun, 01 Nov 2020 01:59:27 +0000</pubDate>
      <link>https://dev.to/cedon/linkerd-install-and-basic-ops-2l90</link>
      <guid>https://dev.to/cedon/linkerd-install-and-basic-ops-2l90</guid>
      <description>&lt;p&gt;Linkerd Installation, Basic Operations and My Thoughts About it. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Requirements(Works on Production too)&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;GKE or Minikube or kind&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Kubernetes(1.16+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;kubectl(1.16+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Linkerd 2.x&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;1 - Install Linkerd CLI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ curl -sL https://run.linkerd.io/install | sh
- $ export PATH=$PATH:$HOME/.linkerd2/bin
- $ linkerd version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2 - Validate Kubernetes Cluster&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ linkerd check --pre
OUTPUT:
..
pre-kubernetes-capability
-------------------------
‼ has NET_ADMIN capability
    found 1 PodSecurityPolicies.. 
‼ has NET_RAW capability
    found 1 PodSecurityPolicies..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
(on GKE ignore this warnings. This is because there's no linkerd previously installation and the pods security policies are on. But, dont worry)






&lt;p&gt;3 - Deploy Linkerd&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ linkerd install | kubectl apply -f -
- $ linkerd check
- $ kubectl get all -n linkerd 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
(now the linkerd check command must have all green checks output)





&lt;p&gt;4 - Access the Dashboard&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ linkerd dashboard
OUTPUT:
Linkerd dashboard available at:
http://localhost:50750
Grafana dashboard available at:
http://localhost:50750/grafana
Opening Linkerd dashboard in the default browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can use port-forward to expose the dashboard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ kubectl port-forward --address 127.0.0.1 \
service/linkerd-web 5000:8084 -n linkerd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dashboard is referenced by the linkerd-web service. If you are executing from a bastion, you can define the bastion IP editing the deployment.apps/linkerd-web&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ kubectl edit deployment.apps/linkerd-web -n linkerd
# you must edit the address on the arg enforced-host:
# BEFORE EDIT:-enforced-host=^(localhost|127\.0\.0\.1|..
# AFTER  EDIT:-enforced-host=^(bastionhost|192\.168\.0\.9|..

- $ kubectl port-forward --address 0.0.0.0 \
service/linkerd-web 5000:8084 -n linkerd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can open the Dashboard with bastion IP(192.168.0.9 as the example) and port 5000&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq5wu7qdgh4mn0uii7cb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fq5wu7qdgh4mn0uii7cb1.png" alt="Linkerd Dashboard" width="800" height="569"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With dashboard we can visualize our microservices architecture in selected namespace&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkn5kj195sijqkkue9dp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fkn5kj195sijqkkue9dp3.png" alt="Alt Text" width="800" height="637"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking on the Grafana icon link at the pod line, we can see the pod stats on a template pre-configurated&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftmtkvizcy0qjgoaxjqje.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ftmtkvizcy0qjgoaxjqje.png" alt="Alt Text" width="251" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnrb68veiepq17716ck7q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fnrb68veiepq17716ck7q.png" alt="Alt Text" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;
Each meshed pod will have a pre-configured Grafana Dashboard.



&lt;p&gt;The Linkerd is a lightweight powerful service mesh plataform, and had the advantage to be strongly decoupled architecture. It can be added and removed without influencing your app.&lt;/p&gt;

&lt;p&gt;Linkerd is unique in that it is part of the Cloud Native Foundation (CNCF), which is the organization responsible for Kubernetes.  &lt;/p&gt;

&lt;p&gt;The CLI had a simple and intuitive user experience.&lt;/p&gt;

&lt;p&gt;You can mesh your deployed microservice with simple commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#add with linkerd inject command on a deployed app
- $ kubectl get -n YOUR_APP_NAMESPACE deploy -o yaml \
  | linkerd inject - \
  | kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or add few yaml instructions(two config lines on the app deployment yaml)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#example:
annotations:
  checksum/config: 37b064423157b6fe14ddeba6924195c1075bd17feb
  linkerd.io/inject: enabled

#this values are extract from the command
- $ kubectl get -n YOUR_APP_NAMESPACE deploy -o yaml \
  | linkerd inject -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To reverse the mesh on your app do:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ kubectl get -n YOUR_APP_NAMESPACE deploy -o yaml \
  | linkerd uninject - \
  | kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To uninstall Linkerd&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ linkerd uninstall | kubectl apply -f -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Linkerd Docs - &lt;a href="https://linkerd.io/docs" rel="noopener noreferrer"&gt;https://linkerd.io/docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Converting Helm Charts to K8S SDK Templates</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Fri, 16 Oct 2020 07:37:55 +0000</pubDate>
      <link>https://dev.to/cedon/converting-helm-charts-to-k8s-sdk-templates-3a7e</link>
      <guid>https://dev.to/cedon/converting-helm-charts-to-k8s-sdk-templates-3a7e</guid>
      <description>&lt;p&gt;If you are working on a helm chart, however, you need to make customizations or debug in a more native way. An alternative is to convert it to kubernetes SDK templates. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Requirements&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Kubernetes(1.16+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;helm (3+)&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;kubectl(1.16+)&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The process is simple:&lt;br&gt;
(mongodb example)&lt;/p&gt;

&lt;p&gt;1 Install desired chart generic release&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ kubectl create ns mgodb-ns
- $ helm install mongodb --namespace mgodb-ns stable/mongodb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2 Extract default generated chart values from the release&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ helm get values mongodb -a --output yaml &amp;gt; values.yaml 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3 Convert the chart to template&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ helm template --values ./values.yaml --output-dir \
./manifests stable/mongodb

OUTPUT: 
wrote ./manifests/mongodb/templates/secrets.yaml
wrote ./manifests/mongodb/templates/pvc-standalone.yaml
wrote ./manifests/mongodb/templates/svc-standalone.yaml
wrote ./manifests/mongodb/templates/deployment-standalone.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can work on native SDK k8s yamls at the directory manifests/mongodb/templates/&lt;/p&gt;

&lt;p&gt;4 Don't forget to delete the generic release&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- $ helm uninstall mongodb
- $ kubectl delete ns mgodb-ns
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
    <item>
      <title>Deploy BigchainDB using Docker Compose</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Sun, 20 Oct 2019 21:37:35 +0000</pubDate>
      <link>https://dev.to/cedon/deploy-bigchaindb-using-docker-compose-4ig7</link>
      <guid>https://dev.to/cedon/deploy-bigchaindb-using-docker-compose-4ig7</guid>
      <description>&lt;p&gt;BigchainDB is a "blockchain database"..&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;..With high throughput, low latency, powerful query functionality, decentralized control, immutable data storage and built-in asset support, BigchainDB is like a database with blockchain characteristics.&lt;/em&gt;(bigchaindb.com)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's a good choice for who wants to work with immutable databases.&lt;/p&gt;

&lt;p&gt;Here's a tutorial to deploy a local infrastructure docker based.&lt;br&gt;
(I'm using Debian Buster, but the project recommends latests Ubuntu and CentOS)&lt;/p&gt;
&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Docker(19.03+)&lt;/li&gt;
&lt;li&gt;Docker-Compose (2.0+)&lt;/li&gt;
&lt;li&gt;python3.6+&lt;/li&gt;
&lt;li&gt;pip3+ &lt;/li&gt;
&lt;li&gt;bigchaindb_driver(for the tests, install via pip3)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Clone Repo
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ git clone https://github.com/bigchaindb/bigchaindb.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;

&lt;p&gt;Bigchaindb Dependences&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo bash bigchaindb/pkg/scripts/bootstrap.sh --operation install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy Docker Compose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ docker-compose -f bigchaindb/docker-compose.yaml up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check Containers
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                    PORTS                                                        NAMES
6b9dcd4f524d        bigchaindb_bigchaindb           ".ci/entrypoint.sh"      32 minutes ago      Up 32 minutes (healthy)   0.0.0.0:9984-9985-&amp;gt;9984-9985/tcp, 0.0.0.0:32770-&amp;gt;26658/tcp   bigchaindb_bigchaindb_1
4b4c08cc3680        tendermint/tendermint:v0.31.5   "sh -c 'tendermint i…"   33 minutes ago      Up 32 minutes             0.0.0.0:26656-26657-&amp;gt;26656-26657/tcp                         bigchaindb_tendermint_1
443b20abbb7d        mongo:3.6                       "docker-entrypoint.s…"   33 minutes ago      Up 32 minutes             0.0.0.0:27017-&amp;gt;27017/tcp                                     bigchaindb_mongodb_1
3afee461139c        nginx                           "nginx -g 'daemon of…"   33 minutes ago      Up 32 minutes             0.0.0.0:33333-&amp;gt;80/tcp                                        bigchaindb_vdocs_1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Testing db
&lt;/h3&gt;

&lt;p&gt;Create &lt;em&gt;testdb.py&lt;/em&gt; to test your installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from bigchaindb_driver import BigchainDB
from bigchaindb_driver.crypto import generate_keypair
from time import sleep
from sys import exit

alice, bob = generate_keypair(), generate_keypair()

bdb_root_url = 'http://localhost:9984'  # Use YOUR BigchainDB Root URL here

bdb = BigchainDB(bdb_root_url)

bicycle_asset = {
    'data': {
        'bicycle': {
            'serial_number': 'abcd1234',
            'manufacturer': 'bkfab'
        },
    },
}

bicycle_asset_metadata = {
    'planet': 'earth'
}

prepared_creation_tx = bdb.transactions.prepare(
    operation='CREATE',
    signers=alice.public_key,
    asset=bicycle_asset,
    metadata=bicycle_asset_metadata
)

fulfilled_creation_tx = bdb.transactions.fulfill(
    prepared_creation_tx,
    private_keys=alice.private_key
)

sent_creation_tx = bdb.transactions.send_commit(fulfilled_creation_tx)

txid = fulfilled_creation_tx['id']

asset_id = txid

transfer_asset = {
    'id': asset_id
}

output_index = 0
output = fulfilled_creation_tx['outputs'][output_index]

transfer_input = {
    'fulfillment': output['condition']['details'],
    'fulfills': {
        'output_index': output_index,
        'transaction_id': fulfilled_creation_tx['id']
    },
    'owners_before': output['public_keys']
}

prepared_transfer_tx = bdb.transactions.prepare(
    operation='TRANSFER',
    asset=transfer_asset,
    inputs=transfer_input,
    recipients=bob.public_key,
)

fulfilled_transfer_tx = bdb.transactions.fulfill(
    prepared_transfer_tx,
    private_keys=alice.private_key,
)

sent_transfer_tx = bdb.transactions.send_commit(fulfilled_transfer_tx)

print("Is Bob the owner?",
    sent_transfer_tx['outputs'][0]['public_keys'][0] == bob.public_key)

print("Was Alice the previous owner?",
    fulfilled_transfer_tx['inputs'][0]['owners_before'][0] == alice.public_key)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Execute Test Script
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   $ python3 testdb.py 
   [out]Is Bob the owner? True
   [out]Was Alice the previous owner? True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;Bigchaindb Docs - &lt;a href="http://docs.bigchaindb.com/" rel="noopener noreferrer"&gt;http://docs.bigchaindb.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>bigchaindb</category>
      <category>blockchain</category>
      <category>mongodb</category>
      <category>docker</category>
    </item>
    <item>
      <title>Deploying A Private Storage Cloud (SeaFile) Using Docker</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Fri, 18 Oct 2019 13:04:14 +0000</pubDate>
      <link>https://dev.to/cedon/deploying-a-private-storage-cloud-seafile-using-docker-56gk</link>
      <guid>https://dev.to/cedon/deploying-a-private-storage-cloud-seafile-using-docker-56gk</guid>
      <description>&lt;p&gt;Seafile...&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;..is an open source file sync&amp;amp;share solution designed for high reliability, performance and productivity. Sync, share and collaborate across devices and teams.&lt;/em&gt;(SeaFile.com)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here we have a powerful suite: service, desktop/mobile clients, cli and web interface. A good private alternative to public clouds. &lt;/p&gt;

&lt;p&gt;Features includes storage, sharing, security and LDAP integration.&lt;/p&gt;

&lt;p&gt;Here's a video &lt;a href="https://www.youtube.com/watch?v=CdP_MTWBnE4" rel="noopener noreferrer"&gt;review&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Compose
&lt;/h2&gt;

&lt;p&gt;For this configuration the host just need allow services using the web ports(80,443).&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://gitlab.com/cedon/seafile/blob/master/docker-compose.yaml" rel="noopener noreferrer"&gt;docker compose&lt;/a&gt; sets 3 containers: mariadb, memcached and seafile. &lt;/p&gt;

&lt;p&gt;The seafile container responds to the service. It have a proxy nginx redirecting que request to internal service listen at port 8000. &lt;/p&gt;

&lt;h3&gt;
  
  
  Let's Encrypt
&lt;/h3&gt;

&lt;p&gt;To use Let's Encrypt, you must set this parameters:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    ports:
      ...
      - "443:443" 
      ...
    environment:
      ...
      - SEAFILE_SERVER_LETSENCRYPT=true 
      - SEAFILE_SERVER_HOSTNAME=your.domain.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The domain &lt;em&gt;your.domain.com&lt;/em&gt; must be valid and internet reachable, or the LetsEncrypt handshakes wont work. &lt;/p&gt;

&lt;h3&gt;
  
  
  MariaDB Connection and SeaFile Authentication
&lt;/h3&gt;

&lt;p&gt;You must check the database connection. &lt;/p&gt;

&lt;p&gt;Change the value &lt;em&gt;db_secret&lt;/em&gt; for your mysql connection password. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;MYSQL_ROOT_PASSWORD=db_secret&lt;/em&gt; must be the same value  of &lt;em&gt;DB_ROOT_PASSWD=db_secret&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;DB_HOST=db&lt;/em&gt; must be the same of the mariadb service name &lt;em&gt;db&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  db:
   ...
    environment:
      - MYSQL_ROOT_PASSWORD=db_secret 
  seafile:
  ...
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=db_secret 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The SeaFile Authentication uses e-mail as login name. &lt;/p&gt;

&lt;p&gt;Change the value &lt;em&gt;a_secret&lt;/em&gt; for your admin password.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;services:
  ... 
  seafile:
  ...
    environment:
     - SEAFILE_ADMIN_EMAIL=me@example.com
     - SEAFILE_ADMIN_PASSWORD=a_secret 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Deploy SeaFile
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Requirements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Docker(19.03+)&lt;/li&gt;
&lt;li&gt;Docker-Compose (2.0+)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deploy:
&lt;/h3&gt;

&lt;p&gt;clone repository&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://gitlab.com/cedon/seafile.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;here two ways to deploy:&lt;/p&gt;

&lt;p&gt;1.official seafile sample docker-compose.yaml file.&lt;/p&gt;

&lt;p&gt;1.1. edit compose file seafile/&lt;a href="https://gitlab.com/cedon/seafile/blob/master/docker-compose.yaml" rel="noopener noreferrer"&gt;docker-compose.yml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;1.2. deploy infrastructure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose -f seafile/docker-compose.yaml up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;2.setting the parameters on &lt;a href="https://docs.docker.com/compose/compose-file/#env_file" rel="noopener noreferrer"&gt;.env files&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;2.1. set the environment parameters on files: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;mariadb:&lt;a href="https://gitlab.com/cedon/seafile/blob/master/env/db.env" rel="noopener noreferrer"&gt;env/db.env&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;seafile:&lt;a href="https://gitlab.com/cedon/seafile/blob/master/env/seafile.env" rel="noopener noreferrer"&gt;env/seafile.env&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2.2. deploy infrastructure&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;docker-compose -f seafile/docker-compose.sec.yaml up -d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Setting Up the service
&lt;/h2&gt;

&lt;p&gt;After the deploy, you must access System Admin &amp;gt; Settings&lt;/p&gt;

&lt;p&gt;Set the Service URL: &lt;code&gt;http://your.domain.com:8000&lt;/code&gt;&lt;br&gt;
Set the File Server Root: &lt;code&gt;http://your.domain.com/seafhttp&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;SeaFile Project - &lt;a href="http://www.seafile.com" rel="noopener noreferrer"&gt;www.seafile.com&lt;/a&gt;&lt;br&gt;
Cedon's SeaFile Example Repository - &lt;a href="//gitlab.com/cedon/seafile"&gt;gitlab.com/cedon/seafile&lt;/a&gt;&lt;/p&gt;

</description>
      <category>docker</category>
      <category>seafile</category>
      <category>storage</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Autoscaling Group With AWS Elastic Load Balancing</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Fri, 18 Oct 2019 00:09:56 +0000</pubDate>
      <link>https://dev.to/cedon/autoscaling-group-with-aws-elastic-load-balancing-4pl1</link>
      <guid>https://dev.to/cedon/autoscaling-group-with-aws-elastic-load-balancing-4pl1</guid>
      <description>&lt;p&gt;If you want to deploy an Autoscaling EC2 infrastructure on AWS using ELB, you'll need to follow this steps: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Launch EC2 Instance

&lt;ul&gt;
&lt;li&gt;EC2 Dashboard &amp;gt; Launch Instance&lt;/li&gt;
&lt;li&gt;Configure your web app&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Transform into AMI

&lt;ul&gt;
&lt;li&gt;Select Instance &amp;gt; Action &amp;gt; Image &amp;gt; Create Image&lt;/li&gt;
&lt;li&gt;Instance &amp;gt; Delete EC2 Instantes&lt;/li&gt;
&lt;li&gt;Delete Security Group created with the Instance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Deploy AMI across different zones

&lt;ul&gt;
&lt;li&gt;Load Balancer &amp;gt; Create Load Balancer &amp;gt; Application Load Balancer&lt;/li&gt;
&lt;li&gt;Select Zones&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configure Secure Groups

&lt;ul&gt;
&lt;li&gt;Create New Secure Group&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configure Target Groups

&lt;ul&gt;
&lt;li&gt;Define a Target Group name&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Launch Configurations

&lt;ul&gt;
&lt;li&gt;Choose the AMI created early&lt;/li&gt;
&lt;li&gt;Define Launch Configuration name&lt;/li&gt;
&lt;li&gt;Allow traffic just to the Load Balancer Security Group&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Configure the Autoscaling Group

&lt;ul&gt;
&lt;li&gt;Autoscaling Group &amp;gt; Create Autoscaling Group&lt;/li&gt;
&lt;li&gt;Define Name&lt;/li&gt;
&lt;li&gt;Group Size&lt;/li&gt;
&lt;li&gt;Choose the subnets&lt;/li&gt;
&lt;li&gt;Choose Target Groups&lt;/li&gt;
&lt;li&gt;Health Check Type: ELB&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Define the Scaling Policies

&lt;ul&gt;
&lt;li&gt;Create Increase and Decrease Alarms&lt;/li&gt;
&lt;li&gt;Set Notifications&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Autoscaling Group will launch the AMI instances based on the Increase/Decrease alarms and the minimal requirements. &lt;/p&gt;

&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;Elastic Load Balancing - &lt;a href="https://aws.amazon.com/elasticloadbalancing/" rel="noopener noreferrer"&gt;https://aws.amazon.com/elasticloadbalancing/&lt;/a&gt;&lt;br&gt;
Elastic Compute Cloud - &lt;a href="https://aws.amazon.com/ec2/" rel="noopener noreferrer"&gt;https://aws.amazon.com/ec2/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>elb</category>
      <category>loadbalacing</category>
    </item>
    <item>
      <title>How to Deploy YAMLs with Deprecated Parameters on Kubernetes 1.16.0</title>
      <dc:creator>Carlos Nogueira</dc:creator>
      <pubDate>Thu, 17 Oct 2019 00:43:21 +0000</pubDate>
      <link>https://dev.to/cedon/how-to-deploy-yamls-with-deprecated-parameters-on-kubernetes-1-16-0-297n</link>
      <guid>https://dev.to/cedon/how-to-deploy-yamls-with-deprecated-parameters-on-kubernetes-1-16-0-297n</guid>
      <description>&lt;p&gt;The Kubernetes version 1.16.0 stopped to serve the following deprecated APIs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NetworkPolicy&lt;/strong&gt; (in the &lt;em&gt;extensions/v1beta1&lt;/em&gt; API group):&lt;br&gt;
Migrate to use the &lt;em&gt;networking.k8s.io/v1&lt;/em&gt; API, available since v1.8. Existing persisted data can be &lt;em&gt;retrieved/updated&lt;/em&gt; via the &lt;em&gt;networking.k8s.io/v1&lt;/em&gt; API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;PodSecurityPolicy&lt;/strong&gt; (in the &lt;em&gt;extensions/v1beta1&lt;/em&gt; API group):&lt;br&gt;
Migrate to use the &lt;em&gt;policy/v1beta1&lt;/em&gt; API, available since v1.10. Existing persisted data can be &lt;em&gt;retrieved/updated&lt;/em&gt; via the &lt;em&gt;policy/v1beta1&lt;/em&gt; API.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DaemonSet&lt;/strong&gt;, &lt;strong&gt;Deployment&lt;/strong&gt;, &lt;strong&gt;StatefulSet&lt;/strong&gt;, and &lt;strong&gt;ReplicaSet&lt;/strong&gt; (in the &lt;em&gt;extensions/v1beta1&lt;/em&gt; and &lt;em&gt;apps/v1beta2&lt;/em&gt; API groups)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You must check your older YAMLs. But changing the listed parameters in all files can be an exhausting task.&lt;/p&gt;

&lt;p&gt;An option would be to convert the older files.&lt;/p&gt;

&lt;p&gt;For example, lets deploy a NGINX using the file nginx.yaml.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
   run: nginx
  name: deploy-nginx
spec:
  selector:
     matchLabels:
      run: nginx
  template:
     metadata:
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx
        name: nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The files nginx.yaml sets &lt;em&gt;apiVersion: extensions/v1beta1&lt;/em&gt; and it's compatible with kubernetes older versions, but not run on The last.&lt;br&gt;
To convert the older YAML, using client 1.16 execute &lt;em&gt;kubectl&lt;/em&gt; with the option &lt;em&gt;convert&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl convert -f nginx.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Command screen output would be like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: deploy-nginx
spec:
  progressDeadlineSeconds: 2213489811
  revisionHistoryLimit: 2213489811
  selector:
    matchLabels:
      run: nginx
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        run: nginx
    spec:
      containers:
      - image: nginx
        imagePullPolicy: Always
        name: nginx
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartiPolicy: Always
      schedulerName: defaul-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 28
status: {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Paste the command output to a file(ex: nginxOUT.yaml)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl convert -f nginx.yaml &amp;gt; nginxOUT.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Deploy&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Using output file
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl create -f nginxOUT.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Directly with the older file
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kubectl convert -f nginx.yaml | kubectl create -f -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/" rel="noopener noreferrer"&gt;https://kubernetes.io/blog/2019/07/18/api-deprecations-in-1-16/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>api</category>
      <category>yaml</category>
      <category>deprecated</category>
    </item>
  </channel>
</rss>
