Uma explicação simples de CRD no Kubernetes e como usá-lo

Space by maryanion



CRD (Custom Resource Definition) é um recurso especial no Kubernetes que permite inserir qualquer dado. A equipe Kubernetes aaS de Mail.ru traduziu um artigo sobre o que é, como criá-lo e usá-lo.



O que é CRD



O CRD é apenas uma tabela no banco de dados. Digamos que criamos uma tabela "Frutas", há muitos registros nela: "maçã", "banana", "laranja". Cada registro possui colunas com características da fruta, como doçura, sabor e peso.



Portanto, o CRD é semelhante à tabela "Frutas".







CR (recurso personalizado) - um registro separado na tabela, por exemplo, "maçã" ou "banana". Depois de criar um CRD (tabela), você pode adicionar ou remover CR (registros).







O CRD é necessário, pois mais e mais usuários desejam contribuir com dados para o Kubernetes. O formato dos dados pode ser diferente e os CRDs não são definidos no Kubernetes prontos para uso. Como resultado, você precisa criar suas próprias tabelas, definindo os nomes e tipos de colunas, como em um banco de dados.



Por exemplo, um gerente de TI deseja usar um CRD para organizar uma lista de usuários, uma lista de departamentos, uma programação de trabalho ou outra coisa.



Como criar um CRD



Conforme mencionado, o CRD é uma mesa. Quando criamos uma tabela, precisamos definir seu formato: nomes e tipos de coluna. No CRD, esses elementos são descritos no formato YAML ou JSON. CR também descreve cada valor a ser escrito no formato YAML ou JSON.







Vamos ver como o CRD se parece por dentro: O







CRD é dividido em três partes: parte geral, informações no nível da tabela e informações no nível da coluna:



  1. Uma parte comum. Tal como acontece com outros recursos do Kubernetes, os metadados incluem o nome CRD ( name: "fruit-crd") apiVersione kind.
  2. Informações no nível da tabela. Nome da tabela ( kind: "fruit"), linha de comando nome em minúsculas simples ( simpler: "fruits"), plural ( plural: "fruits")
  3. Informações de nível de coluna. Nome da coluna ( "sweetness"), tipo de coluna ( "boolean", "string", "integer", "object"), objetos aninhados ( : < >). Eles estão em conformidade com o formato OpenAPISpecification versão 3.


Mais informações sobre o CRD estão no manual oficial .



Verificação CRD



O CRD é realmente apenas uma mesa? Vamos checar.



Não quero me lembrar do formato CRD e preciso de uma maneira mais fácil de criá-lo. Portanto, estou apenas escrevendo uma definição de tabela e tenho uma declaração - uma ferramenta automática de geração de CRD.



A descrição é muito simples: você precisa listar os pares de nomes e tipos de colunas.







Depois de aplicar este YML, meu operador no Kubernetes gera automaticamente o CRD correspondente. Você pode criar seu próprio operador, mas se quiser experimentar o meu, execute o seguinte comando:



kubectl apply -f
https://raw.githubusercontent.com/onelittlenightmusic/k8sasdb/master/install.yaml


Depois de instalar o operador com sucesso, verifique se o Pod foi iniciado:



kubectl get pod -n k8sasdb-system
NAME                                         READY   STATUS    RESTARTS   AGE
k8sasdb-controller-manager-9dbf54b4f-hzrt9   2/2     Running   0          8s


Você pode baixar tabelas de amostra e registros de CR aqui .



É assim que o CRD gerado se parece. Esquerda: informações gerais e nível de tabela, direita: informações de nível de coluna.







Em seguida, adicionei o seguinte CR (YAML para uma fruta).





Exemplo CR "Fruta"



Agora vamos verificar os resultados na tabela e as operações nos registros.



Criação de uma mesa



kubectl create -f fruit.yaml






Sucesso: CRD instalado = tabela criada.







Isso é equivalente a um comando SQL CREATE TABLE fruits;.



Crie um registro



kubectl create -f apple.yaml






Sucesso: CR set = registro criado. Isso é equivalente a um comando SQL INSERT INTO fruits values('apple', ...);.



Obter uma lista de registros



kubectl get fruits






Sucesso: exibe dois CRs e todas as colunas para eles. Equivalente ao comando SQL SELECT * FROM fruits;.



Recebendo um registro



kubectl get fruit apple






Com sucesso. Claro, você pode usar outros nomes, por exemplo "banana". O comando é equivalente a uma consulta SQL SELECT * FROM fruits WHERE name = 'apple';.



Excluir entrada



kubectl delete fruit apple






Após a exclusão, o comando para verificar toda a lista de frutas não mostra o resultado "maçã".







Com sucesso. Analógico no SQL: DELETE FROM fruits WHERE name = 'banana';.



Conclusão



CRD é apenas uma tabela no Kubernetes. Você pode criar novas tabelas com CRD e adicionar registros com CR. Também no CRD, você pode definir o esquema da tabela definindo nomes e tipos de coluna. Depois de dominar os comandos CRD, CR e kubectl, você pode fazer upload de todos os dados para o Kubernetes.



Não precisa ter medo: mesmo que não se lembre do formato do CRD, a operadora vai te ajudar. Minha versão de código aberto do operador está postada aqui .



O que mais ler:



  1. Como usar o kubectl com mais eficiência: um guia abrangente .
  2. Kubernetes: .
  3. Kubernetes .



All Articles