Saltar para o conteúdo

Kubernetes

Origem: Wikipédia, a enciclopédia livre.
Kubernetes
Captura de tela
Kubernetes
Desenvolvedor Kubernetes
Plataforma Multiplataforma
Modelo do desenvolvimento Software livre
Lançamento 7 junho 2014; há 10 anos[1]
Versão estável 1.32.0[2]Edit this on Wikidata (11 dezembro 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.io
Repositório https://github.com/kubernetes/kubernetesEdit this on Wikidata

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]

Palestra "Google Container Engine" na Google Cloud Summit

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]

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]

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]

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].

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]

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]

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

Os DaemonSets definem um ou mais pods que devem rodar em todos os nodos, sempre.[17][18][19]

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

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 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 são como ConfigMaps, mas são feitos para armazenar dados sensíveis como senhas.[17][18][19]

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]

Referências

  1. «First GitHub commit for Kubernetes». 7 de junho de 2014 
  2. «Release 1.32.0». 11 dezembro 2024. Consultado em 25 dezembro 2024 
  3. «kubernetes/kubernetes». GitHub (em inglês). Consultado em 28 de março de 2017. Cópia arquivada em 21 de abril de 2017 
  4. «O que é Kubernetes e como ele funciona?». Red Hat. Consultado em 8 de Fevereiro de 2018 
  5. «What is Kubernetes?». Kubernetes. Consultado em 31 de março de 2017 
  6. MSV, Janakiram. «Why Kubernetes Developer Ecosystem Needs A PaaS». Forbes (em inglês). Consultado em 16 de maio de 2021 
  7. «Google Made Its Secret Blueprint Public to Boost Its Cloud» (em inglês) 
  8. «Google Open Sources Its Secret Weapon in Cloud Computing». Wired 
  9. «Large-scale cluster management at Google with Borg». Proceedings of the European Conference on Computer Systems (EuroSys) 
  10. «Borg, Omega, and Kubernetes - ACM Queue». queue.acm.org 
  11. «Early Stage Startup Heptio Aims to Make Kubernetes Friendly» 
  12. «As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation». TechCrunch 
  13. «Cloud Native Computing Foundation» 
  14. «Release v1.0: Merge pull request #277 from jackgr/master · helm/helm». GitHub (em inglês). Consultado em 16 de maio de 2021 
  15. «Helm». helm.sh (em inglês). Consultado em 16 de maio de 2021 
  16. Pandya, Spruha (26 de agosto de 2020). «Why do DevOps engineers love Helm?». Cloud Native Computer Foundation. Consultado em 25 de novembro de 2022 
  17. 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 
  18. 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 
  19. a b c d e f g h i j k l m «Concepts». Kubernetes. Consultado em 20 de novembro de 2022 
  20. 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 
  21. «Kubernetes Security | Issues and Best Practices | Snyk». snyk.io (em inglês). 26 de julho de 2020. Consultado em 16 de maio de 2021 
  22. «rktnetes brings rkt container engine to Kubernetes». kubernetes.io. 11 de julho de 2016 
  23. «Kubernetes environment variables». Qualified.One. 29 de novembro de 2022 
  24. «Charts». Helm. Consultado em 25 de novembro de 2022 
  25. «Architechture». Helm. Consultado em 25 de novembro de 2022 

Ligações externas

[editar | editar código-fonte]