NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Kubernetes API for Laravel

Výpisy, stránkovanie a watch

Filtrovanie nechajte na apiserveri namiesto sťahovania všetkého. Metódy selektorov skladajú parametre labelSelector a fieldSelector a dajú sa ľubovoľne reťaziť — viac selektorov sa spojí čiarkou:

use RoundlyConsulting\KubernetesApi\Resources\Pod;

// Label and field selectors build the labelSelector / fieldSelector query params.
$pods = $cluster->pods()
    ->setNamespace('shop')
    ->whereLabel('app', 'checkout')
    ->whereLabelIn('tier', ['web', 'api'])
    ->whereLabelExists('team')
    ->whereLabelMissing('canary')
    ->whereField('status.phase', 'Running')
    ->limit(100)
    ->get();

$pods->map(fn (Pod $pod): string => $pod->getName());
MetódaPosiela
whereLabel('app', 'web')labelSelector=app=web
whereLabelNot('tier', 'cache')tier!=cache
whereLabelIn('zone', ['a', 'b'])zone in (a,b)
whereLabelNotIn('zone', ['c'])zone notin (c)
whereLabelExists('team')team
whereLabelMissing('deprecated')!deprecated
whereField('status.phase', 'Running')fieldSelector=status.phase=Running
whereFieldNot('status.phase', 'Failed')status.phase!=Failed
limit(100) · continueFrom($token)limit=100 · continue=<token>
allNamespaces()Vypisuje z celoklastrovej cesty namiesto jedného namespace.

Stránkovanie a lenivá iterácia

limit() obmedzí veľkosť stránky a getPage() vráti ResourcePage s položkami a stránkovacími metadátami apiservera. lazy() a each() za vás sledujú continue tokeny a v pamäti držia vždy len jednu stránku — veľkosť stránky nastavíte cez limit():

use RoundlyConsulting\KubernetesApi\Resources\Pod;

// List across every namespace.
$all = $cluster->pods()->allNamespaces()->whereLabel('app', 'checkout')->get();

// Page explicitly with a continue token.
$page = $cluster->pods()->setNamespace('shop')->limit(50)->getPage();
$page->items;               // ResourcesCollection
$page->continue;            // ?string — pass to ->continueFrom(...) for the next page
$page->remainingItemCount;  // ?int
$page->hasMore();           // bool

if ($page->hasMore()) {
    $next = $cluster->pods()->setNamespace('shop')->limit(50)->continueFrom($page->continue)->getPage();
}

// Or iterate every item lazily, auto-following continue tokens.
foreach ($cluster->pods()->allNamespaces()->limit(200)->lazy() as $pod) {
    // one page in memory at a time
}

$cluster->pods()->allNamespaces()->limit(200)->each(function (Pod $pod): void {
    // ...
});

Sledovanie zmien

watch() otvorí streamované sledovanie nad tým istým výpisom — platia selektory aj allNamespaces() — a pri každej zmene zavolá váš callback s objektom WatchEvent, kým sa spojenie neukončí. Druhý argument pridá k požiadavke parametre dotazu:

use RoundlyConsulting\KubernetesApi\DataTransferObjects\WatchEvent;

$cluster->pods()
    ->setNamespace('shop')
    ->whereLabel('app', 'checkout')
    ->watch(function (WatchEvent $event): void {
        $event->type;       // ADDED / MODIFIED / DELETED
        $event->object;     // the Pod resource

        if ($event->isDeleted()) {
            logger()->warning("Pod {$event->object->getName()} was deleted");
        }
    });

WatchEvent vystavuje type a object a k tomu isAdded(), isModified() a isDeleted(). Každá udalosť sa dostane do callbacku hneď, ako ju apiserver pošle, a watch() skončí, keď sa stream uzavrie:

  • keď sledovanie uzavrie apiserver — robí to po vlastnom timeoute, zvyčajne po 30 – 60 minútach;
  • po client.stream_timeout sekundách ticha, ak ho nastavíte (predvolená 0 čaká neobmedzene).

Timeout požiadavky v client.options ohraničuje len pripojenie a hlavičky odpovede. Spojenie prerušené uprostred streamu vyhodí ConnectionException od Laravelu. Dlhodobé sledovanie patrí do úloh vo fronte alebo konzolových príkazov, nie do webových požiadaviek — ak má bežať neustále, otvárajte ho znova v cykle.

Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

Ďalšie spôsoby podpory vrátane kryptomien

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.