O que o Kubernetes realmente faz? [fechadas]

134

O Kubernetes é cobrado como um agendador / orquestrador de cluster de contêineres, mas não faço ideia do que isso significa. Depois de ler o site do Kubernetes e o wiki (vago) do GitHub, o melhor que posso dizer é que, de alguma forma, ele descobre quais VMs estão disponíveis / são capazes de executar seu contêiner Docker e as implanta lá. Mas esse é apenas o meu palpite, e não vi palavrões concretos na documentação deles para apoiar isso.

Então, o que é o Kubernetes exatamente e quais são alguns problemas específicos que ele resolve?

smeeb
fonte
Como todos os projetos do mundo dos estivadores (kubernetes / frota / enxame / etc) têm dificuldades em explicar o que fazem e o que os diferencia, acho que uma pergunta um tanto insana é tudo o que os usuários podem fornecer ... pergunta "qual é a diferença entre frota e kubernetes" e a resposta é "você pode usar a frota para lançar kubernetes". Vadio. ;-)
Torsten Bronger
3
Eu acho que é uma pergunta perfeitamente válida e aponta algumas falhas no documento. Fechá-lo como muito amplo é um desserviço. A melhor abordagem para mim foi simplesmente fazer o download da base de código do k8s e procurar por exemplo, para descobrir o que era um pod. Isso me ajudou muito.
Beezer

Respostas:

113

O objetivo do Kubernetes é facilitar a organização e o agendamento de seu aplicativo em uma frota de máquinas. Em um nível alto, é um sistema operacional para seu cluster.

Basicamente, permite que você não se preocupe com a máquina específica em seu datacenter em que cada aplicativo é executado. Além disso, fornece primitivas genéricas para verificar a integridade e replicar seu aplicativo nessas máquinas, além de serviços para conectar seu aplicativo a microsserviços, de forma que cada camada do seu aplicativo seja dissociada de outras, para que você possa dimensioná-las / atualizá-las / mantê-las. independentemente.

Embora seja possível fazer muitas dessas coisas na camada de aplicativos, essas soluções tendem a ser pontuais e quebradiças, é muito melhor ter uma separação de preocupações, onde um sistema de orquestração se preocupa em como executar seu aplicativo e você se preocupa com o código que compõe seu aplicativo.

brendan
fonte
3
Obrigado @brendan (+1) - sua resposta definitivamente ajuda. Porém, uma pergunta de acompanhamento: não é isso que o Apache Mesos faz? Kubernetes e Mesos são concorrentes entre si? Caso contrário, eles poderiam ser usados ​​em conjunto (e se sim, como)? Obrigado novamente!
smeeb
2
@smeeb Mesos e Kubernetes se complementam (o último é suportado como uma estrutura Mesos). Mesos fornece gerenciamento de recursos mais sofisticado. Em outras palavras, o Kubernetes permite que o Mesos decida qual host será usado, com base na capacidade disponível. O Mesos suporta outras estruturas. Se você ler os documentos, verá que o Marathon é outra maneira de iniciar contêineres em um cluster de servidores gerenciados pelo Mesos.
Mark O'Connor
18

Como você lê na página do Github :

O Kubernetes é um sistema de código aberto para gerenciar aplicativos em contêineres em vários hosts, fornecendo mecanismos básicos para implantação, manutenção e dimensionamento de aplicativos.

Kubernetes é:

lean: lightweight, simple, accessible
portable: public, private, hybrid, multi cloud
extensible: modular, pluggable, hookable, composable
self-healing: auto-placement, auto-restart, auto-replication

O Kubernetes tem uma década e meia de experiência no Google executando cargas de trabalho de produção em grande escala, combinadas com as melhores idéias e práticas da comunidade.

Para mim, o Kubernetes é uma ferramenta de orquestração de contêineres do Google. Devido ao seu design, você pode implementar a compatibilidade com qualquer mecanismo de contêiner, mas acho que agora está limitado ao Docker. Existem alguns conceitos importantes em sua arquitetura:

O Kubernetes trabalha com os seguintes conceitos:

Clusters são os recursos de computação sobre os quais seus contêineres são construídos. Kubernetes pode rodar em qualquer lugar! Consulte os Guias de Introdução para obter instruções sobre uma variedade de serviços.

