| Kubernetes | |
|---|---|
| Desenvolvedor | Kubernetes |
| Lançamento inicial | 7 de junho de 2014 |
| Lançamento estável | |
| Repositório | https://github.com/kubernetes/kubernetes |
| Escrito em | Go |
| Sistema operacional | Linux |
| Plataforma | Multiplataforma |
| Disponível em | Inglês |
| Tipo | Orquestração de contêiners |
| Licença | Apache License 2.0 |
| Website | kubernetes |
Kubernetes (comumente estilizado como K8s) é um sistema de orquestração de contêineres open-source que automatiza a implantação, o dimensionamento e a gestão de aplicações em contêineres. Ele foi originalmente projetado pelo Google e agora é mantido pela Cloud Native Computing Foundation. Ele funciona com uma variedade de ferramentas de conteinerização, incluindo Docker.
Muitos serviços de nuvem oferecem uma plataforma baseada em Serviço (Paas ou Iaas), onde o kubernetes pode ser implantado sob serviço gerenciado. Muitos fornecedores também provém sua própria marca de distribuição de kubernetes.

Kubernetes (κυβερνήτης, a palavra grega para "timoneiro" ou "piloto") foi fundado por Joe Beda, Brendan Burns e Craig McLuckie, a quem se juntaram rapidamente outros engenheiros da Google, incluindo Brian Grant e Tim Hockin, e foi anunciado pelo Google em meados de 2014. Seu desenvolvimento e design são fortemente influenciadas pelo sistema Google Borg, e muitos dos principais contribuintes do projeto trabalharam anteriormente em Borg. O codinome original para Kubernetes dentro do Google era Project Seven, uma referência aos personagens de Star Trek Sete de Nove que é um Borg "amigável". Os sete raios na roda no logotipo do Kubernetes são uma referência ao codinome.
Kubernetes v1.0, foi lançado em 21 de julho de 2015. Juntamente com o lançamento, o Google fez uma parceria com a Linux Foundation para formar a Cloud Native Computing Foundation (CNCF) e ofereceu Kubernetes como uma tecnologia de base.
Em fevereiro de 2016 foi lançado o gerenciador de pacotes Helm.. O Helm é amplamente utilizado, e é parte da CNCF.
No Kubernetes o estado do cluster é definido pelo utilizador, sendo função do serviço de orquestração atingir e manter o estado desejado, dentro das limitações impostas pelo utilizador. O Kubernetes pode ser entendido como dividido em dois planos - o plano de controle, que realiza a orquestração global do sistema, e o plano de dados, onde residem os containers.
Os principais componentes do plano de controle são o etcd, um banco de dados distribuído que armazena as configurações globais do cluster, o API server, um serviço de borda para interação com os demais componentes, além do controller manager e do scheduler, que realizam tarefas administrativas relacionadas à orquestração do cluster. O API server suporta registro de auditoria para monitoramento de segurança e análise forense.
O plano de dados pode ser compreendido como um conjunto dos objetos que o constituem, listados abaixo.
Labels (rótulos) são nomes associados a um recurso, como o nome de um pod. Selectors (seletores) são expressões que selecionam recursos baseado em alguma regra, como todos recursos com label igual a determinado valor.
Um pod é um grupo de containers que compartilham um espaço de rede local. O pod é a unidade de trabalho básica no Kubernetes.
Os Nodes (nodos) são os servidores físicos ou virtuais onde os pods e seus containers rodam.
Os namespaces são divisões lógicas dos demais recursos do plano de dados, podendo ser usados para separar, por exemplo, ambiente de testes do de produção.
Os ReplicaSets são um recurso utilizado para definir o número de replicas de um ou mais pods, identificados através de um seletor associado ao ReplicaSet.
Um Deployment define o estado desejado de Pods e ReplicaSets. No exemplo abaixo, o Deployment define um ReplicaSet com três replicas, para os Pods cujo rótulo seja encontrado através do seletor definido.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Os DaemonSets definem um ou mais pods que devem rodar em todos os nodos, sempre.
Um Service (serviço) no Kubernetes é uma entidade lógica constituida de um ou mais pods, selecionados através de um seletor. O serviço possui um endereço de IP associado a si, publicado através do serviço de DNS do Kubernetes, permitindo assim a sua descoberta por demais serviços do cluster ou externos a ele. Além disso, o Kubernetes realiza o balanceamento das conexões recebidas entre os pods que constituem esse serviço. No exemplo abaixo um serviço é definido, expondo uma porta para os pods selecionados através do seletor.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- protocol: TCP
port: 80
targetPort: 9376
O armazenamento dos containers é efêmero, isto é, ele deixa de existir quando os containers param de rodar. Os Volumes no Kubernetes são unidades lógicas de armazenamento que podem ser efêmeras ou persistentes, e que são acessíveis por todos containers de um pod.
ConfigMaps são objetos lógicos que armazenam informação no formato chave-valor, informações essas que podem ser acessadas através de variáveis de ambientes, arquivos em um volume, ou através de uma API.
Secrets são como ConfigMaps, mas são feitos para armazenar dados sensíveis como senhas.
Helm charts são pacotes para o Kubernetes, e Helm é o software que os gerencia. Os pacotes (charts) são nada mais nada menos que arquivos no formato YML dispostos em uma certa estrutura de diretórios, e que descrevem objetos com os descritos nas seções acima, além de um arquivo Chart.yml que descreve o pacote em si. O Helm por sua vez faz a gerência destes pacotes, como controle de versão e empacotamento, interação com o Kubernetes para aplicar os recursos descritos no pacote, entre outros.
url.1.|título= (ajuda)