CRD (Definición de recurso personalizado) es un recurso especial en Kubernetes que le permite ingresar cualquier dato. El equipo de Kubernetes aaS de Mail.ru ha traducido un artículo sobre qué es, cómo crearlo y usarlo.
Que es CRD
CRD es solo una tabla en la base de datos. Digamos que hemos creado una tabla "Frutas", hay muchos registros en ella: "manzana", "plátano", "naranja". Cada registro tiene columnas con características de la fruta como dulzor, sabor y peso.
Entonces, CRD es similar a la tabla de frutas.
CR (recurso personalizado): un registro separado en la tabla, por ejemplo, "manzana" o "plátano". Después de crear una CRD (tabla), puede agregar o eliminar CR (registros).
CRD es necesario ya que cada vez más usuarios desean contribuir con datos a Kubernetes. El formato de los datos puede ser diferente y los CRD no están definidos en Kubernetes de forma inmediata. Como resultado, necesita crear sus propias tablas, estableciendo los nombres y tipos de columnas, como en una base de datos.
Por ejemplo, un gerente de TI quiere usar un CRD para organizar una lista de usuarios, una lista de departamentos, un horario de trabajo u otra cosa.
Cómo crear un CRD
Como se mencionó, CRD es una mesa. Cuando creamos una tabla, necesitamos establecer su formato: nombres y tipos de columna. En CRD, estos elementos se describen en formato YAML o JSON. CR también describe cada valor que se escribirá en formato YAML o JSON.
Veamos cómo se ve el CRD desde el interior:
CRD se divide en tres partes: parte general, información a nivel de tabla e información a nivel de columna:
- Una parte común. Al igual que con otros recursos de Kubernetes, los metadatos incluyen el nombre CRD (
name: "fruit-crd"
)apiVersion
ykind
. - Información a nivel de tabla. Nombre de la tabla (
kind: "fruit"
), nombre en minúscula simple de la línea de comando (simpler: "fruits"
), plural (plural: "fruits"
) - Información a nivel de columna. Nombre de columna (
"sweetness"
), tipo de columna ("boolean", "string", "integer", "object"
), objetos anidados (: < >
). Se ajustan al formato OpenAPISpecification versión 3.
Más información sobre CRD está en el manual oficial .
Verificación CRD
¿CRD es realmente solo una mesa? Vamos a revisar.
No quiero recordar el formato CRD y necesito una forma más fácil de crearlo. Así que solo estoy escribiendo una definición de tabla y tengo una declaración: una herramienta automática de generación de CRD.
La descripción es muy simple: debe enumerar los pares de nombres y tipos de columnas.
Después de aplicar este YML, mi operador en Kubernetes genera automáticamente el CRD correspondiente. Puedes crear tu propio operador, pero si quieres probar el mío, ejecuta el siguiente comando:
kubectl apply -f
https://raw.githubusercontent.com/onelittlenightmusic/k8sasdb/master/install.yaml
Después de instalar correctamente el operador, verifique que el Pod se haya iniciado:
kubectl get pod -n k8sasdb-system
NAME READY STATUS RESTARTS AGE
k8sasdb-controller-manager-9dbf54b4f-hzrt9 2/2 Running 0 8s
Puede descargar tablas de muestra y registros CR desde aquí .
Así es como se ve el CRD generado. Izquierda: información general y nivel de tabla, derecha: información a nivel de columna.
Luego agregué el siguiente CR (YAML para una fruta).
Ejemplo CR "Fruta"
Ahora verifiquemos los resultados en la tabla y las operaciones en los registros.
Creando una mesa
kubectl create -f fruit.yaml
Éxito: CRD instalado = tabla creada.
Este es el equivalente a un comando SQL
CREATE TABLE fruits;
.
Crea un registro
kubectl create -f apple.yaml
Éxito: Conjunto de CR = registro creado. Este es el equivalente a un comando SQL
INSERT INTO fruits values('apple', ...);
.
Obtener una lista de registros
kubectl get fruits
Éxito: muestra dos CR y todas sus columnas. Equivalente al comando SQL
SELECT * FROM fruits;
.
Recibir un registro
kubectl get fruit apple
Exitosamente. Por supuesto, puede utilizar otros nombres, por ejemplo, "banana". El comando es equivalente a una consulta SQL
SELECT * FROM fruits WHERE name = 'apple';
.
Eliminar la entrada
kubectl delete fruit apple
Después de eliminar el comando para verificar toda la lista de frutas, no muestra el resultado "manzana".
Exitosamente. Analógico en el SQL:
DELETE FROM fruits WHERE name = 'banana';
.
Conclusión
CRD es solo una tabla en Kubernetes. Puede crear nuevas tablas con CRD y agregar registros con CR. También en CRD, puede definir el esquema de la tabla definiendo nombres y tipos de columna. Una vez que haya dominado los comandos CRD, CR y kubectl, puede cargar cualquier dato en Kubernetes.
No hay que tener miedo: incluso si no recuerda el formato CRD, el operador lo ayudará. Mi versión de código abierto del operador se publica aquí .
Qué más leer: