Kako brzo promijeniti Kubernetes kontekst s Kubectxom i Kubensom
Web agencija » Digitalne vijesti » Što su Kubernetes Custom Resource Definitions (CRD)?

Što su Kubernetes Custom Resource Definitions (CRD)?

Prilagođene definicije resursa (CRD-ovi) su Kubernetes API proširenja koja mogu definirati nove tipove objekata. Pods, ReplicaSets, ConfigMaps i Ingresses primjeri su uobičajenih ugrađenih resursa. CRD-ovi vam omogućuju dodavanje potpuno novih tipova na ovaj popis i upravljanje njima pomoću poznatih Kubernetes alata kao što je Kubectl.

CRD mehanizam je namjerno apstraktan i može se koristiti na više načina za pohranjivanje podataka i stvaranje novih funkcija. Prilagođene resurse pronaći ćete u mnogim popularnim alatima zajednice: Cert-Manager definira objekte koji predstavljaju SSL certifikate i izdavatelje, dok Helm predstavlja grafikone kao vlastiti CRD.

Što čini resurs?

Resursi Kubernetesa definiraju vrste podataka koje možete pohraniti u svoj klaster. Dostupni su putem Kubernetes API-ja koji pruža krajnje točke za stvaranje, popis i izmjenu stavki u svakoj vrsti resursa.

Možete dodati prilagođene resurse za pohranu vlastitih proizvoljnih podataka u svoj klaster. Stavke koje stvorite pohranit će komponenta kontrolne ravnine etcd, uz ugrađene instance resursa. API automatski prikazuje prilagođene resurse, tako da ne morate konfigurirati vlastite alate za stvaranje instanci stavke.

CRD-ovi prema zadanim postavkama djeluju kao jednostavne podatkovne strukture. Iako CRD-ovi u prirodi često imaju vlastita ponašanja, to nije omogućeno CRD mehanizmom. Prilagođeni Kubernetes kontroleri i operatori mogu se koristiti za implementaciju funkcionalnosti oko prilagođenih resursa. Bez kontrolera, stavke u CRD-u i dalje će postojati kao statični podaci u klasteru s kojima možete komunicirati putem CRUD krajnjih točaka koje pruža Kubernetes API.

CRD-ovi su dinamičke komponente koje se mogu kreirati i brisati u bilo kojem trenutku. Neki tipovi objekata uključeni u Kubernetes također su implementirani kao CRD-ovi, što pruža veću modularnost u jezgri klastera.

Izrada CRD-a

CRD-ovi su sami po sebi vrsta Kubernetes objekta. Stvarate ih na isti način kao i bilo koji drugi resurs, pisanjem YAML datoteke i primjenom na svoj klaster:

apiVerzija: apiextensions.k8s.io/v1
vrsta: CustomResourceDefinicija
metapodataka:
  ime: custom-apps.crds.example.com
specijalan:
  skupina: crds.example.com
  inačice:
    - Ime: v1
      služio: istinski
      skladištenje: istinski
      shema:
        openAPIV3Schema:
          vrsta: objekt
          Svojstva:
            specijalan:
              vrsta: objekt
              Svojstva:
                naziv aplikacije:
                  vrsta: niz
                verzija aplikacije:
                  vrsta: niz
                otpuštanje-broj:
                  vrsta: cijeli
  djelokrug: Imenski prostor
  imena:
    množina: prilagođene aplikacije
    jednina: prilagođena aplikacija
    vrsta: Prilagođena aplikacija

Upotrijebite Kubectl za dodavanje CustomApp CRD u svoj klaster:

$ kubectl apply -f custom-apps-crd.yaml customresourcedefistvoreno nition.apiextensions.k8s.io/custom-apps.crds.example.com

YAML datoteka definira CRD koji se može koristiti za pohranu podataka aplikacije. CRD-ovi trebaju a metadata.name et spec.group polje u određenom formatu: grupa ima oblik poddomene kojoj CRD pripada. Ista poddomena mora biti uključena u CRD-ove metadata.name . Vrijednost names.plural dodaje se kao nova komponenta poddomene za izradu konačne verzije metadata.name.

