Então, o que é um pod no Kubernetes?

Nota perev. : Este artigo continua o ciclo de materiais de um escritor técnico do Google, trabalhando na documentação de Kubernetes (Andrew Chen) e diretor de engenharia de software da SAP (Dominik Tornow). Seu objetivo é explicar de forma clara e clara o básico do Kubernetes. Da última vez que traduzimos um artigo sobre alta disponibilidade , agora falaremos sobre um conceito tão básico no Kubernetes, como pod.



O Kubernetes é um mecanismo de orquestração de contêiner projetado para executar aplicativos em contêiner em vários nós, geralmente chamado de cluster. Nestas publicações, usamos uma abordagem de modelagem de sistemas para melhorar o entendimento do Kubernetes e seus conceitos subjacentes. Recomenda-se aos leitores que já tenham um entendimento básico do Kubernetes.

Os pods são os componentes básicos do Kubernetes, mas mesmo usuários experientes do Kubernetes nem sempre conseguem explicar o que é.

Esta publicação oferece um modelo de pensamento conciso que esclarece as características definidoras dos pods do Kubernetes. Por uma questão de brevidade, tive que omitir alguns outros recursos dos Pods, como testes de disponibilidade e disponibilidade , compartilhamento de recursos (incluindo o compartilhamento de namespace recentemente exibido - aprox. Transl. ) , Trabalhar com a rede.

Definição de


Um pod é uma solicitação para executar um ou mais contêineres em um único nó.

Um pod é definido pela apresentação de uma solicitação para executar um ou mais contêineres em um único nó, e esses contêineres compartilham acesso a recursos como volumes de armazenamento e a pilha de rede.

No entanto, na vida cotidiana, o termo "pod" pode ser usado no sentido dessa solicitação e no sentido da coleção de contêineres iniciados em resposta à solicitação. Portanto, na publicação, usaremos a palavra "pod" quando falarmos sobre a solicitação e, para o segundo caso, usar a expressão "conjunto de contêineres".

Os pods são considerados os blocos de construção básicos do Kubernetes porque todas as cargas de trabalho no Kubernetes - por exemplo, Implantações , ReplicaSets e Jobs - podem ser expressas como pods.

Pod é o único objeto no Kubernetes que faz com que os contêineres sejam executados. Sem vagem - sem recipiente!


Esquema 1. Implantação, ReplicaSet, pod e contêineres

Arquitetura Kubernetes



Esquema 2. Pods, Scheduler e Kubelet

Nesta ilustração, os objetos e componentes correspondentes são destacados. Os pods são representados como objetos de pod do Kubernetes e trabalham com eles:

  • Programador
  • Kubelet.


Objetos Kubernetes



Figura 3. Objetos Kubernetes

Esta ilustração mostra os objetos do Kubernetes responsáveis ​​por trabalhar com o pod:

  • o objeto de pod real (Pod Object) ;
  • Objeto de ligação
  • Objeto de nó

O objeto Pod define o conjunto de contêineres que serão iniciados e a política de reinicialização desejada no caso de uma falha do contêiner, além de monitorar o estado de inicialização.

O objeto de ligação vincula o objeto de pod ao objeto de , ou seja, atribui um pod ao host para lançamento posterior.

Objeto de nó representa um nó em um cluster Kubernetes.

Processamento de pod



Esquema 4. Processando pod'a

Quando um pod é criado por um usuário ou controlador como o ReplicaSet Controller ou Job Controller , o Kubernetes processa o pod em duas etapas:

  • O planejador está planejando um pod,
  • Kubelet lança o casulo.

Planejamento de pods



Figura 5. Ciclo de controle do agendador do Kubernetes

A tarefa do Agendador no Kubernetes é agendar um pod, ou seja, atribuir a ele um nó adequado no cluster Kubernetes para inicialização subsequente.


Associando um objeto de pod a um objeto de nó

Um pod é atribuído a um nó (ou se liga a ele) se e somente se houver um objeto de ligação que possui:

  • o espaço para nome é igual ao espaço para nome do pod,
  • o nome é igual ao nome do pod,
  • o tipo de destino é igual a Node ,
  • o nome do destino é igual ao nome do nó.

(Os amantes da aventura podem dar uma olhada na essência do Kelsey Hightower no GitHub, intitulada " Criando e agendando um pod manualmente " , um guia passo a passo sobre como criar manualmente um objeto de ligação.)

Lançamento do pod



Diagrama 6. Ciclo de controle de Kubelet

A tarefa do Kubelet é iniciar o pod, o que significa essencialmente lançar um conjunto de contêineres de pod. O lançamento do pod Kubelet ocorre em duas fases: inicialização e estágio principal.

Como regra, um conjunto de contêineres durante a fase de inicialização realiza trabalhos preparatórios, como a preparação do diretório e da estrutura de arquivos necessários. E o conjunto de contêineres na fase principal já executa as tarefas "mais importantes".

Na vida cotidiana, embora isso não esteja totalmente correto, o termo “pod” geralmente implica um conjunto de contêineres na fase principal ou um significado ainda mais restrito do contêiner “mais importante” da fase principal.


