Pular para o conteúdo principal

API Version

Para que as funcionalidades e os recursos do Kubernetes sejam criados também são necessárias novas APIs.

As versões estáveis são as que chamamos de V1.

Mas encontramos pelo caminho várias versões diferentes e vamos entender como elas aparecem.

alt text

Explicando melhor cada uma delas temos:

Alpha

alt text

Quando uma API acabou de ser incluída no código do Kubernetes pela primeira vez

Não é disponível por padrão e precisa ser habilitada para ser usada.

Ainda pode ter bugs e pode ser depreciada rapidamente. Geralmente é utilizada por usuários que têm interesse em dar seu feedback e colaborar com o Kubernetes. Não deve ser usada em produção.

Criar um objeto alpha que não está habilitado não funcionará.

Beta

Avançando um pouco na versão alpha com bugs já corrigidos temos a beta.

Esta já é disponível por padrão, ainda pode conter erros menores, mas já foi testada e aprovada incluindo testes end to end. A tendência é que no futuro elas passem a ser v1, mas não é garantido.

GA Stable

Depois de alguns meses e algumas releases as betas passam para GA que são consideradas as versões estáveis que conhecemos v1. São muito mais confiáveis e estarão presentes em várias releases futuras do Kubernetes podendo ser usadas por todos os usuários.

alt text

Aqui temos um exemplo da versão 1.30 do Kubernetes.

Se quiser buscar outras versões

alt text

Um exemplo da evolução.

API GROUP1.251.261.271.281.291.30
admissionregistration.k8s.iov1v1, v1alpha1v1, v1alpha1v1, v1beta1, v1alpha1v1, v1beta1, v1alpha1v1, v1beta1, v1alpha1
apiextensions.k8s.iov1v1v1v1v1v1
apiregistration.k8s.iov1v1v1v1v1v1
appsv1v1v1v1v1v1
authentication.k8s.iov1v1, v1alpha1v1, v1beta1, v1alpha1v1, v1beta1, v1alpha1v1, v1beta1, v1alpha1v1, v1beta1, v1alpha1
authorization.k8s.iov1v1v1v1v1v1
autoscalingv1, v2, v2beta2v2, v1v2, v1v2, v1v2, v1v2, v1
batchv1v1v1v1v1v1
certificates.k8s.iov1v1v1, v1alpha1v1, v1alpha1v1, v1alpha1v1, v1alpha1
coordination.k8s.iov1v1v1v1v1v1
corev1v1v1v1v1v1
discovery.k8s.iov1v1v1v1v1v1
events.k8s.iov1v1v1v1v1v1
flowcontrol.apiserver.k8s.iov1beta2, v1beta1v1beta3, v1beta2v1beta3, v1beta2v1beta3, v1beta2v1, v1beta3v1, v1beta3
internal.apiserver.k8s.iov1alpha1v1alpha1v1alpha1v1alpha1v1alpha1v1alpha1
networking.k8s.iov1, v1alpha1v1, v1alpha1v1, v1alpha1v1, v1alpha1v1, v1alpha1v1, v1alpha1
node.k8s.iov1v1v1v1v1v1
policyv1v1v1v1v1v1
rbac.authorization.k8s.iov1v1v1v1v1v1
resource.k8s.iov1alpha1v1alpha2v1alpha2v1alpha2v1alpha2
scheduling.k8s.iov1v1v1v1v1v1
storage.k8s.iov1, v1beta1v1, v1beta1v1v1v1, v1alpha1v1, v1alpha1
storagemigration.k8s.iov1alpha1

Podemos observar que o Kubernetes suporta várias versões ao mesmo tempo a fim de dar suporte a versões anteriores.


Podemos observar que o API group oferece suporte a várias versões ao mesmo tempo. Isso significa que seremos capazes de criar o mesmo objeto usando qualquer uma dessas versões.

Embora suporte várias versões, somente uma pode ser a versão preferencial ou armazenada.

alt text

A versão preferencial é aquela que é recuperada pelo comando kubectl e a armazenada é aquela que é armazenada no etcd.

Quando uma versão é definida diferente da preferencial ela é convertida para a versão preferencial.

> kubectl proxy  
Starting to serve on 127.0.0.1:8001

curl http://localhost:8001/apis/batch
{
"kind": "APIGroup",
"apiVersion": "v1",
"name": "batch",
"versions": [
{
"groupVersion": "batch/v1",
"version": "v1"
}
],
"preferredVersion": {
"groupVersion": "batch/v1",
"version": "v1"
}
}

Para observar o que temos dentro do etcd é necessário realizar a busca no próprio etcd.

Para habilitar as versões alpha podemos passar o parâmetro para o serviço do kube-api-server.

No caso para habilitar a versão v2alpha1 do batch podemos passar

--runtime-config=batch/v2alpha1

É necessário a reinicialização do serviço se for pod estático ou serviço no sistema operacional.