La spec.names Polje definira kako ćete se pozivati ​​na CRD kada koristite Kubernetes API i Kubectl naredbe. U ovom primjeru možete trčati kubectl get custom-apps et kubectl get custom-app/example-app za interakciju s objektima koji koriste CRD. Kada kreirate novi objekt kao YAML datoteku, morate postaviti kind: CustomApp kako bi to bio primjerak CRD-a.

CRD je konfiguriran kao tip objekta na razini imenskog prostora od strane scope polje. Možeš koristiti Cluster kao alternativna vrijednost za ovo polje za stvaranje objekata koji postoje na razini klastera, izvan bilo kojeg prostora imena.

Podaci povezani s vašim prilagođenim objektima definirani su u spec.versions.schema.openAPIV3Schema polje. Svaka navedena "verzija" stvara novu verziju CRD API-ja na koju se možete pozivati ​​pomoću apiVersion u vašim YAML datotekama resursa. CRD podaci konfigurirani su pomoću OpenAPI svojstava; ovdje bi svaka "prilagođena aplikacija" u vašem klasteru trebala imati app-name, app-versionet release-count svojstva definirana u njegovom YAML-u spec.

Koristeći svoj CRD

Omogućavanje krajnjih točaka API-ja za novi CRD može potrajati nekoliko minuta. Provjerite napredak dohvaćanjem CRD pojedinosti pomoću Kubectla:

$ kubectl describe crd custom-apps.crds.example.com ... Status: Prihvaćeni nazivi: Vrsta: CustomApp List Vrsta: CustomAppList Množina: custom-apps Jednina: custom-app Uvjeti: Vrijeme zadnjeg prijelaza: 2022-04-04T13: 29:24Z Poruka: nisu pronađeni sukobi Razlog: NoConflicts Status: True Type: NamesAccepted Vrijeme zadnjeg prijelaza: 2022-04-04T13:29:24Z Poruka: početni nazivi su prihvaćeni Razlog: InitialNamesAccepted Status: True Type: Uspostavljeno ...

CRD je spreman za korištenje kada vidite Type: Established prema kraju izlaza naredbe. Kubernetes će prihvatiti zahtjeve prema CRD API krajnjoj točki. U ovom slučaju osnovni API URL bit će:

