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

Logy podov, exec a stav

logs() vráti log podu ako jeden reťazec; streamLogs() je generátor, ktorý ho vydáva riadok po riadku — ideálne na sledovanie bežiaceho kontajnera. S follow: true beží, kým sa kontajner nezastaví alebo kým neuplynie client.stream_timeout sekúnd bez výstupu — nie timeout požiadavky:

use RoundlyConsulting\KubernetesApi\DataTransferObjects\PodLogOptions;

$pod = $cluster->pods()->setNamespace('shop')->withName('checkout-5f7c9d8b6-x2kqj');

// Fetch logs as a string.
$logs = $pod->logs(new PodLogOptions(container: 'app', tailLines: 200, timestamps: true));

// The previous (crashed) instance of the container, last hour only.
$crash = $pod->logs(new PodLogOptions(container: 'app', previous: true, sinceSeconds: 3600));

// Stream logs line by line (tail). With follow: true it runs until the container stops
// (or client.stream_timeout seconds pass with no output), not the request timeout.
foreach ($pod->streamLogs(new PodLogOptions(container: 'app', follow: true)) as $line) {
    echo $line.PHP_EOL;
}

PodLogOptions

VoľbaTypPredvolenéÚčinok
container?stringnullKtorý kontajner čítať v pode s viacerými kontajnermi.
followboolfalseNechá stream otvorený pre nové riadky (streamLogs() má predvolene true).
tailLines?intnullLen posledných N riadkov.
sinceSeconds?intnullLen riadky novšie ako N sekúnd.
timestampsboolfalseKaždý riadok začne časovou pečiatkou.
previousboolfalsePredchádzajúca, ukončená inštancia kontajnera — log z pádu.
limitBytes?intnullObmedzí počet vrátených bajtov.

Exec

exec() spustí príkaz v kontajneri a vráti ExecResult so zachyteným stdout, stderr a návratovým kódom. Otvára vlastný TLS WebSocket k apiserveru so subprotokolom v4.channel.k8s.io a používa token, certifikáty aj nastavenie overovania klienta:

// Exec a command inside a pod (over a WebSocket; returns stdout, stderr, and exit code).
$result = $cluster->pods()
    ->setNamespace('shop')
    ->withName('checkout-5f7c9d8b6-x2kqj')
    ->exec(['php', 'artisan', 'cache:clear'], container: 'app');

$result->stdout;       // captured standard output
$result->stderr;       // captured standard error
$result->exitCode;     // 0 (null if the stream ended before the command finished)
$result->successful(); // true only for exit code 0
$result->completed();  // false if the connection dropped or client.stream_timeout passed

// Need a shell? Ask for one explicitly.
$cluster->pods()->setNamespace('shop')->withName('checkout-5f7c9d8b6-x2kqj')
    ->exec(['sh', '-c', 'df -h /var/cache && echo done']);
  • Príkaz odovzdajte ako zoznam argumentov — každý prvok sa pošle ako samostatný parameter command, takže sa nerieši žiadne úvodzovkovanie pre shell. Ak shell potrebujete, obaľte príkaz do ['sh', '-c', '…'].
  • container vyberie kontajner v pode s viacerými kontajnermi; tty: true vyžiada TTY. stdin sa nikdy nepripája.
  • Spojenie používa schému, host, port (bez portu 443) aj predponu cesty z URL klastra, takže apiserver za proxy (https://rancher.example/k8s/clusters/c-abc) funguje rovnako ako priamy. Pripojenie má 30-sekundový timeout; chyby spojenia a upgradu vyhodia WebSocketException. Volania exec sa nezapočítavajú do rozpočtu požiadaviek.
  • exec() čaká, kým apiserver ohlási exit status príkazu. Ak stream skončí skôr — prerušené spojenie alebo client.stream_timeout —, exitCode je null a completed() aj successful() vrátia false: nikdy nejde o falošný úspech.

Stav podu a kontajnerov

Namiesto dekódovania surového stavu kladiete jednoduché otázky — beží pod, sú jeho kontajnery pripravené, prečo sa niektorý reštartoval:

$pod = $cluster->pods()->setNamespace('shop')->withName('checkout-5f7c9d8b6-x2kqj')->find();

$pod->isRunning();             // status.phase === 'Running'
$pod->isSuccessful();          // 'Succeeded'
$pod->hasFailed();             // 'Failed'
$pod->containersReady();       // every container status is ready
$pod->initContainersReady();
$pod->getQos();                // status.qosClass, 'BestEffort' when absent
$pod->getStatusMessage();

$status = $pod->getContainerStatus('app');   // ?ContainerStatus
$status?->getState();          // 'running' | 'waiting' | 'terminated' | 'unknown'
$status?->getStateReason();    // e.g. 'CrashLoopBackOff'
$status?->restarts();          // restart count
$status?->isReady();
$status?->getStartedAt();      // ?Carbon

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.