Kubernetes: Resumo dos Principais Conceitos

=Principais Conceitos=

Definição

 * O Kubernetes é um orquestrador de contêineres para provisionar, gerenciar e dimensionar aplicativos. Em outras palavras, o Kubernetes permite gerenciar o ciclo de vida
 * de aplicativos conteinerizados em um cluster de nós (que é uma coleção de máquinas de trabalho).

O que o Kubernets prove?:
 * * Provisonamento e escalonamento de aplicativos
 * * Gerencia o ciclo de vida de aplicativos conteinerizados em um cluster de nós
 * * Organiza a infraestrutura de computação, rede e armazenamento de cargas de trabalho do usuário

Modelo Declarativo

 * O principal paradigma do Kubernetes é seu modelo declarativo. O usuário fornece o estado desejado e o Kubernetes fará o melhor para que isso aconteça. Case você precise
 * de cinco instâncias, não inicie cinco instâncias separadas, mas diga ao Kubernetes que precisa de cinco instâncias, e o Kubernetes irá reconciliar o estado automaticamente.

Arquitetura do Kubernets

 * O Kubernetes é um armazém de dados (etcd). O modelo declarativo é armazenado no etcd como objetos, e isso significa que quando você deseja cinco instâncias de um
 * contêiner, essa solicitação é armazenada no etcd. Um gatilho é disparado para os Controllers para executar uma ação. Em seguida, os controladores reagem ao modelo
 * e tentam agir para atingir o estado desejado, criando os recursos para execução da aplicação.

Ficheiro:K8s architecture.png

Kubernetes resource model

 * O Kubernetes define um recurso para cada finalidade.


 * Pods: o menor e mais simples objeto do Kubernetes. É a unidade de deployment no Kubernetes, que representa uma única instância do aplicativo.
 * Um Pod é uma coleção lógica de um ou mais contêineres, que:
 * São schedulados no mesmo host
 * Compartilham o mesmo network namespace
 * Monte o mesmo storage externo (volumes).


 * ReplicationControllers (rc): é um controlador que faz parte do master-node. Ele garante que o número especificado de réplicas para um Pod esteja em execução em qualquer momento específico.


 * Replica sets (rs): garante que um número especificado de réplicas de pods esteja sendo executado a qualquer momento


 * Deployments: define um estado desejado de um objeto de implantação, através de uma forma declarativa (deployment.yaml) para Pods e ReplicaSets.


 * Config maps: holds configuration data for pods to consume


 * Daemon sets: ensures that each node in the cluster runs this pod


 * Events: provides life cycle events on pods and other deployment objects


 * Endpoints: allows an inbound connections to reach the cluster services


 * Ingress: a collection of rules that allows inbound connections to reach the cluster services
 * Jobs: creates one or more pods and when they complete successfully, the job is marked as completed
 * Node: a worker machine in Kubernetes
 * Namespaces: multiple virtual clusters backed by the same physical cluster
 * Persistent volumes: provides an API for users and administrators to abstract details about how storage is provided from how it is consumed


 * Secrets: holds sensitive information, such as passwords, OAuth tokens, and SSH keys
 * Service accounts: provides an identity for processes that run in a pod
 * Services: an abstraction that defines a logical set of pods and a policy by which to access them, sometimes called a microservice
 * Stateful sets: the workload API object that manages stateful applications

Deploy de uma aplicação no Kubernetes

 * 1) O usuário implanta um novo aplicativo usando o kubectl. O Kubectl envia a solicitação ao API Server.
 * 2) O API Server recebe a solicitação e a armazena no armazenamento de dados (etcd). Depois que a solicitação é gravada no armazenamento de dados, o API Server


 * 1) responde a solicitação.
 * 3) Os Watchers detectam as mudanças de recursos e enviam notificações para o Controller agir sobre essas mudanças.
 * 4) O Controller detecta o novo aplicativo e cria novos pods para corresponder ao número desejado de instâncias. Alterações no modelo armazenado
 * criam ou excluem pods.
 * 5) O Scheduler escolhe o(s) node(s) onde esse novos pods serão executados. O Scheduler modifica o modelo com as informações do node.
 * 6) Um Kubelet em um node detecta um pod com uma atribuição para si mesmo e implanta os contêineres solicitados por meio do tempo de execução do contêiner,
 * por exemplo, Docker. Cada nó observa o armazenamento para ver quais pods ele está designado para executar. O nó executa ações necessárias nos recursos
 * atribuídos a ele, como criar ou excluir pods.
 * 7) O Kubeproxy gerencia o tráfego de rede para os pods, incluindo service discovery e load balance. Kubeproxy é responsável pela comunicação entre os pods que querem interagir.

= Ver também =


 * Docker: Trabalhando com Containers
 * Artigos sobre Cloud
 * Mais Artigos sobre Cloud / WebDev / Tecnologias