---
title: "Spracovanie chýb — Kubernetes API for Laravel | Roundly"
description: "Typované výnimky so správami bez tela odpovede a prístupom k Status — chyby apiservera, konfigurácia, namespace, limity, kubeconfig a exec."
url: https://roundly-consulting.com/sk/open-source/navody/kubernetes-api-for-laravel/spracovanie-chyb
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)

# Spracovanie chýb

Neúspešné požiadavky vyhodia RoundlyConsulting\\KubernetesApi\\Exceptions\\KubernetesException. Rozširuje RequestException z Laravelu — catch (RequestException), $e->response aj $e->getCode() (HTTP stav) naďalej fungujú — a pridáva metódy, ktoré Status apiservera prečítajú z tela až na požiadanie:

```php
use RoundlyConsulting\KubernetesApi\Exceptions\KubernetesException;

try {
    $cluster->secrets()->setNamespace('shop')->setName('db')->create();
} catch (KubernetesException $e) {
    $e->status();       // 409 (also $e->getCode())
    $e->reason();       // 'AlreadyExists' — only a well-formed reason token, else null
    $e->apiMessage();   // 'secrets "db" already exists', or null
    $e->details();      // the Status details array (name, kind, causes…), or []
    $e->getMessage();   // 'secrets "db" already exists' — never the raw body
    $e->response;       // the full Laravel Response, body included
}
```

## Správy nikdy nenesú telo odpovede

Správy výnimiek končia v logoch a vo failed\_jobs, preto nikdy neobsahujú surové telo odpovede — HTML stránka z edge servera alebo proxy, ktorá vracia hlavičku Authorization, by tam inak zanechala bearer token. Súhrn tela od Laravelu, ktorý jeho handler pri report() zapisuje do správy, sa nepoužije nikdy:

| Telo odpovede | Správa | So skracovaním |
| --- | --- | --- |
| Status apiservera so správou | `secrets "db" already exists` | `HTTP 409 AlreadyExists` |
| Čokoľvek iné — HTML stránka, prázdne telo… | `Kubernetes API request failed: HTTP 502` | `HTTP 502` |

- Všeobecná správa pridá reason zo Status, ak ho telo obsahuje v platnom tvare.
- Nenasledované presmerovanie znie Kubernetes API request was redirected (HTTP 302 to https://login.example:8443) and the redirect was not followed — len pôvod cieľa, nikdy jeho cesta či dotaz.
- Úspešná odpoveď, ktorú volanie nevie použiť, vyhodí KubernetesException::malformedResponse(): Malformed TokenRequest response from the Kubernetes API (HTTP 201).
- new KubernetesException($response, ?string $message = null, bool $redacted = false) použije vlastnú správu presne tak, ako ju zadáte.

## Skrátené chyby

withRedactedErrors() — alebo redact\_errors v konfigurácii klastra — skráti správy na stav a dôvod, bez správy zo Status. Metódy výnimky aj $e->response telo naďalej prečítajú, pretože si oň výslovne poviete, a applyConfig() nastavenie zachová:

```php
$cluster = Kubernetes::cluster('production')->withRedactedErrors();
// or 'redact_errors' => true on the cluster's config entry (KUBERNETES_REDACT_ERRORS)

try {
    $cluster->secrets()->setNamespace('shop')->setName('db')->create();
} catch (KubernetesException $e) {
    $e->getMessage();   // 'HTTP 409 AlreadyExists'
    $e->apiMessage();   // still 'secrets "db" already exists' — reading it is a choice
}
```

Žiadosti o token service accountu sú skrátené vždy, bez ohľadu na nastavenie klastra — ide o endpoint s prihlasovacími údajmi. Odmietnutý upgrade pri exec vyhodí WebSocketException so stavovým riadkom a správou zo Status apiservera (pri skracovaní len so stavovým riadkom), napríklad WebSocket upgrade failed: HTTP/1.1 403 Forbidden: pods "api" is forbidden; hlavičky ani telo odpovede v nej nikdy nie sú.

## Všetky výnimky

| Výnimka | Kedy vznikne | Obsahuje |
| --- | --- | --- |
| `KubernetesException` | Apiserver odpovie kódom 4xx alebo 5xx, presmerovaním, ktoré sa nenasledovalo (redirectNotFollowed()), alebo úspešnou odpoveďou, ktorú volanie nevie použiť (malformedResponse()). | \->response (Response Laravelu), status(), reason(), apiMessage() a details(); správou je správa zo Status apiservera — nikdy surové telo odpovede. |
| `RateLimitExceededException` | Požiadavka by čakala dlhšie ako rate\_limits.max\_wait. | \->cluster (meno registrovaného klastra, pri ad-hoc klientovi host apiservera) a retryAfterSeconds(). |
| `KubeConfigException` | fromKubeConfig() alebo inCluster() nevie načítať prihlasovacie údaje — vrátane neplatného YAML, nečitateľného tokenFile, používateľa, ktorý sa prihlasuje cez exec plugin, auth provider alebo meno a heslo, chýbajúceho CA certifikátu v klastri či insecure-skip-tls-verify, ktoré nie je boolean. | Správu s tým, čo chýba alebo je neplatné — pri neplatnom YAML len súbor a riadok. |
| `WebSocketException` | exec() sa nepripojí alebo zlyhá upgrade na WebSocket. | Chybu spojenia, prípadne stavový riadok upgradu so správou zo Status apiservera — nikdy surové hlavičky ani telo. |
| `ClusterNotFoundException` | cluster($name) dostane meno, ktoré nie je nakonfigurované ani zaregistrované. | Neznáme meno klastra. |
| `ClusterConfigurationException` | Klaster nemá URL, closure definície nevráti Cluster, zdroj v konfigurácii je neznámy, nastavenie klastra či klienta je chybné alebo mimo rozsahu, prípadne sa zdroj použije bez klastra. | Ktorý klaster, konfiguračný kľúč či zdroj je nastavený zle. |
| `NamespaceScopeException` | Klient alebo zdroj obmedzený na namespace má svoj namespace opustiť. | \->scope (pripnutý namespace). |
| `InvalidResourceException` | registerResource() alebo seed() vo fake dostane triedu, ktorá nie je zdroj, alebo nepoužiteľné meno; konfigurácia resources nie je pole či uvádza triedu, ktorá nie je zdroj; alebo meno, namespace, plural či apiVersion požiadavky nemôže byť jedným segmentom cesty URL (nič sa neodošle). Vyhodia ju aj typové buildery: kľúč či hodnota labelu mimo gramatiky labelov, vstup pravidla hostu či cesty v Traefiku, subjekt ServiceAccount v ClusterRoleBinding bez namespace, pomocník závislý od mena (Volume::fromSecret(), Job::podsSelectors(), Service::getClusterDns()) na zdroji bez mena a vstup requestToken(), ktorý by apiserver odmietol. | Problémovú triedu, meno alebo hodnotu. |
| `InvalidConfigurationException` | Kľúč rate\_limits alebo traefik.group je neplatný — nerozpoznaný prepínač, necelé číslo či číslo mimo rozsahu, neznámy timespan alebo hodnota, ktorá nie je reťazec. Pochádza z package-toolkit-for-laravel. | Správu s názvom kľúča a zadanou hodnotou. |

404 z find() je zvyčajne signál na vytvorenie — existsOnCluster() a updateOrCreate() to riešia za vás. 409 z update() alebo updateOrCreate() znamená, že sa objekt od načítania zmenil: načítajte ho znova a pokus zopakujte.

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