{"id":534,"date":"2026-09-06T00:55:22","date_gmt":"2026-09-06T03:55:22","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/a-historia-do-kubernetes\/"},"modified":"2026-09-08T07:57:21","modified_gmt":"2026-09-08T10:57:21","slug":"a-historia-do-kubernetes","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/a-historia-do-kubernetes\/","title":{"rendered":"A hist\u00f3ria do Kubernetes: o leme do Borg"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro ao tim\u00e3o do navio com os cont\u00eaineres organizados no conv\u00e9s e o leme do Kubernetes\" src=\"\/wp-content\/uploads\/2026\/09\/kubernetes-historia-v2.webp\" width=\"1052\" height=\"652\" \/><\/p>\n<p>Em 6 de junho de 2014 Joe Beda fez o primeiro commit p\u00fablico do que viraria o Kubernetes: 250 arquivos, 47.501 linhas de Go, Bash e Markdown. Quatro dias depois Eric Brewer anunciou o projeto no DockerCon. Um ano depois, em 21 de julho de 2015, saiu a 1.0 \u2014 e o Google anunciou que doaria o c\u00f3digo \u00e0 rec\u00e9m-criada Cloud Native Computing Foundation. Doze anos depois, o Kubernetes 1.37.0 (26 de agosto de 2026), apelido Garhwal, ainda \u00e9 o jeito padr\u00e3o de orquestrar container em produ\u00e7\u00e3o.<\/p>\n<p><!-- more --><\/p>\n<h2>Anos 2000: Borg, Omega e um prot\u00f3tipo em Java<\/h2>\n<p>Antes do leme existia o Borg. Desde meados dos anos 2000 o Google j\u00e1 rodava jobs em um cluster interno que ningu\u00e9m de fora via. O Omega (2013) tentou o pr\u00f3ximo passo: um scheduler mais compartilhado, menos monolito. Nada disso sa\u00eda do campus. L\u00e1 fora, em 2013, o mundo de nuvem ainda era script bash, imagem de VM imut\u00e1vel \u00e0 la Netflix e pouqu\u00edssima orquestra\u00e7\u00e3o de container.<\/p>\n<p>Quem mudou o recorte foi o <a href=\"\/es\/2026\/09\/a-historia-do-docker\/\">Docker<\/a>. Brendan Burns, Craig McLuckie e Joe Beda, no Google Cloud, viram o runtime de uma m\u00e1quina s\u00f3 e entenderam o buraco: faltava o orquestrador da frota. Burns fez um prot\u00f3tipo em Java. Reescreveram em <a href=\"\/es\/2026\/09\/a-historia-da-linguagem-go\/\">Go<\/a>. Vieram Ville Aikas, Tim Hockin, Dawn Chen, Brian Grant e Daniel Smith. Pod ainda se chamava Task; o nome mudou dois dias antes do an\u00fancio, no commit de 8 de junho.<\/p>\n<p>O nome de c\u00f3digo interno, dado por Burns, era <em>Seven of Nine<\/em>: a Borg mais acess\u00edvel de <em>Star Trek<\/em>. Da\u00ed o hept\u00e1gono do logo: sete lados, sete raios no leme. Kubernetes, em grego, \u00e9 o timoneiro \u2014 o piloto do navio. k8s \u00e9 o mesmo truque do i18n: oito letras no meio.<\/p>\n<h2>Junho de 2014: o commit e o DockerCon<\/h2>\n<p>O primeiro commit p\u00fablico \u00e9 de 6 de junho de 2014, 16:40:48 no hor\u00e1rio do Pac\u00edfico. Beda limpou o reposit\u00f3rio para o lan\u00e7amento; o trabalho anterior j\u00e1 existia. Em 10 de junho Brewer subiu no palco do primeiro DockerCon. O recado era simples: Docker empacota; falta algu\u00e9m para espalhar o pacote em dezenas de m\u00e1quinas, replicar, descobrir servi\u00e7o e curar o que morre.<\/p>\n<p>O \u201corquestrador m\u00ednimo vi\u00e1vel\u201d que eles queriam tinha quatro pe\u00e7as: replica\u00e7\u00e3o, balanceamento e descoberta de servi\u00e7o, health check com autorreparo, e um scheduler que trata a frota como um pool. O resto \u2014 Ingress, CRD, Operators, sidecar \u2014 veio depois, da comunidade.<\/p>\n<div style=\"position:relative;padding-bottom:56.25%;height:0;overflow:hidden;margin:1.5em 0\">\n<iframe src=\"https:\/\/www.youtube.com\/embed\/YrxnVKZeqK8\" title=\"Eric Brewer anuncia o Kubernetes no DockerCon 2014\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen style=\"position:absolute;top:0;left:0;width:100%;height:100%;border:0\"><\/iframe>\n<\/div>\n<h2>Julho de 2015: a 1.0, o OSCON e a CNCF<\/h2>\n<p>A Red Hat chegou cedo e trouxe o que faltava: a experi\u00eancia de vender software para empresa grande, acumulada no OpenShift. Sem esse recorte de mundo real \u2014 multi-tenancy, atualiza\u00e7\u00e3o sem downtime, autoriza\u00e7\u00e3o que sobrevive a auditoria \u2014 a 1.0 n\u00e3o sa\u00eda. RBAC de verdade s\u00f3 viria na 1.6, em 2017. Em 21 de julho de 2015, no OSCON, o Kubernetes 1.0 foi declarado pronto para produ\u00e7\u00e3o. No mesmo dia o Google cedeu o controle: nascia a Cloud Native Computing Foundation, bra\u00e7o da Linux Foundation, com AT&amp;T, Cisco, Docker, IBM, Intel, Red Hat, Twitter, VMware e uma dezena de outros.<\/p>\n<p>O projeto s\u00f3 entrou de fato como hosted project da CNCF em 10 de mar\u00e7o de 2016 \u2014 o primeiro. Em 6 de mar\u00e7o de 2018 foi o primeiro a graduar. Apache 2.0, Go, API declarativa: voc\u00ea descreve o estado desejado; o control loop tenta chegar l\u00e1. ReplicaSet, Deployment, Service, Namespace. Depois Job, DaemonSet, StatefulSet, Ingress, CRD.<\/p>\n<h2>O que o leme copiou do Borg \u2014 e o que n\u00e3o copiou<\/h2>\n<p>Pod \u00e9 a unidade at\u00f4mica: um ou mais containers que compartilham rede e volume, agendados juntos. No Borg isso j\u00e1 existia. Label e seletor, o Service como VIP est\u00e1vel na frente de Pods que morrem, o kubelet em cada n\u00f3, o etcd como fonte da verdade \u2014 isso \u00e9 o desenho. O que o Borg n\u00e3o tinha, e o Kubernetes apostou, foi a API aberta e a extensibilidade: Custom Resource Definition, admission webhook, Container Runtime Interface.<\/p>\n<p>O runtime, ali\u00e1s, nunca foi \u201cDocker obrigat\u00f3rio\u201d. O dockershim (a ponte que falava com o daemon do Docker) foi marcado como deprecated no 1.20 e <strong>removido no 1.24<\/strong> (maio de 2022). Quem ainda acha que \u201cKubernetes = Docker\u201d est\u00e1 quatro anos atrasado, na melhor hip\u00f3tese. CRI-O e containerd falam CRI direto. O Engine do Docker, por baixo, tamb\u00e9m usa containerd. A hist\u00f3ria da baleia est\u00e1 no <a href=\"\/es\/2026\/09\/a-historia-do-docker\/\">post irm\u00e3o<\/a>.<\/p>\n<h2>Kubernetes e o Linux: a d\u00edvida que ningu\u00e9m cita<\/h2>\n<p>O Kubernetes s\u00f3 existe porque o kernel Linux ganhou, anos antes, as duas primitivas que tornam o container poss\u00edvel \u2014 e uma delas saiu do mesmo lugar.<\/p>\n<ul>\n<li><strong>Namespaces<\/strong> respondem <em>\u201co que este processo enxerga?\u201d<\/em>. O primeiro tipo entrou em 2002 (mount); o conjunto cl\u00e1ssico \u2014 PID, rede, IPC, UTS, usu\u00e1rio \u2014 s\u00f3 fechou em 2013, com o user namespace no kernel 3.8. O cgroup namespace ainda viria em 2016, e o de tempo em 2020.<\/li>\n<li><strong>cgroups<\/strong> respondem <em>\u201co que este processo pode consumir?\u201d<\/em>. Foram escritos por <strong>Paul Menage<\/strong> e <strong>Rohit Seth<\/strong>, do Google, a partir de 2006, e entraram na linha principal no kernel <strong>2.6.24<\/strong>, lan\u00e7ado em janeiro de 2008. O nome original era <em>process containers<\/em> \u2014 trocado porque \u201ccontainer\u201d j\u00e1 estava sobrecarregado no ecossistema Linux: Solaris Zones, Linux-VServer, OpenVZ.<\/li>\n<\/ul>\n<p>Dois engenheiros do Google mexendo em limite de CPU e mem\u00f3ria em 2006 n\u00e3o \u00e9 coincid\u00eancia: a empresa j\u00e1 rodava tudo em cluster compartilhado, a linhagem que desembocaria no Borg. O mesmo campus que produziu o Borg doou ao kernel a pe\u00e7a que, cinco anos depois, o Docker empacotou e o Kubernetes orquestrou. O leme n\u00e3o inventou isolamento \u2014 ele agendou, em escala, um isolamento que o Linux j\u00e1 sabia fazer.<\/p>\n<p>Isso aparece no dia a dia: o <code data-no-translation=\"\">limit<\/code> de um Pod vira cgroup no n\u00f3 (<code data-no-translation=\"\">cpu.max<\/code>, <code data-no-translation=\"\">memory.max<\/code>) e o <code data-no-translation=\"\">request<\/code> de CPU vira peso de escalonamento (<code data-no-translation=\"\">cpu.weight<\/code>) \u2014 o <code data-no-translation=\"\">request<\/code> de mem\u00f3ria s\u00f3 vira cgroup com o Memory QoS ligado. O <code data-no-translation=\"\">kubelet<\/code> \u00e9 um processo comum lendo e escrevendo em <code data-no-translation=\"\">\/sys\/fs\/cgroup<\/code>. E o <strong>cgroup v2<\/strong> (padr\u00e3o nas distribui\u00e7\u00f5es atuais) trouxe o controlador de mem\u00f3ria unificado \u2014 <code data-no-translation=\"\">memory.min<\/code>, <code data-no-translation=\"\">memory.low<\/code>, <code data-no-translation=\"\">memory.high<\/code>, <code data-no-translation=\"\">memory.max<\/code> \u2014, que freia o workload em vez de s\u00f3 mat\u00e1-lo no limite. \u00c9 sob a hierarquia do v2 que o kernel exp\u00f5e o PSI (<em>pressure stall information<\/em>, kernel 4.20, dezembro de 2018) por cgroup; o kubelet l\u00ea esse sinal de forma est\u00e1vel desde a 1.36. Quem entende o kernel por baixo depura Kubernetes muito mais r\u00e1pido do que quem s\u00f3 sabe YAML.<\/p>\n<h2>2016\u20132017: a guerra que o Swarm perdeu<\/h2>\n<p>Enquanto o leme crescia, a Docker apostou no Swarm como orquestrador nativo \u2014 mais simples de aprender, integrado ao produto que todo mundo j\u00e1 tinha instalado. Em 2017 a pr\u00f3pria Docker, Inc. jogou a toalha e anunciou suporte a Kubernetes. Mesos, Nomad, Cattle \u2014 todos sobreviveram em nicho. O padr\u00e3o de fato ficou o hept\u00e1gono. N\u00e3o porque o YAML seja bonito (n\u00e3o \u00e9), mas porque todo provedor de nuvem passou a vender o mesmo objeto: um cluster Kubernetes gerenciado. GKE, EKS, AKS, o OpenShift da Red Hat, o Rancher. A API virou o Linux da nuvem: ningu\u00e9m ama, todo mundo fala.<\/p>\n<h2>2016\u20132018: o que aconteceu com quem criou<\/h2>\n<p>Os tr\u00eas sa\u00edram do Google, cada um no seu tempo. <strong>Brendan Burns<\/strong> foi para a Microsoft em julho de 2016 e ajudou a construir o Azure Kubernetes Service. <strong>Joe Beda<\/strong> j\u00e1 tinha sa\u00eddo em 2015; <strong>Craig McLuckie<\/strong> saiu no fim de 2016, e os dois fundaram a <strong>Heptio<\/strong> em novembro, em Seattle, para vender Kubernetes para empresa. A VMware anunciou a compra em novembro de 2018 por cerca de <strong>US$ 550 milh\u00f5es<\/strong> e a fechou em dezembro; a Heptio virou um dos pilares do Tanzu \u2014 Velero, Sonobuoy, Contour, o TKG. O projeto ficou onde deveria: numa funda\u00e7\u00e3o, com governan\u00e7a aberta e centenas de empresas empurrando.<\/p>\n<h2>2026: Garhwal, kube-dns e a limpeza do legado<\/h2>\n<p>O Kubernetes 1.37.0 saiu em 26 de agosto de 2026, ciclo de 15 semanas, release lead Dipesh Rawat. Apelido <strong>Garhwal<\/strong> (\u0917\u0922\u093c\u0935\u093e\u0932), regi\u00e3o himalaia de Uttarakhand. 67 melhorias: 16 est\u00e1veis, 23 beta, 27 alpha, uma deprecia\u00e7\u00e3o. Destaques que importam no cluster de verdade:<\/p>\n<ul>\n<li>O Dynamic Resource Allocation fechou o pacote: requisi\u00e7\u00e3o de recurso estendido via driver, <em>taint<\/em> e <em>toleration<\/em> de dispositivo e o atributo <code data-no-translation=\"\">resource.kubernetes.io\/numaNode<\/code> viraram Stable. O n\u00facleo do DRA j\u00e1 era GA desde a 1.34 \u2014 \u00e9 ele que tirou GPU, FPGA e dispositivo de IA da gambiarra de Device Plugin.<\/li>\n<li>kube-dns est\u00e1 deprecated. CoreDNS \u00e9 o DNS default desde o 1.13; pacote novo do kube-dns n\u00e3o deve sair depois do 1.40.<\/li>\n<li>O modo IPVS do kube-proxy j\u00e1 vinha deprecated desde a 1.35; o caminho \u00e9 iptables ou, de prefer\u00eancia, nftables \u2014 o modo sai de vez na 1.43.<\/li>\n<li>HPA scale-to-zero entrou em beta, ligado por default \u2014 o autoscale agora pode zerar r\u00e9plica.<\/li>\n<li>N\u00f3 em cgroup v1 n\u00e3o sobe mais: o <code data-no-translation=\"\">failCgroupV1<\/code> do kubelet \u00e9 <code data-no-translation=\"\">true<\/code> por padr\u00e3o desde a 1.35. Sem cgroup v2 n\u00e3o h\u00e1 Memory QoS, swap nem m\u00e9trica de PSI \u2014 a d\u00edvida com o kernel virou requisito operacional.<\/li>\n<\/ul>\n<p>As vers\u00f5es em suporte ativo em setembro de 2026 s\u00e3o 1.37, 1.36 e 1.35 \u2014 a 1.34 ainda recebe corre\u00e7\u00e3o at\u00e9 27 de outubro. A 1.37.1 est\u00e1 marcada para 15 de setembro. O etcd e as implementa\u00e7\u00f5es de CRI e CNI continuam fora do bin\u00e1rio: o leme orquestra; quem roda o container \u00e9 outro processo.<\/p>\n<h2>Experimentar hoje, sem cluster e sem nuvem<\/h2>\n<p>Doze anos depois, subir um Kubernetes para estudar \u00e9 quest\u00e3o de minutos numa m\u00e1quina s\u00f3. Tr\u00eas caminhos, do mais descart\u00e1vel ao mais parecido com produ\u00e7\u00e3o:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\"># kind \u2014 cluster dentro de containers, o mais r\u00e1pido de jogar fora\nkind create cluster --name estudo\nkubectl get nodes\n\n# minikube \u2014 VM ou container, com addons (dashboard, ingress, registry)\nminikube start\nminikube addons enable ingress\n\n# k3s \u2014 leve, criado pela Rancher (hoje SUSE) e doado \u00e0 CNCF em 2020; roda de verdade em Raspberry Pi\ncurl -sfL https:\/\/get.k3s.io | sh -\nsudo k3s kubectl get nodes<\/code><\/pre>\n<p>O <code data-no-translation=\"\">kind<\/code> y el <code data-no-translation=\"\">minikube<\/code> s\u00e3o laborat\u00f3rio. O <strong>k3s<\/strong> \u00e9 outra coisa: um bin\u00e1rio \u00fanico, com o etcd trocado por SQLite por padr\u00e3o (o etcd volta s\u00f3 em HA com v\u00e1rios servidores), usado em borda e em ambiente pequeno de produ\u00e7\u00e3o. Se a ideia \u00e9 ter um cluster de verdade num servidor caseiro, comece por ele.<\/p>\n<h2>Linha do tempo<\/h2>\n<ul>\n<li><strong>Meados dos anos 2000<\/strong> \u2014 o Google j\u00e1 roda jobs no Borg, cluster interno que ningu\u00e9m de fora v\u00ea.<\/li>\n<li><strong>2006\u20132008<\/strong> \u2014 Paul Menage e Rohit Seth, do Google, escrevem os cgroups; a funcionalidade chega ao kernel 2.6.24 em janeiro de 2008.<\/li>\n<li><strong>2013<\/strong> \u2014 o Omega tenta o passo seguinte dentro do Google; l\u00e1 fora, o Docker torna o container \u00f3bvio.<\/li>\n<li><strong>6 de junho de 2014<\/strong> \u2014 primeiro commit p\u00fablico: 250 arquivos, 47.501 linhas.<\/li>\n<li><strong>10 de junho de 2014<\/strong> \u2014 Eric Brewer anuncia o projeto no primeiro DockerCon.<\/li>\n<li><strong>21 de julho de 2015<\/strong> \u2014 Kubernetes 1.0 no OSCON; no mesmo dia nasce a CNCF e o Google anuncia que ceder\u00e1 o controle.<\/li>\n<li><strong>10 de mar\u00e7o de 2016<\/strong> \u2014 primeiro projeto hospedado da CNCF.<\/li>\n<li><strong>2016<\/strong> \u2014 Burns vai para a Microsoft; McLuckie e Beda fundam a Heptio.<\/li>\n<li><strong>2017<\/strong> \u2014 a Docker, Inc. anuncia suporte a Kubernetes; a disputa com o Swarm acaba.<\/li>\n<li><strong>6 de mar\u00e7o de 2018<\/strong> \u2014 primeiro projeto a graduar na CNCF.<\/li>\n<li><strong>Novembro de 2018<\/strong> \u2014 a VMware compra a Heptio por cerca de US$ 550 milh\u00f5es.<\/li>\n<li><strong>Maio de 2022<\/strong> \u2014 o dockershim \u00e9 removido na vers\u00e3o 1.24; containerd e CRI-O assumem.<\/li>\n<li><strong>26 de agosto de 2026<\/strong> \u2014 1.37.0 \u201cGarhwal\u201d: kube-dns depreciado, HPA scale-to-zero em beta, DRA completo, cgroup v1 barrado no kubelet.<\/li>\n<\/ul>\n<h2>O que ficou<\/h2>\n<p>Tr\u00eas engenheiros no Google Cloud, um runtime de uma m\u00e1quina, um cluster interno que ningu\u00e9m via. O resultado \u00e9 o plano de controle que a ind\u00fastria copiou. O hept\u00e1gono na capa \u00e9 o mesmo de 2014. O YAML, tamb\u00e9m \u2014 para o bem e para o mal.<\/p>\n<p>A baleia que tornou o container \u00f3bvio est\u00e1 em <a href=\"\/es\/2026\/09\/a-historia-do-docker\/\">A hist\u00f3ria do Docker<\/a>. O hipervisor de servidor, em <a href=\"\/es\/2026\/09\/a-historia-do-proxmox\/\">Proxmox<\/a> e <a href=\"\/es\/2026\/09\/a-historia-do-xen\/\">Xen<\/a>. O kernel embaixo de tudo, em <a href=\"\/es\/2026\/09\/linux-35-anos\/\">Linux faz 35 anos<\/a> e <a href=\"\/es\/2026\/09\/a-historia-de-linus-torvalds\/\">A hist\u00f3ria de Linus Torvalds<\/a>.<\/p>\n<p>Do Borg ao Garhwal: o timoneiro ainda est\u00e1 no leme. 1.37.0, Apache 2.0, CRI, nftables. Sete raios, doze anos, e o YAML que ningu\u00e9m gosta de escrever, mas todo mundo commita.<\/p>","protected":false},"excerpt":{"rendered":"<p>Em 6 de junho de 2014 Joe Beda fez o primeiro commit p\u00fablico do que viraria o Kubernetes: 250 arquivos, 47.501 linhas de Go, Bash e Markdown. Quatro dias depois Eric Brewer anunciou o projeto no DockerCon. Um ano depois, em 21 de julho de 2015, saiu a 1.0 \u2014 e o Google anunciou que &#8230; <a title=\"A hist\u00f3ria do Kubernetes: o leme do Borg\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/a-historia-do-kubernetes\/\" aria-label=\"Read more about A hist\u00f3ria do Kubernetes: o leme do Borg\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[103,46,2,111,120],"tags":[227,228,229,156,58,226,225],"class_list":["post-534","post","type-post","status-publish","format-standard","hentry","category-cloud","category-devops","category-linux","category-opensource","category-servidores","tag-borg","tag-cncf","tag-containers","tag-docker","tag-go","tag-k8s","tag-kubernetes"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=534"}],"version-history":[{"count":5,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/534\/revisions"}],"predecessor-version":[{"id":1162,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/534\/revisions\/1162"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}