<?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>Forem: Daniel</title>
    <description>The latest articles on Forem by Daniel (@daniellcas).</description>
    <link>https://forem.com/daniellcas</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%2F806457%2F38387b46-acdc-466f-802c-5b5eba446837.jpg</url>
      <title>Forem: Daniel</title>
      <link>https://forem.com/daniellcas</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/daniellcas"/>
    <language>en</language>
    <item>
      <title>StatefulSets - Kubernetes (BR)</title>
      <dc:creator>Daniel</dc:creator>
      <pubDate>Sat, 19 Aug 2023 17:23:05 +0000</pubDate>
      <link>https://forem.com/daniellcas/statefulsets-kubernetes-br-2b5l</link>
      <guid>https://forem.com/daniellcas/statefulsets-kubernetes-br-2b5l</guid>
      <description>&lt;h2&gt;
  
  
  O que é um &lt;code&gt;StatefulSets&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;É um objeto de carga de trabalho usado para gerenciar aplicações de demandam ter estado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Para que serve ?
&lt;/h2&gt;

&lt;p&gt;Como um &lt;a href="https://dev.to/daniellcas/deployment-kubernetes-1ja4"&gt;Deployment&lt;/a&gt; um &lt;code&gt;statefulSets&lt;/code&gt; gerencia os &lt;a href="https://dev.to/daniellcas/pods-kubernetes-507k"&gt;pods&lt;/a&gt; baseado em uma especificação no template. &lt;code&gt;StatefulSets&lt;/code&gt; mantém uma identidade fixa para cada um de seus pods, por isso os pods não são trocáveis, são criados da mesma especificação porém cada um identificador persistente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quando devo escolher trabalhar com &lt;code&gt;StatefulSets&lt;/code&gt;?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Caso precise de um armazenamento persistente.&lt;/li&gt;
&lt;li&gt;Identificadores de rede estáveis ​​e exclusivos.&lt;/li&gt;
&lt;li&gt;Implantação e dimensionamento ordenados e elegantes.&lt;/li&gt;
&lt;li&gt;Atualizações contínuas ordenadas e automatizadas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Caso não precise de persistência é aconselhável usar Deployment ou ReplicaSet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitações
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;O armazenamento de um determinado pod deve ser provisionado por um &lt;strong&gt;PersistentVolume&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Ao reduzir/Excluir as replicas, seu armazenamento não sera excluído, isso é feito para garantir a segurança de seus dados.&lt;/li&gt;
&lt;li&gt;O statefulSets não garante enceramento de todos os pods.
recomendado reduzir as replicas para zero, antes da exclusão.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Como criar ?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
  &lt;span class="na"&gt;clusterIP&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;None&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;StatefulSet&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt; &lt;span class="c1"&gt;# tem que combinar com .spec.template.metadata.labels&lt;/span&gt;
  &lt;span class="na"&gt;serviceName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nginx"&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="c1"&gt;# default é 1&lt;/span&gt;
  &lt;span class="na"&gt;minReadySeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt; &lt;span class="c1"&gt;# default é 0&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt; &lt;span class="c1"&gt;# tem que combinar com .spec.selector.matchLabels&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;terminationGracePeriodSeconds&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;registry.k8s.io/nginx-slim:0.8&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
        &lt;span class="na"&gt;volumeMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;www&lt;/span&gt;
          &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/usr/share/nginx/html&lt;/span&gt;
  &lt;span class="na"&gt;volumeClaimTemplates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;www&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;accessModes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ReadWriteOnce"&lt;/span&gt; &lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;storageClassName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-storage-class"&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;storage&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1Gi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No exemplo acima criamos um statefulSets chamado de web, com uma especificação de 3 replicas de contêineres nginx, o &lt;code&gt;volumeClaimTemplates&lt;/code&gt; fornecerá armazenamento estável usando &lt;strong&gt;PersistentVolumes&lt;/strong&gt;, e um &lt;strong&gt;Headless Service&lt;/strong&gt;, chamado nginx, é usado para controlar o domínio da rede.&lt;/p&gt;

&lt;p&gt;Os pods de um statefulSets tem identidade exclusiva, uma identidade de rede estável e armazenamento estável.&lt;/p&gt;




&lt;h2&gt;
  
  
  Máximo de pods indisponíveis.
