Como implantar aplicativos no Kubernetes

O Kubernetes é uma das plataformas de automação mais populares para implantação, dimensionamento e operação de contêineres de aplicativos em um cluster de hosts ou nós.

Este artigo discutirá um dos objetos centrais do Kubernetes: a implantação. O objetivo é entender seu comportamento e como criá-lo, atualizá-lo e excluí-lo.

O que é uma implantação?

Uma implantação é um dos objetos usados ​​para iniciar os pods. As práticas recomendadas do Kubernetes incentivam o uso de implantações para aplicativos sem estado. Sem uma implantação, você precisaria criar, atualizar e excluir manualmente vários pods, o que seria tedioso e inviável para muitos pods.

Uma implantação declara um único objeto em YAML que não apenas cria os pods, mas também garante que eles estejam atualizados e em execução. Você também pode dimensionar automaticamente seus aplicativos com facilidade usando uma implantação no Kubernetes. Assim, uma implantação é usada para dimensionar, implantar e reverter versões de seus aplicativos em pods.

Uma implantação também informa ao Kubernetes quantas cópias de um pod queremos executar, e o Kubernetes cuida do resto. O controlador associado criará um ReplicaSet de sua configuração ao criar uma implantação. O controlador associado ao ReplicaSet criará uma série de pods a partir da configuração do ReplicaSet.

As vantagens de usar uma implantação em vez de criar diretamente um ReplicaSet são:

  • Historização do objeto: cada alteração no objeto (através de um “aplicar” ou “editar”) criará um backup da versão anterior.
  • Gerenciamento de rollout e rollback: Você pode voltar atrás em uma configuração em conexão com o ponto anterior.
  8 campainhas inteligentes para sua segurança doméstica

Como criar uma implantação

Existem dois métodos que podemos usar para criar uma implantação do Kubernetes:

Método imperativo

As APIs do Kubernetes permitem uma abordagem mais direta e imperativa sem exigir arquivos de configuração ou manifestos formatados em YAML. Nesta abordagem, tudo o que precisamos fazer é dizer o que queremos que seja feito, e o Kubernetes assumirá a responsabilidade de definir o que deve ser feito para alcançar o resultado esperado.

Para usar o método imperativo, basta usar o comando abaixo:

kubectl create deployment nginx-deployment --image nginx --port=80

Método declarativo

Nesse método, você tem que declarar tudo, e quando você usa esse código, o Kubernetes apenas lê suas definições e cria exatamente como apresentado ou declarado.

Para usar a implantação declarativa, você precisará criar um arquivo YAML.

Arquivo YAML para implantação com o nome new_deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  #Specifies the number of Pod Copies
  replicas: 3
 #Selects the Pod to be managed by the deployment
  selector:
    #Matches the defined labels
    matchLabels:
      deploy: example
  template:
    metadata:
      #Specifies the labels on the Pod.
       labels:
         deploy: example
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.2 

Nesse arquivo YAML, após definir a versão da API do Kubernetes, o tipo de objeto que você está criando e o nome da implantação, há a seção spec. Nesta seção, você primeiro define a chave de réplicas, que indica o número de instâncias de pod que a implantação deve manter ativas.

Use um rótulo seletor para identificar os pods na implantação. Para isso, você pode usar o rótulo de implantação, que informa que todos os pods que correspondem a esses rótulos são agrupados na implantação.

Depois disso, você tem o objeto de modelo em que tem um modelo de pod dentro de sua especificação de implantação. Quando a implantação cria pods, ela os cria usando este modelo. A especificação de um pod regular pode ser encontrada na chave do modelo.

  Como resgatar códigos no Genshin Impact

Com essa implantação, as imagens Nginx com rótulos serão implantadas em pods. Além disso, você também precisa ter cuidado nesse ponto, e o Pod é a unidade de escalabilidade no Kubernetes, então você deve pensar no padrão que deseja usar se colocar vários contêineres no mesmo Pod.

Em seguida, aplique o arquivo Yaml new_deployment.yaml, use o seguinte comando:

kubectl apply -f new_deployment.yaml

Após alguns segundos, você pode obter o status de implantação usando o seguinte:

kubectl get all

Recuperar e atualizar a implantação

Observe que você tem os Pods criados, a implantação e também um Replicaset. Portanto, uma implantação sempre cria e gerencia um Replicaset. Agora você pode usar o seguinte comando para descrever a implantação:

kubectl describe deployment nginx-deployment 

Agora você tem uma descrição completa da implantação. Ele destaca a estratégia usada para criar/reconstruir os pods quando uma atualização foi definida como RollingUpdate.

A estratégia RollingUpdate permite uma migração ordenada de uma versão de um aplicativo para uma versão mais recente. É a estratégia padrão usada no Kubernetes.

Além disso, também temos as seguintes estratégias:

  • Recriar: encerra as instâncias de Pod atualmente em execução e as ‘recria’ com a nova versão;
  • Azul/Verde: Essa estratégia cria dois ambientes separados, mas idênticos. No ambiente azul, o aplicativo está sendo executado como está, enquanto no ambiente verde, o aplicativo está sendo executado como será no futuro;
  • Canary: Uma estratégia de implantação em que um subconjunto de usuários está envolvido no lançamento incremental de um aplicativo ou serviço.

Se você optar por “rolling-update”, poderá configurar seu comportamento sobre o número de réplicas desejado.

  • maxSurge permite indicar (em termos percentuais ou absolutos) quantos Pods ele pode criar além do número de réplicas configuradas atualmente.
  • maxUnavailable permite indicar (em termos percentuais ou absolutos) quantos Pods podem ficar “indisponíveis” durante a atualização, dependendo do número de réplicas configuradas.
  5 melhores sistemas DDI / IPAM para resolver seus problemas de endereçamento IP

Dependendo do seu aplicativo e do seu autoescalador, essas configurações permitirão que você garanta a QoS ou acelere suas implantações.

Em seguida, você deve dimensionar os pods para 10 e alterar a tag de imagem Nginx para a mais recente.

kubectl scale deployment nginx-deployment --replicas=10

Observe que temos 5 contêineres sendo criados e, de 10 Pods, temos 5 disponíveis.

Após alguns segundos, use o seguinte comando:

kubectl get all

Aqui você pode ver que todos os pods foram criados e os contêineres estão em execução.

Excluindo sua implantação

Para excluir uma implantação do Kubernetes, você pode usar os seguintes comandos:

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Helm: Simplifique as implantações

Quando você deseja implantar um aplicativo complexo que usa dezenas ou até centenas de recursos do Kubernetes, a ferramenta kubectl se torna inadequada, razão pela qual a ferramenta Helm foi desenvolvida. O Helm é um gerenciador de pacotes para Kubernetes que se baseia no kubectl e simplifica as implantações de aplicativos.

No vocabulário do Helm, um aplicativo é chamado de release. Ele está associado a um gráfico, ou seja, uma coleção de arquivos de configuração no formato YAML contendo variáveis ​​globais e modelos que descrevem os recursos do Kubernetes.

Conclusão

A implantação é um objeto essencial do Kubernetes. Como uma grande potência implica uma grande responsabilidade, você deve ter cuidado ao configurá-la ou corre o risco de ter comportamentos inesperados. Para ir mais longe com as configurações de implantação, você pode consultar a documentação do Kubernetes.

Você também pode explorar alguns dos melhores tutoriais do Kubernetes para aprender do zero e se tornar um especialista.