Niestandardowe definicje zasobów (CRD)
Rozszerz funkcjonalność Kubernetes, definiując własne zasoby niestandardowe do zarządzania obiektami specyficznymi dla domeny.
Niestandardowe definicje zasobów (CRD) to bezpłatna lekcja Docker & Kubernetes for Developers na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Docker & Kubernetes for Developers, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Docker & Kubernetes for Developers zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
Extend Kubernetes API
Welcome! In this lesson, we'll explore Custom Resource Definitions (CRDs). CRDs allow you to extend Kubernetes by defining your own custom resource types.
Think of it as teaching Kubernetes new words and concepts, so it can manage application-specific objects just like it manages built-in ones like Pods or Deployments.
Why Custom Resources?
Kubernetes provides powerful primitives like Pods, Deployments, and Services. But what if your application needs to manage a unique kind of object, like a database cluster, a serverless function, or a custom build pipeline?
- Domain-Specific Objects: Define resources tailored to your application's unique needs.
- Abstraction: Simplify complex application deployments into a single, manageable resource.
- Kubernetes Native: Leverage Kubernetes's declarative API, tooling (
kubectl), and watch mechanisms for your custom objects.
Core vs. Custom Resources
Kubernetes comes with many built-in or 'core' resources you already know:
- Core Resources: Pod, Deployment, Service, ConfigMap. These are part of the standard Kubernetes API.
- Custom Resources: These are resources you define using CRDs. They behave just like core resources but represent your own application-specific concepts.
Once a CRD is created, you can create and manage instances of your custom resource using kubectl, just like any other Kubernetes object.
Anatomy of a CRD: Basics
A CRD is itself a Kubernetes resource defined in YAML. Here's what some key fields mean:
apiVersion: apiextensions.k8s.io/v1: Specifies the API version for the CRD itself.kind: CustomResourceDefinition: Identifies this YAML as a CRD definition.metadata.name: The unique name for your CRD, typically in the format<plural>.<group>.
Let's look at defining the core specification next.
CRD Anatomy: Group & Versions
The spec section of a CRD defines the custom resource's properties:
spec.group: The API group for your custom resource (e.g.,example.com). This helps organize your custom resources.spec.versions: A list of supported versions for your custom resource (e.g.,v1alpha1,v1). Each version can have its own schema.spec.scope: Defines if your custom resource isNamespaced(like Pods) orCluster(like Nodes).
CRD Anatomy: Names & Schema
More important fields in the spec:
spec.names: Defines how your custom resource will be referred to:plural: The plural name used inkubectl get(e.g.,webservers).singular: The singular name (e.g.,webserver).kind: The CamelCase name for the resource object (e.g.,WebServer).shortNames: Optional, short aliases (e.g.,ws).
spec.versions[].schema.openAPIV3Schema: This is crucial! It defines the structure and validation rules for your custom resource's data.
Defining a Simple WebServer CRD
Here's a basic CRD for a WebServer resource. Notice how it defines the group, versions, names, and a simple schema for its properties (like image and replicas).
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: webservers.example.com
spec:
group: example.com
versions:
- name: v1
served: true
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
image:
type: string
replicas:
type: integer
required:
- image
scope: Namespaced
names:
plural: webservers
singular: webserver
kind: WebServer
shortNames:
- wsApplying Your CRD
Once you have your CRD YAML file (e.g., webserver-crd.yaml), you can apply it to your Kubernetes cluster using kubectl. This registers your new resource type with Kubernetes.
It might take a few seconds for the API server to fully acknowledge the new type.
kubectl apply -f webserver-crd.yamlCreating a Custom Resource
After the CRD is applied, you can create instances of your WebServer custom resource. This YAML defines a specific WebServer object with its own image and replicas values, conforming to the schema you defined.
You can manage this object just like any other Kubernetes resource.
apiVersion: example.com/v1
kind: WebServer
metadata:
name: my-first-webserver
spec:
image: nginx:latest
replicas: 3Interacting with Custom Resources
Now that you've defined a CRD and created an instance, you can use standard kubectl commands to interact with your custom resources:
kubectl get webservers: List allWebServerobjects.kubectl get ws: Use the short name.kubectl describe webserver my-first-webserver: Get detailed information about a specificWebServerinstance.
This seamless integration is a key benefit of CRDs!
Check Your CRD Knowledge
Which of the following are benefits of using Custom Resource Definitions (CRDs) in Kubernetes?
Recap: Extending Kubernetes
Great job! You've learned about Custom Resource Definitions!
- CRDs allow you to extend the Kubernetes API with your own custom resource types.
- They enable Kubernetes to manage domain-specific objects using its native API and tooling.
- A CRD defines the schema and properties of your custom resource.
- Once defined, you can create and interact with instances of your custom resource using
kubectl.
Next, we'll see how Operators leverage CRDs to automate complex application management!
Często zadawane pytania
Czy lekcja „Niestandardowe definicje zasobów (CRD)” jest bezpłatna?
Tak — pełny tekst „Niestandardowe definicje zasobów (CRD)” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Docker & Kubernetes for Developers, przejdź na CoddyKit PRO. Kurs Docker & Kubernetes for Developers zawiera 4 lekcji w sumie.
Co nauczysz się w „Niestandardowe definicje zasobów (CRD)”?
Rozszerz funkcjonalność Kubernetes, definiując własne zasoby niestandardowe do zarządzania obiektami specyficznymi dla domeny. Ćwiczysz Docker & Kubernetes for Developers z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Docker & Kubernetes for Developers?
Nie wymagamy żadnego doświadczenia. Docker & Kubernetes for Developers w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Niestandardowe definicje zasobów (CRD)”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Docker & Kubernetes for Developers?
Tak. Każda lekcja Docker & Kubernetes for Developers zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Niestandardowe definicje zasobów (CRD)
- Wzorzec Operatora w Kubernetes
- Serverless z Kubernetes (Knative)
- Rozszerzanie serwera API za pomocą webhooków admission