&lt;/h2&gt;

&lt;p&gt;Você pode controlar o número máximo de pods indisponíveis durante alguma atualização, em &lt;code&gt;.spec.updateStrategy.rollingUpdate.maxUnavailable&lt;/code&gt;. Lembrando que o número tem que ser um absoluto ou percentual. &lt;/p&gt;

&lt;h2&gt;
  
  
  Estratégias de atualização.
&lt;/h2&gt;

&lt;p&gt;No campo &lt;code&gt;.spec.updateStrategy&lt;/code&gt; você pode definir o tipo de estratégia que ira utilizar.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;OnDelete -&amp;gt; nesse caso você deve excluir os pods manualmente para o controlador criar novos pods.&lt;/li&gt;
&lt;li&gt;RollingUpdate -&amp;gt; já nesse caso as atualizações são continuas vem como opção default.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Atualizações contínuas.
&lt;/h2&gt;

&lt;p&gt;Quando o &lt;code&gt;.spec.updateStrategy.type&lt;/code&gt; é definido como &lt;code&gt;RollingUpdate&lt;/code&gt;, o controlador excluirá e recriará cada pod,&lt;br&gt;
atualizando sempre o último para o primeiro, ele vai para o próximo quando o ultimo estiver em execução e pronto. você também pode mudar o tempo em &lt;code&gt;.spec.minReadySeconds&lt;/code&gt;, tempo de atualização entre um pod e outro.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vsh7e3Jj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://loft.sh/images/blog/posts/stateful-set-bp-2.png%3Fnf_resize%3Dfit%26w%3D1040" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vsh7e3Jj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://loft.sh/images/blog/posts/stateful-set-bp-2.png%3Fnf_resize%3Dfit%26w%3D1040" alt="StateFulSet" width="800" height="849"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;Statefulset&lt;/code&gt; gerencia os pods que precisam de um armazenamento persistente, ele utiliza o PersistentVolumeClaim para persistir seus volumes, lembrando que o &lt;code&gt;statefulset&lt;/code&gt; precisa de um gerenciamento próprio do seu serviço como &lt;strong&gt;Headless Service&lt;/strong&gt;.&lt;/p&gt;




&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/statefulset"&gt;Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>Deployment - Kubernetes (BR)</title>
      <dc:creator>Daniel</dc:creator>
      <pubDate>Sat, 12 Aug 2023 13:06:18 +0000</pubDate>
      <link>https://forem.com/daniellcas/deployment-kubernetes-1ja4</link>
      <guid>https://forem.com/daniellcas/deployment-kubernetes-1ja4</guid>
      <description>&lt;h2&gt;
  
  
  Pré-requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://dev.to/daniellcas/pods-kubernetes-507k"&gt;Pods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/daniellcas/replicaset-kubernetes-55gn"&gt;ReplicaSet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que é deployment ?
&lt;/h2&gt;

&lt;p&gt;É um gerenciador de Pods e ReplicaSet, você pode definir o &lt;code&gt;state&lt;/code&gt; desejado e ele trabalhará para atualizar o seu &lt;code&gt;state&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criação de um deployment
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;sintaxe
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx-deployment&lt;/span&gt;
  &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:1.14.2&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O script acima irá criar um deployment que cria um ReplicaSet com 3 replicas como definido, que cria 3 pods que terão o template definido, com a imagem do nginx e o label de app:nginx.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comandos para criar e observar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para aplicar o código acima.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;nome_do_arquivo&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para verificar se o deploment foi criado&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get deployments
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao rodar o &lt;code&gt;kubectl get deployments&lt;/code&gt;, aparecerá os seguintes nomes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NAME&lt;br&gt;
nome do deployment que foi criado no &lt;code&gt;namespace&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;READY&lt;br&gt;
exibe quantas réplicas do aplicativo estão disponíveis. (pronto/desejado)&lt;/p&gt;

&lt;p&gt;UP-TO-DATE&lt;br&gt;
exibe o número de réplicas que foram atualizadas para atingir o &lt;code&gt;state&lt;/code&gt; desejado.&lt;/p&gt;

&lt;p&gt;AVAILABLE&lt;br&gt;
exibe quantas réplicas do aplicativo estão disponíveis.&lt;/p&gt;

