Kubernetes

Kubernetes
Captura de tela
Kubernetes
Desenvolvedor Kubernetes
Plataforma Multiplataforma
Modelo do desenvolvimento Software livre
Lançamento 7 junho 2014; há 9 anos[1]
Versão estável 1.30.0[2]Edit this on Wikidata (17 abril 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]

História

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]

Conceitos

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

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

O plano de dados pode ser compreendido como um conjunto dos objetos que o constituem, listados abaixo.

Labels e Selectors

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

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

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

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

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

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

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

Services

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

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

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

Secrets são como ConfigMaps, mas são feitos para armazenar dados sensíveis como senhas.[17][18][19]

Helm charts

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.30.0». 17 abril 2024. Consultado em 18 abril 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

  • Sítio oficial
  • kubernetes no GitHub
  • Por que Kubernetes de código aberto, nativo da nuvem são importantes?
  • HPE Container Platform, uma plataforma de contêiner unificada criada em Kubernetes de código aberto
  • v
  • d
  • e
Software de virtualização
Virtualização de hardware
(hipervisores)
Nativo
  • Adeos
  • CP/CMS
  • Hyper-V
  • KVM
    • Red Hat Enterprise Virtualization
  • LDoms / Oracle VM Server for SPARC
  • Logical Partition (LPAR)
  • LynxSecure
  • PikeOS
  • Proxmox VE
  • SIMMON
  • VMware ESXi
    • VMware vSphere
    • vCloud
  • VMware Infrastructure
  • Xen
    • Oracle VM Server for x86
    • XenClient
  • XtratuM
  • z/VM
Hospedado
Especializado
  • Basilisk II
  • bhyve
  • Bochs
  • Cooperative Linux
  • DOSBox
  • DOSEMU
  • PCem
  • PikeOS
  • SheepShaver
  • SIMH
  • Windows on Windows
    • Virtual DOS machine
  • Win4Lin
Independente
Ferramentas
  • Ganeti
  • oVirt
  • System Center Virtual Machine Manager
  • Virtual Machine Manager
Virtualização em nível
de sistema operacional
Contêineres de SO
  • FreeBSD jail
  • iCore Virtual Accounts
  • Linux-VServer
  • lmctfy
  • LXC
  • OpenVZ
  • Solaris Containers
  • Workload Partitions
Contêineres de Aplicativo
  • Docker
  • rkt
Recursos do núcleo
  • cgroups
  • Namespaces
  • seccomp
Orquestração
Virtualização de desktops
Virtualização de aplicativos
Virtualização de rede
  • Distributed Overlay Virtual Ethernet (DOVE)
  • NVGRE
  • Open vSwitch
  • Virtual security switch
  • Virtual Extensible LAN (VXLAN)