Os pods são um grupo de contêineres do Docker com volumes compartilhados. Elas são as menores unidades implementáveis ​​que podem ser criadas, agendadas e gerenciadas com o Kubernetes. Os pods podem ser criados individualmente, mas é recomendável que você use um controlador de replicação mesmo se estiver criando um único pod. Mais sobre pods.

Os controladores de replicação gerenciam o ciclo de vida dos pods. Eles garantem que um número especificado de pods esteja sendo executado a qualquer momento, criando ou eliminando pods, conforme necessário. Mais sobre controladores de replicação.

Os serviços fornecem um nome e endereço único e estável para um conjunto de pods. Eles agem como balanceadores de carga básicos. Mais sobre serviços.

Os rótulos são usados ​​para organizar e selecionar grupos de objetos com base em pares chave: valor. Mais sobre rótulos.

Portanto, você tem um grupo de máquinas que forma um cluster em que seus contêineres são executados. Você também pode definir um grupo de contêineres que fornecem um serviço, da mesma forma que você faz com outras ferramentas como fig (por exemplo: o webapp pod pode ser um servidor rails e um banco de dados do postgres). Você também tem outras ferramentas para garantir vários contêineres / pods de um serviço em execução ao mesmo tempo, um armazenamento de valores-chave, um tipo de balanceador de carga interno ...

Se você sabe algo sobre coreos, é uma solução muito semelhante, mas do Google. Algo Kubernetes tem uma boa integração com o Google Cloud Engine.

Javier Cortejoso
fonte
2
Obrigado @jcortejoso (+1) - no entanto, tenho algumas perguntas a seguir, se você não se importa: (1) você diz que o Kubernetes é semelhante ao CoreOS, mas do Google. Isso implica que o Kubernetes e o CoreOS resolvam o mesmo problema. Mas no [próprio site do Kubernetes] (), ele diz que você pode instalar o Kubernetes no CoreOS. Então, qual é?!? O Kubernetes é igual ao CoreOS ou o Kubernetes é executado no CoreOS e resolve um problema específico?
smeeb
1
Também (2) ainda não estou vendo o valor na "orquestração" do Kubernetes aqui. Você afirma que pode usar o Kubernetes para definir um grupo de contêineres que fornecem um serviço, o que me faz pensar em duas coisas separadas: (2a) eu não poderia simplesmente fazer esse tipo de cluster na camada de aplicativo e colocar meu aplicativo atrás de um balanceador de carga nginx? E (2b) isso é tudo o que há para "orquestração"? Para mim, novamente, parece que o balanceamento de carga pode ser facilmente alcançado na camada de aplicativos. Pensamentos? Mais uma vez obrigado pela maravilhosa resposta!
smeeb
1
Se o kubernetes é "leve", eu me pergunto qual seria a solução gorda.
Torsten Bronger
@smeeb Não estou familiarizado com o nginx (perdoe minha ingenuidade), mas não acho que o nginx reinicie um servidor que tenha travado; e se uma máquina (ou todo o datacenter) ficar inoperante, o nginx não reiniciará seu aplicativo em uma máquina diferente. O kubernetes garantirá que você sempre mantenha n número de "pods" em algum lugar, e isso realmente não importa onde ou como.
kgreenek
10

O Kubernetes fornece muitas das mesmas funcionalidades das APIs de infraestrutura como serviço, mas destinadas a contêineres agendados dinamicamente, em vez de máquinas virtuais, e como sistemas de plataforma como serviço, mas com maior flexibilidade, incluindo:

  • montagem de sistemas de armazenamento,
  • distribuir segredos,
  • verificação de integridade do aplicativo,
  • replicar instâncias de aplicativos,
  • escala automática horizontal,
  • nomeação e descoberta,
  • balanceamento de carga,
  • atualizações contínuas,
  • monitoramento de recursos,
  • acesso e ingestão de logs,
  • suporte para introspecção e depuração e
  • identidade e autorização.

Se você já usa outros mecanismos para descoberta de serviços, distribuição secreta, balanceamento de carga, monitoramento etc., é claro que pode continuar a usá-los, mas nosso objetivo é facilitar a transição para o Kubernetes dos sistemas IaaS e PaaS existentes, fornecendo este funcionalidade.

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/#why-do-i-need-kubernetes-and-what-can-it-do

briangrant
fonte