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ľba | Typ | Predvolené | Účinok |
|---|---|---|---|
container | ?string | null | Ktorý kontajner čítať v pode s viacerými kontajnermi. |
follow | bool | false | Nechá stream otvorený pre nové riadky (streamLogs() má predvolene true). |
tailLines | ?int | null | Len posledných N riadkov. |
sinceSeconds | ?int | null | Len riadky novšie ako N sekúnd. |
timestamps | bool | false | Každý riadok začne časovou pečiatkou. |
previous | bool | false | Predchádzajúca, ukončená inštancia kontajnera — log z pádu. |
limitBytes | ?int | null | Obmedzí 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(); // ?CarbonPrejavte 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 kryptomienOdoslaní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.