Configurações seguras com Secrets

Dando continuidade a nossa série de posts sobre Kubernetes, assim como dito no post sobre ConfigMap, nesse post vamos falar um pouco sobre como mandar uma configuração segura utilizando o recurso Secrets.

Esse recurso, como você já deve estar pensando, é utilizado para guardar dados sensíveis, como senhas, tokens de acesso ou chaves de API que sua aplicação precisa para funcionar, mas que não devem ser armazenadas diretamente no código, no manifesto do Deployment ou em ConfigMap.

Criando uma Secret

Assim como o recurso ConfigMap, Secrets são bem simples de serem criados, já que basicamente só precisamos nos preocupar com o atributo data.

Leia mais »

Qual a finalidade e como utilizar ConfigMap

Depois de muito tempo sem postar nada sobre Kubernetes, nesse post, vamos falar um pouco sobre o recurso ConfigMap.

ConfigMap é o principal recurso para armazenar dados de configuração. De fácil configuração, um ConfigMap é basicamente uma estrutura chave/valor, onde o valor, pode ser inclusive, um arquivo inteiro, como por exemplo, o arquivo de configuração para o nginx.

Quando olhamos para o ConfigMap de forma isolada, ele não parece trazer muito benefícios para um cluster Kubernetes. No entanto, quando o utilizamos junto a um recurso do tipo deploy, os benefícios ficam mais do que evidentes.

Mas antes de entrar nessa parte, vamos primeiro criar um ConfigMap.

ConfigMap

O início de um manifesto do tipo ConfigMap, é praticamente igual a todos os outros do Kubernetes. Em outras palavras, nessa parte, declaramos a apiVersion, kind e metadata.

Leia mais »

O que é e como configurar Taints e Toleration

No último post da série de Kubernetes, vimos como configurar NodeAffinity, PodAffinity e PodAntiAffinity. Nesse post, vamos ver como fazer o “NodeAntiAffinity”, ou seja, como configurar taint nos nodes e toleration nos pods.

Como você já deve ter percebido ao ler o post sobre Affinity e AntiAffinity, assim como o parágrafo anterior, não existe NodeAntiAffinity no Kubernetes. No entanto, caso um node precise ser configurado para repelir pods, o conceito de taint pode ser aplicado.

Embora possa parecer estranho ter um node dentro do cluster que repele pods, essa é uma prática comum ao configurar nodes com hardware específico, por exemplo que tenha GPU, assim como nodes dedicados a certas aplicações.

Taint

Como dito antes, ao contrário do affinity, cuja função é atrair os pods com determinadas labels, a função do taint é repelir pods com base em determinadas propriedades do node.

Leia mais »

O que é e como configurar affinity e anti-affinity no Kubernetes

Embora o Kubernetes faça um ótimo trabalho em escalonar os pods de um cluster, algumas vezes, e SOMENTE algumas vezes (note o negrito, itálico e sublinhado), precisamos controlar como e onde os pods serão escalonados.

Para resolver esses casos, que são (ou pelo menos deveriam ser) raros de acontecer, utilizamos as funcionalidades de Affinity e Anti-Affinity do Kubernetes.

Ao utilizar essas funcionalidades, podemos decidir em quais tipos de nodes os pods serão escalonados, além de especificar que determinados pods sejam escalonados próximos ou distantes uns dos outros.

Também “dizemos” ao Kubernetes qual é a expectativa sobre as condições definidas no Affinity ou Anti-Affinity. Em outras palavras, precisamos dizer se as condições precisam ser atendidas (modo hard), ou se seria bom que elas fossem atendidas (modo soft).

Para o modo hard, utilizamos a chave requiredDuringSchedulingIgnoreDuringExecution. Já para o modo soft, a chave preferredDuringSchedulingIgnoreDuringExecution.

Leia mais »
Namespace Kubernetes

O que é e como criar Namespace no Kubernetes

Dando continuidade aos nossos posts sobre Kubernetes, vamos falar sobre Namespace.

Esse recurso do Kubernetes pode ser utilizado de diversas formas. Algumas pessoas criam namespaces para separar ambientes dentro de um mesmo cluster, enquanto outras preferem criar namespaces para cada time ou produto que a empresa tem.

Definindo Namespace

Independente do propósito, a finalidade dos namespaces sempre será a mesma, particionar o cluster em subdivisões lógicas.

Para ajudar com a imagem mental, imagine que namespaces são como pastas do seu computador, onde você pode definir qualquer divisão que quiser. No entanto, diferente de pastas, onde você consegue colocar uma dentro da outra, no caso dos namespaces, não existem “sub-namespaces”.

Leia mais »

Qual a diferença e quando utilizar Deployment, StatefulSet e DaemonSet

Hoje iniciamos uma nova série aqui no blog, a Kubernetes 101. Nessa série, vou escrever sobre o funcionamento e utilização do Kubernetes do ponto de vista dev. Em outras palavras, não vamos entrar nos detalhes e funcionamentos internos do orquestrador, mas sim como utilizá-lo para executar aplicações.

E para começar essa série, nada melhor do que explicar as diferenças e aplicabilidades dos objetos Deployment, StatefulSet e DaemonSet.

Deployments

Esse tipo de objeto do Kubernetes serve como uma espécie de supervisor. Seu papel principal é registrar algumas informações no Kubernetes, como por exemplo, os nomes das imagens que compõe um Pod e o número de réplicas a serem executadas.

A utilização de objetos do tipo Deployment é recomendada para aplicações que não dependem de um estado, ou seja, aplicações stateless. Se você não está familiarizado com o termo, uma aplicação stateless, basicamente, caso tenha sua execução interrompida, uma nova instância pode ser executada sem nenhuma dependência da execução anterior. Salvo algumas exceções, normalmente esse tipo de aplicação não precisa de um disco para ser executada.

Leia mais »