Aide-mémoire CKAD

exemple YAML CRD k8s

Un CRD est le type. La ressource custom est une instance. Le même nom court peut exister dans deux groupes.

Une plante holographique dans une jungle néon — un nouveau kind sur la table. Une plante holographique dans une jungle néon — un nouveau kind sur la table.
Trouver
kubectl get crd
kubectl api-resources -o name | grep example.io
kubectl get backups.example.io -A
CRD
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: backups.example.io
spec:
  group: example.io
  scope: Namespaced
  names:
    plural: backups
    singular: backup
    kind: Backup
    shortNames: ["bak"]
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                keep:
                  type: integer
Instance
apiVersion: example.io/v1
kind: Backup
metadata:
  name: nightly
  namespace: app
spec:
  keep: 7

Champs

name
metadata.name doit être <plural>.<group>. backups.example.io.
group
Le groupe API. Distingue deux CRD qui partagent un kind.
scope
Namespaced ou Cluster. Même idée que Role vs ClusterRole.
storage
Exactement une version a storage: true. Les autres peuvent être served.
kubectl api-resources
kubectl api-resources -o name | grep example.io. Le nom complet si les noms courts se marchent dessus.

Pièges

  • metadata.name = plural.group — backups.example.io. Faux et le CRD ne s’établit jamais.
  • Deux CRD peuvent partager le kind Backup. Trancher avec le nom complet : backups.mycompany.io.
  • kubectl get backup utilise le nom court. Si deux groupes le servent, passer le nom complet.

Doc officielle Custom Resources

S’entraîner sur un cluster réel →