/apis/custom-apps.crds.example.com/v1/namespaces/*/custom-apps/...

Sada možete koristiti Kubectl za pregled objekata koji su stvoreni pomoću CRD-a:

$ kubectl get custom-apps U zadanom prostoru imena nisu pronađeni resursi.

Iako nijedan objekt još ne postoji, Kubernetes sada zna da ima vrstu resursa tzv custom-apps.

Da biste stvorili objekt "prilagođene aplikacije", napišite novu YAML datoteku s kind: CustomApp. The apiVersion treba postaviti na naziv grupe i API verziju koju daje CRD. Unutar spec uključite svojstva koja ste definirali u CRD shemi.

apiVerzija: crds.example.com/v1
vrsta: Prilagođena aplikacija
metapodataka:
  ime: demo-aplikacija-1
specijalan:
  naziv aplikacije: demo aplikacija
  verzija aplikacije: 1.1.0
  otpuštanje-broj: 5

Upotrijebite Kubectl za dodavanje objekta u svoj klaster:

$ kubectl apply -f custom-app.yaml customapp.crds.example.com/demo-app created

Sada možete dohvatiti detalje objekta koristeći uobičajene Kubectl naredbe:

$ kubectl describe custom-app/demo-app-1 Naziv: demo-app Prostor imena: zadane oznake: Bilješke: API verzija: crds.example.com/v1 Vrsta: CustomApp ... Specifikacija: Aplikacija - Naziv: demo-app Aplikacija - Verzija: 1.1.0 Izdanje - Broj: 5 ... Događaji:

Imate radni prilagođeni resurs koji sada pohranjuje neke podatke u vašem Kubernetes klasteru. CRD možete ukloniti brisanjem u Kubectl; ovo će automatski očistiti sve objekte koji ga koriste.

$ kubectl izbrišite crd custom-apps.crds.example.com customresourcedefinition.apiextensions.k8s.io "custom-apps.crds.example.com" izbrisano

Izrada deklarativnih API-ja s CRD-ovima

Ovaj CRD ne dodaje nikakvu funkcionalnost klasteru. Pohranjuje podatke, pruža API za interakciju s njima i mogu ga referencirati drugi objekti. CRD-ovi postaju moćniji kada su upareni s prilagođenim kontrolerom koji može preuzeti odgovornost za upravljanje njima.

Kontrolori prate resurse i poduzimaju radnje kao odgovor na njihove događaje. Pisanje kontrolera za vaše CRD-ove omogućuje vam da ih pretvorite u deklarativne API-je koji pokreću stvarne promjene unutar vašeg klastera. Vaši objekti mogu predstavljati želji stanje, umjesto točno trenutnog stanja.

Cert-Manager koristi ovaj obrazac za automatsko dobivanje SSL certifikata kada se u vašem klasteru pojave novi objekti CertificateRequest. Unutar Kubernetes jezgre, čvorovi dohvaćaju i izvršavaju slike spremnika kao odgovor na mrijestenje mahuna. Kontroleri vam omogućuju da priložite ponašanje svojim vlastitim CRD-ovima, tako da bi dodavanje "prilagođene aplikacije" moglo rezultirati dohvaćanjem njezine konfiguracije s vanjske usluge. Možete započeti s izgradnjom kontrolera pomoću Go SDK-a za integraciju vlastitog koda s Kubernetes runtimeom.

Kada koristiti CRD?

CRD-ovi se najbolje koriste za upravljanje internim podacima vaše organizacije, tima ili projekta. Dizajnirani su da predstavljaju jasno definirane sheme, bilo kao statičke vrijednosti ili kao deklarativni API-ji podržani implementacijom prilagođenog kontrolera.

Napredne značajke omogućuju implementaciju rutina provjere valjanosti za polja u vašoj shemi. Također možete koristiti finalizatore za upravljanje brisanjem objekata i usvojiti sustav verzija za upravljanje promjenama vaših CRD definicija.

CRD-ovi se ponekad preklapaju s Kubernetes ConfigMaps. Oni su ugrađeni objekti za pohranu generičkih konfiguracijskih podataka povezanih s vašim aplikacijama. ConfigMap je prikladan kada se koriste vrijednosti na određenom mjestu u vašem klasteru, kao što je pod koji pristupa postavkama baze podataka kao varijablama okruženja ubačenim iz ConfigMap-a.

CRD-ovi su namijenjeni za korištenje kada podaci trebaju biti prvorazredni građanin u vašem klasteru. Možete stvoriti višestruke instance CRD vrste resursa, izravno komunicirati s njima koristeći Kubectl i izraditi vlastite strukturirane sheme koje vode korisnike da unesu točne vrijednosti. Oni mogu biti bolji izbor kada podaci postoje neovisno o bilo čemu drugom u vašem klasteru.

Sommaire

Kubernetes Custom Resource Definitions (CRD) definiraju nove tipove objekata koje možete koristiti s Kubernetes API-jem i Kubectlom. Svaki CRD dobiva vlastiti verzionirani API, ima strukturiranu shemu i može se koristiti za implementaciju novih značajki u klasteru kada ga podržava prateći kontroler.

CRD se ponekad može činiti kompliciranim i rezerviranim za napredne situacije. To ne smije biti slučaj. Jednostavne CRD-ove za pohranu statičkih vrijednosti u vašem klasteru lako je izraditi, kao što je ilustrirano gornjim primjerom "prilagođene aplikacije". Mogu se koristiti za sadržavanje podataka autonomnog klastera kako bi dobili prvoklasni tretman u Kubernetesu.

Također je važno prepoznati gdje CRD-ovi ne odgovaraju. Ugrađeni objekti kao što su ConfigMaps i Secrets dizajnirani su za prilagodbu većini oblika konfiguracije koje će izravno koristiti podovi vaše aplikacije. Pisanje CRD-a koji definira shemu konfiguracijske datoteke vaše aplikacije obično je nepotrebno i teže ga je održavati tijekom vremena jer nećete imati koristi od značajki ConfigMap kao što su automatska kontinuirana ažuriranja i ubacivanje varijabli okruženja.

★ ★ ★ ★ ★