Esquema 7.1. Iniciando um pod, fase de inicialização (init) e fase principal (principal)

Durante a inicialização, o Kubelet inicia sequencialmente os contêineres de acordo com as especificações do .Spec.InitContainers e na ordem especificada na lista. Para iniciar o pod com sucesso e levando em consideração a política de reinicialização, seus contêineres init devem iniciar e concluir com êxito.

Durante a fase principal, a Kubelet lança simultaneamente os contêineres de acordo com as especificações do .Spec.Containers . Aqui, para o lançamento bem-sucedido do pod e levando em consideração a política de reinicialização, seus principais contêineres devem ser iniciados e concluídos com êxito ou funcionar por tempo ilimitado.


Esquema 7.2. Pod de execução, detalhes deste processo

No caso de uma falha do contêiner, quando o contêiner parar de funcionar com um código de saída diferente de zero (0), o Kubelet poderá reiniciar o contêiner de acordo com a política de reinicialização do pod. Esta política tem um dos seguintes significados: Always , OnFailure , Never .

A política de reinicialização do pod possui semântica diferente para contêineres init e contêineres principais: se o lançamento de contêineres init deve levar à conclusão, os contêineres principais podem não terminar.


Política de reinicialização para contêiner init

O contêiner inicial será reiniciado (ou seja, implicará o lançamento de um novo contêiner com a mesma especificação) após a conclusão de seu trabalho somente se as seguintes condições forem atendidas:

  • O código de saída do contêiner relata um erro e
  • OnFailure política de reinicialização OnFailure é Always ou OnFailure .


Política de reinicialização para o contêiner principal

O contêiner principal será reiniciado (ou seja, implica o lançamento de um novo contêiner com a mesma especificação) após a conclusão de seu trabalho somente se as seguintes condições forem atendidas:

  • política de reinicialização definida como Always ou
  • A política de reinicialização é definida como OnFailure e o código de saída do contêiner relata um erro.


Diagrama 8. Exemplo de uma linha do tempo com um ponto vermelho, simbolizando uma falha do contêiner

A ilustração mostra uma possível linha do tempo de lançamento do pod com duas especificações para contêineres init e duas especificações para contêineres principais. Também mostra a criação (de acordo com a política de reinicialização) do novo contêiner Main Container 1.2 após um problema com o lançamento do Main Container 1.1 .

Fases do pod



Diagrama 9. Interação do Kubelet com o objeto pod e o tempo de execução do contêiner (tempo de execução do contêiner)

O Kubelet recebe as especificações de pod para .Spec.InitContainers e .Spec.Containers , inicia o conjunto especificado de contêineres e atualiza os valores de .Status.InitContainerStatuses para .Status.InitContainerStatuses e .Status.ContainerStatuses .

O Kubelet .Status.ContainerStatuses e .Status.ContainerStatuses em um único valor - .Status.Phase .

A fase do pod é uma projeção do estado dos contêineres a partir de um conjunto de contêineres, depende de:

  • estados e códigos de saída dos contêineres init,
  • estados e códigos de saída dos principais contêineres.


Esquema 10. Fases da cápsula

Pendente



Fase pendente

Um pod está em fase de espera se e somente se:

  • nenhum dos contêineres do pod init está no estado Terminated com um erro ( Failure );
  • todos os principais contêineres de pod estão no estado Waiting .

Running



Fase de execução

O pod está na fase de trabalho se e somente se:

  • todos os contêineres do pod init estão no estado Terminated com êxito;
  • pelo menos um contêiner de pod principal está no estado Running ;
  • nenhum dos contêineres do pod principal está no estado Terminated com uma Failure .

Êxito



Fase de Sucesso

O pod está em uma fase de sucesso se e somente se:

  • todos os contêineres do pod init estão no estado Terminated com êxito;
  • todos os principais contêineres de pod estão no estado Terminated com êxito.

Falha



Fase de falha

Um pod está em uma fase de falha se e somente se:

  • todos os contêineres de pod estão no estado Terminated ;
  • pelo menos um dos contêineres de pod está no estado Terminated com um erro ( Failure ).

Desconhecido


Além das fases descritas acima, o pod pode estar em uma fase desconhecida, o que indica a impossibilidade de determinar sua fase atual.

Coleta de lixo para vagens



Diagrama 11. Ciclo de controle do coletor de lixo de pod

Após o planejamento e o lançamento do pod, um controlador especial no Kubernetes - o Controlador de Coletor de Lixo do Pod - é responsável por remover os objetos do pod do Kubernetes Object Store .

Conclusão


Pod é o componente básico do Kubernetes: pod é definido como a representação de uma solicitação para iniciar um ou mais contêineres em um único nó. Após a criação do pod, o Kubernetes o processa em dois estágios: primeiro, o Agendador agenda o pod e, em seguida, o Kubelet o lança. Ao longo de seu ciclo de vida, o pod passa por diferentes fases, relatando o status - ou, mais precisamente, o estado de seu conjunto de contêineres - ao usuário e ao sistema.

PS do tradutor


Leia também em nosso blog:

Source: https://habr.com/ru/post/pt427819/


All Articles