---
title: "Výpisy, stránkovanie a watch — Kubernetes API for Laravel | Roundly"
description: "Selektory podľa labelov a polí, výpisy naprieč namespace, stránkovanie cez continue token, lenivá iterácia a sledovanie zmien v reálnom čase."
url: https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel/vypisy-strankovanie-a-watch
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Kubernetes API for Laravel](https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel.md)

# 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:

```php
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óda | Posiela |
| --- | --- |
| `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. |

Kľúče a hodnoty labelov sa pred odoslaním overia podľa gramatiky labelov Kubernetes — kľúč je voliteľná predpona v tvare DNS subdomény s / a za ňou meno s najviac 63 znakmi, hodnota je prázdna alebo takéto meno. Čiarka, =, zátvorka či medzera, ktoré by selektor rozšírili alebo prepísali — whereLabelIn('tenant', \['acme,globex'\]) —, vyhodia InvalidResourceException. Prázdne whereLabelIn('app', \[\]) sa pošle ako app in (), čo apiserver chápe ako app="". Selektory polí sa neoverujú.

## 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(). Vlastný continue token buildera nechajú tak, ako bol, takže druhé lazy() či get() na tom istom builderi začne z rovnakého miesta:

```php
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:

```php
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](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## 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.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel.md)