&lt;p&gt;AGE&lt;br&gt;
exibe a quantidade de tempo que o aplicativo está em execução.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Para verificar o status de lançamento do deployment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl rollout status deployment/&lt;span class="o"&gt;{&lt;/span&gt;nome_do_deployment&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;ul&gt;
&lt;li&gt;Atualizações de Pods.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O &lt;strong&gt;deployment&lt;/strong&gt; garante que apenas um determinado número de pods fiquem inativos, enquanto eles são atualizados. Por padrão 75% dos pods devem ficar ativos e somente 25% inativos para atualizações. ele primeiro cria novos pods para então começar a destruir os antigos. Ele não mata pods antigos até que um número suficiente de novos pods surjam e não cria novos pods até que um número suficiente de pods antigos tenha sido eliminado.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Caso de criação de deployment's com erros.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para esses casos a gente consegue ter o histórico de alterações do deployment pelo comando a seguir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl rollout &lt;span class="nb"&gt;history &lt;/span&gt;deployment/&lt;span class="o"&gt;{&lt;/span&gt;nome_do_deployment&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;esse comando mostrará o &lt;code&gt;history&lt;/code&gt; de alteração do deployment.&lt;/p&gt;

&lt;p&gt;para voltar a uma versão anterior basta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl rollout undo deployment/&lt;span class="o"&gt;{&lt;/span&gt;nome_do_deployment&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;para voltar a uma versão específica:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl rollout undo deployment/&lt;span class="o"&gt;{&lt;/span&gt;nome_do_deployment&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--revision&lt;/span&gt;&lt;span class="o"&gt;={&lt;/span&gt;numero_da_revisao&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Política de limpeza
&lt;/h2&gt;

&lt;p&gt;Você pode definir um campo na criação do seu deployment para especificar quantos ReplicaSets antigos para esta implantação você deseja reter. por padrão e 10.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;revisionHistoryLimit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;-- Esse e o campo de definição&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Conclusão:
&lt;/h2&gt;

&lt;p&gt;Observe a imagem a seguir:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1400%2F1%2AKtnpIx1twobr16FP7hvAUg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1400%2F1%2AKtnpIx1twobr16FP7hvAUg.png" alt="Deployment kubernetes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basicamente &lt;strong&gt;deployment&lt;/strong&gt; vai fazer o controle de seus ReplicaSets e Pods por você, pode ser configurado da melhor maneira ao seu negócio. Podendo tanto fazer o controle, até definir seus recursos máximos e mínimos. também tem como trabalhar com suas escalas tanto vertical quanto horizontal junto com um serviço de &lt;strong&gt;HorizontalPodAutoscaler&lt;/strong&gt;.&lt;/p&gt;




&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/deployment/" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>ReplicaSet - Kubernetes (BR)</title>
      <dc:creator>Daniel</dc:creator>
      <pubDate>Sat, 15 Jul 2023 15:23:21 +0000</pubDate>
      <link>https://forem.com/daniellcas/replicaset-kubernetes-55gn</link>
      <guid>https://forem.com/daniellcas/replicaset-kubernetes-55gn</guid>
      <description>&lt;p&gt;O que é o &lt;strong&gt;ReplicaSet&lt;/strong&gt; no kubernetes ?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;ReplicaSet&lt;/strong&gt; tem a funcionalidade de manter a quantidade de &lt;strong&gt;pods&lt;/strong&gt; desejada disponível em execução a todo momento, replicando de forma idêntica.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Como funciona o &lt;strong&gt;ReplicaSet&lt;/strong&gt; ?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Na sua definição terá que ter um seletor para funcionar como um identificador de pods, também terá que ter a informação de quantas replicas deseja ter desse determinado recurso.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Assim o &lt;strong&gt;ReplicaSet&lt;/strong&gt; trabalhará para manter o número de replicas, excluindo e criando novos pods de acordo com o template que passar na criação.&lt;/p&gt;




&lt;h3&gt;
  
  
  Entendendo a criação de um &lt;strong&gt;ReplicaSet&lt;/strong&gt;.
&lt;/h3&gt;

&lt;p&gt;Nesse exemplo vamos criar um &lt;strong&gt;ReplicaSet&lt;/strong&gt; que terá 3 replicas de um template com apenas um container de nginx na última versão. usando o seletor &lt;strong&gt;matchLabels&lt;/strong&gt; para encontrar pods com labels iguais.&lt;/p&gt;

&lt;p&gt;Caso não especifique o número de replicas o padrão é 1.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ReplicaSet&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;rsnginx&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; &lt;span class="c1"&gt;# &amp;lt;-- Esse é o campo que define a quantidade de replicas desejadas&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# &amp;lt;-- Esse seria o seletor para dar match com pods que tiverem o mesmo Label implícito. &lt;/span&gt;
      &lt;span class="na"&gt;tier&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;tier&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt; &lt;span class="c1"&gt;# &amp;lt;-- definindo o mesmo Label observado pelo matchLabels&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginxweb&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:latest&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Para criar o &lt;strong&gt;ReplicaSet&lt;/strong&gt; acima basta rodar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;nome_do_seu_arquivo&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Você pode ver seus &lt;strong&gt;ReplicaSets&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl get rs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos inspecionar os &lt;strong&gt;ReplicaSets&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl describe rs/&lt;span class="o"&gt;{&lt;/span&gt;nome_do_seu_replicaSet_criado&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  O &lt;strong&gt;ReplicaSet&lt;/strong&gt; pode adquirir pods sem ser os definidos no template ?
&lt;/h3&gt;

&lt;p&gt;Sim, mas temos algumas regras para esse uso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;1) Se os pods conterem o mesmo Label que o do &lt;strong&gt;ReplicaSet&lt;/strong&gt; porém foram criados depois, o &lt;strong&gt;ReplicaSet&lt;/strong&gt; irá adquirir os pods e encerrar logo em seguida, excederia a quantidade definida na criação do &lt;strong&gt;ReplicaSet&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;2) Se os pods forem criados antes do &lt;strong&gt;ReplicaSet&lt;/strong&gt;, ele iria adquiri-los e criar os faltantes para dar o número  de replicas especificadas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basicamente o &lt;strong&gt;ReplicaSet&lt;/strong&gt; vai trabalhando para manter o número de replicas desejadas. Exemplo:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Wec9lYaz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AlH0EI3FRPNVI5wsxgtx9IQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Wec9lYaz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AlH0EI3FRPNVI5wsxgtx9IQ.png" alt="Exemplo replicaSet" width="800" height="573"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;É possível isolar pods de um &lt;strong&gt;replicaSet&lt;/strong&gt; trocando seu label, assim o &lt;strong&gt;replicaSet&lt;/strong&gt; irá abandonar esse pod e criar outro em seu lugar(se o número de replicas não for alterado).&lt;/p&gt;



&lt;p&gt;Você também consegue utilizar o &lt;strong&gt;replicaSet&lt;/strong&gt; como um alvo de escala horizontal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl autoscale rs &lt;span class="o"&gt;{&lt;/span&gt;nome_do_seu_rs&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="nt"&gt;--max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10 &lt;span class="nt"&gt;--min&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3 &lt;span class="nt"&gt;--cpu-percent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;essa é a maneira mais fácil de criar um &lt;strong&gt;HPA&lt;/strong&gt; com multiplicação máxima de 10 e mínima de 3 com 50% da cpu para a escala, porém você pode optar por um &lt;code&gt;yaml&lt;/code&gt; com esse scale.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Sobre o &lt;strong&gt;replicaSet&lt;/strong&gt;, ele consegue manter os pods ativos de acordo com a configuração de replicas, porém se quiser gerenciar o versionamento de seus pods aconselho a usar &lt;strong&gt;Deployment&lt;/strong&gt;, uma forma melhor e mais completa de se trabalhar com seus pods. Mesmo para casos de se trabalhar com apenas uma replica o ideal é que use um recurso e nunca apenas um pod.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/"&gt;Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>Pods - Kubernetes (BR)</title>
      <dc:creator>Daniel</dc:creator>
      <pubDate>Mon, 10 Jul 2023 22:23:55 +0000</pubDate>
      <link>https://forem.com/daniellcas/pods-kubernetes-507k</link>
      <guid>https://forem.com/daniellcas/pods-kubernetes-507k</guid>
      <description>&lt;p&gt;O que são os pods no kubernetes ?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;É um contexto compartilhado dividindo o mesmo isolamento tanto lógico quanto físico, também é semelhante a um conjunto de containers com volumes e namespaces compartilhados.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Exemplo de criação de um &lt;strong&gt;Pod&lt;/strong&gt; no kubernetes:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Utilizando a última versão do nginx&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Pod&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:latest&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Para rodar o exemplo acima basta utilizar o seguinte comando no mesmo diretório do arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;nome_do_seu_arquivo&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Esse caso de criação de &lt;strong&gt;Pod&lt;/strong&gt; é somente usado para estudos dentro do kubernetes, geralmente você não cria os &lt;strong&gt;Pods&lt;/strong&gt; diretamente, você pode usar outros recursos como &lt;strong&gt;Deployment&lt;/strong&gt;/&lt;a href="https://dev.to/daniellcas/replicaset-kubernetes-55gn"&gt;&lt;strong&gt;ReplicasSet&lt;/strong&gt;&lt;/a&gt; ou para casos de rastrear o estado use &lt;strong&gt;StatefulSet&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como se trabalhar com &lt;strong&gt;Pods&lt;/strong&gt;.
&lt;/h2&gt;

&lt;p&gt;Nós temos duas principais maneiras de se trabalhar com &lt;strong&gt;Pods&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;h3&gt;
  
  
  1/1 - Um &lt;strong&gt;Pod&lt;/strong&gt; para um &lt;strong&gt;container&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;a maneira mais comum de se trabalhar.&lt;br&gt;
  Exemplo: &lt;strong&gt;Pod&lt;/strong&gt; é como um wrapper(embrulho) no container, Kubernetes gerencia &lt;strong&gt;Pods&lt;/strong&gt; em vez de gerenciar os containers diretamente. &lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;h3&gt;
  
  
  1/x - Um &lt;strong&gt;Pod&lt;/strong&gt; para múltiplos &lt;strong&gt;containers&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Para casos onde você tem uma aplicação fortemente acoplada, que precisa compartilhar seus recursos. Exemplo: Um container atende os dados de um &lt;strong&gt;Volume&lt;/strong&gt; enquanto outro container é utilizado para atualizar esses dados.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;strong&gt;Pods&lt;/strong&gt; são na maioria das vezes projetados para serem efêmeros e descartáveis. Os &lt;strong&gt;Pods&lt;/strong&gt; permanecerão ativos até que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Termine a execução.&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;Pod&lt;/strong&gt; seja excluído.&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;Pod&lt;/strong&gt; seja removido por falta de recursos&lt;/li&gt;
&lt;li&gt;Ou caso o &lt;strong&gt;node&lt;/strong&gt; falhe.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Um &lt;strong&gt;Pod&lt;/strong&gt; não é um processo, mas um ambiente para execução de containers, um &lt;strong&gt;Pod&lt;/strong&gt; persiste até ser excluído por motivos listados acima. Por isso reiniciar um container é &lt;strong&gt;diferente&lt;/strong&gt; de reiniciar um &lt;strong&gt;Pod&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Para concluir pense assim, um &lt;strong&gt;Pod&lt;/strong&gt; é um ambiente para execução de containers, olhe a imagem a seguir.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Hb20QowR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kubebyexample.com/sites/default/files/2021-06/pod-to-pod.svg_.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Hb20QowR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kubebyexample.com/sites/default/files/2021-06/pod-to-pod.svg_.png" alt="Exemplo Pods" width="706" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basicamente, containers do mesmo &lt;strong&gt;Pod&lt;/strong&gt; podem se comunicar através do localhost por compartilhar os mesmo recursos de rede, agora para acessar outros &lt;strong&gt;Pods&lt;/strong&gt; precisamos do seus IP's e portas dos containers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Esse foi minha explicação sobre os &lt;strong&gt;Pods&lt;/strong&gt;. Fique atento para os posts explicando os recursos como Deployment, &lt;a href="https://dev.to/daniellcas/replicaset-kubernetes-55gn"&gt;ReplicasSet&lt;/a&gt; e StatefulSet.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;blockquote&gt;
&lt;h2&gt;
  
  
  Referências:
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://kubernetes.io/docs/concepts/workloads/pods/"&gt;Kubernetes.io&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
