Kubernetes
Desenvolvedor | Kubernetes |
Plataforma | Multiplataforma |
Modelo do desenvolvimento | Software livre |
Lançamento | 7 junho 2014[1] |
Versão estável | 1.31.3[2] (21 novembro 2024) |
Idioma(s) | Inglês |
Escrito em | Go |
Sistema operacional | Linux |
Gênero(s) | Orquestração de contêiners |
Licença | Apache License 2.0 |
Estado do desenvolvimento | Ativo |
Página oficial | kubernetes |
Repositório | https://github.com/kubernetes/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.[3][4] Ele foi originalmente projetado pelo Google e agora é mantido pela Cloud Native Computing Foundation.[5] 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. [6]
História
[editar | editar código-fonte]Kubernetes (κυβερνήτης, a palavra grega para "timoneiro" ou "piloto") foi fundado por Joe Beda, Brendan Burns e Craig McLuckie,[7] a quem se juntaram rapidamente outros engenheiros da Google, incluindo Brian Grant e Tim Hockin, e foi anunciado pelo Google em meados de 2014.[8] Seu desenvolvimento e design são fortemente influenciadas pelo sistema Google Borg,[9][10] 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".[11] 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.[12] Juntamente com o lançamento, o Google fez uma parceria com a Linux Foundation para formar a Cloud Native Computing Foundation (CNCF)[13] e ofereceu Kubernetes como uma tecnologia de base.
Em fevereiro de 2016 foi lançado o gerenciador de pacotes Helm.[14]. O Helm é amplamente utilizado, e é parte da CNCF.[15][16]
Conceitos
[editar | editar código-fonte]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.[17][18][19]
Plano de controle
[editar | editar código-fonte]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.[17][18][19]
Plano de dados
[editar | editar código-fonte]O plano de dados pode ser compreendido como um conjunto dos objetos que o constituem, listados abaixo.
Labels e Selectors
[editar | editar código-fonte]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.[17][18][19]
Pods
[editar | editar código-fonte]Um pod é um grupo de containers que compartilham um espaço de rede local. O pod é a unidade de trabalho básica no Kubernetes.[17][18][19]
Nodes
[editar | editar código-fonte]Os Nodes (nodos) são os servidores físicos ou virtuais onde os pods e seus containers rodam.[17][18][19]
- Kubelet é responsável pelo estado de funcionamento de cada nó, garantindo que todos os recipientes no nó sejam saudáveis. Kubelet monitora o estado de uma cápsula e, se não estiver no estado desejado, a cápsula é redirecionada para o mesmo nó.[20] O estado do nó é retransmitido a cada poucos segundos através de mensagens de batimento cardíaco para o primário. Quando o primário detecta uma falha no nó, o Controlador de Replicação observa esta mudança de estado e lança os pods em outros nós saudáveis.[21]
- O Kube-proxy é uma implementação de um proxy de rede e um equilibrador de carga, e suporta a abstração do serviço junto com outras operações de rede. É responsável por rotear o tráfego para o contêiner apropriado com base no IP e número da porta do pedido recebido.
- Um contêiner reside dentro de uma cápsula. O contêiner é o nível mais baixo de um micro-serviço, que abriga a aplicação em funcionamento, bibliotecas e suas dependências. Os contêineres podem ser expostos ao mundo através de um endereço IP externo. A Kubernetes tem apoiado os contêineres Docker desde sua primeira versão. Em julho de 2016, o motor de contêineres rkt foi adicionado[22].
Namespaces
[editar | editar código-fonte]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.[23][17][18][19]
ReplicaSets
[editar | editar código-fonte]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.[17][18][19]
Deployments
[editar | editar código-fonte]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.[17][18][19]
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
DaemonSets
[editar | editar código-fonte]Os DaemonSets definem um ou mais pods que devem rodar em todos os nodos, sempre.[17][18][19]
Services
[editar | editar código-fonte]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.[17][18][19]
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app.kubernetes.io/name: MyApp ports: - protocol: TCP port: 80 targetPort: 9376
Volumes
[editar | editar código-fonte]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.[17][18][19]
ConfigMaps
[editar | editar código-fonte]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.[17][18][19]
Secrets
[editar | editar código-fonte]Secrets são como ConfigMaps, mas são feitos para armazenar dados sensíveis como senhas.[17][18][19]
Helm charts
[editar | editar código-fonte]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.[24][25]
- ↑ «First GitHub commit for Kubernetes». 7 de junho de 2014
- ↑ «Release 1.31.3». 21 novembro 2024. Consultado em 24 novembro 2024
- ↑ «kubernetes/kubernetes». GitHub (em inglês). Consultado em 28 de março de 2017. Cópia arquivada em 21 de abril de 2017
- ↑ «O que é Kubernetes e como ele funciona?». Red Hat. Consultado em 8 de Fevereiro de 2018
- ↑ «What is Kubernetes?». Kubernetes. Consultado em 31 de março de 2017
- ↑ MSV, Janakiram. «Why Kubernetes Developer Ecosystem Needs A PaaS». Forbes (em inglês). Consultado em 16 de maio de 2021
- ↑ «Google Made Its Secret Blueprint Public to Boost Its Cloud» (em inglês)
- ↑ «Google Open Sources Its Secret Weapon in Cloud Computing». Wired
- ↑ «Large-scale cluster management at Google with Borg». Proceedings of the European Conference on Computer Systems (EuroSys)
- ↑ «Borg, Omega, and Kubernetes - ACM Queue». queue.acm.org
- ↑ «Early Stage Startup Heptio Aims to Make Kubernetes Friendly»
- ↑ «As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation». TechCrunch
- ↑ «Cloud Native Computing Foundation»
- ↑ «Release v1.0: Merge pull request #277 from jackgr/master · helm/helm». GitHub (em inglês). Consultado em 16 de maio de 2021
- ↑ «Helm». helm.sh (em inglês). Consultado em 16 de maio de 2021
- ↑ Pandya, Spruha (26 de agosto de 2020). «Why do DevOps engineers love Helm?». Cloud Native Computer Foundation. Consultado em 25 de novembro de 2022
- ↑ a b c d e f g h i j k l m Ellingwood, Justin. «An Introduction to Kubernetes». DigitalOcean. Consultado em 20 de novembro de 2022
- ↑ a b c d e f g h i j k l m «Introduction to Kubernetes (LFS158x)». Linux Foundation. Consultado em 20 de novembro de 2022
- ↑ a b c d e f g h i j k l m «Concepts». Kubernetes. Consultado em 20 de novembro de 2022
- ↑ Marhubi, Kamal (27 de agosto de 2015). «What [..] is a Kubelet?». kamalmarhubi.com. Consultado em 2 de novembro de 2015. Cópia arquivada em 13 de novembro de 2015
- ↑ «Kubernetes Security | Issues and Best Practices | Snyk». snyk.io (em inglês). 26 de julho de 2020. Consultado em 16 de maio de 2021
- ↑ «rktnetes brings rkt container engine to Kubernetes». kubernetes.io. 11 de julho de 2016
- ↑ «Kubernetes environment variables». Qualified.One. 29 de novembro de 2022
- ↑ «Charts». Helm. Consultado em 25 de novembro de 2022
- ↑ «Architechture». Helm. Consultado em 25 de novembro de 2022