Konfigurácia
Publikovaný config/kubernetes.php v plnom znení:
use RoundlyConsulting\KubernetesApi\Resources;
return [
'default' => env('KUBERNETES_CLUSTER', 'default'),
'clusters' => [
'default' => [
'source' => env('KUBERNETES_SOURCE', 'url'), // url | kubeconfig | in-cluster
'url' => env('KUBERNETES_URL'),
'token' => env('KUBERNETES_TOKEN'),
'certificate' => env('KUBERNETES_CLIENT_CERTIFICATE'),
'private_key' => env('KUBERNETES_CLIENT_KEY'),
'ca_certificate' => env('KUBERNETES_CA_CERTIFICATE'),
'verify' => env('KUBERNETES_VERIFY_SSL', true),
'kubeconfig' => env('KUBERNETES_KUBECONFIG'), // null = KUBECONFIG or ~/.kube/config
'context' => env('KUBERNETES_CONTEXT'), // null = current-context
'namespace' => env('KUBERNETES_NAMESPACE', 'default'),
'manager' => env('KUBERNETES_MANAGER'),
],
],
'client' => [
'options' => [
'timeout' => 5,
],
'stream_timeout' => env('KUBERNETES_STREAM_TIMEOUT', 0),
],
'rate_limits' => [
'enabled' => env('KUBERNETES_RATELIMIT_ENABLED', true),
'owner' => env('KUBERNETES_RATELIMIT_OWNER', 'app'),
'max_attempts' => env('KUBERNETES_RATELIMIT', 400),
'timespan' => env('KUBERNETES_RATELIMIT_TIMESPAN', 'minute'), // second|minute|hour|day
'adaptive' => env('KUBERNETES_RATELIMIT_ADAPTIVE', true), // honour 429 Retry-After
'max_wait' => env('KUBERNETES_RATELIMIT_MAX_WAIT'), // ms; null = pace, set = fail fast
'jitter' => env('KUBERNETES_RATELIMIT_JITTER'), // ms; null = none
],
'traefik' => [
'group' => 'traefik.io/v1alpha1',
],
'resources' => [
'clusterRoles' => Resources\ClusterRole::class,
'clusterRoleBindings' => Resources\ClusterRoleBinding::class,
'configMaps' => Resources\ConfigMap::class,
'cronJobs' => Resources\CronJob::class,
'daemonSets' => Resources\DaemonSet::class,
'deployments' => Resources\Deployment::class,
'endpoints' => Resources\Endpoints::class,
'events' => Resources\Event::class,
'horizontalPodAutoscalers' => Resources\HorizontalPodAutoscaler::class,
'ingresses' => Resources\Ingress::class,
'jobs' => Resources\Job::class,
'limitRanges' => Resources\LimitRange::class,
'namespaces' => Resources\KubernetesNamespace::class,
'networkPolicies' => Resources\NetworkPolicy::class,
'nodes' => Resources\Node::class,
'persistentVolumes' => Resources\PersistentVolume::class,
'persistentVolumeClaims' => Resources\PersistentVolumeClaim::class,
'pods' => Resources\Pod::class,
'replicaSets' => Resources\ReplicaSet::class,
'replicationControllers' => Resources\ReplicationController::class,
'resourceQuotas' => Resources\ResourceQuota::class,
'roles' => Resources\Role::class,
'roleBindings' => Resources\RoleBinding::class,
'secrets' => Resources\Secret::class,
'serviceAccounts' => Resources\ServiceAccount::class,
'services' => Resources\Service::class,
'statefulSets' => Resources\StatefulSet::class,
'storageClasses' => Resources\StorageClass::class,
'traefikIngressRoutes' => Resources\TraefikIngressRoute::class,
'traefikMiddlewares' => Resources\TraefikMiddleware::class,
'traefikServersTransports' => Resources\TraefikServersTransport::class,
'traefikTlsOptions' => Resources\TraefikTlsOption::class,
'traefikTlsStores' => Resources\TraefikTlsStore::class,
],
];Všetky kľúče
| Kľúč | Env | Predvolené | Účel |
|---|---|---|---|
default | KUBERNETES_CLUSTER | default | Klaster, ktorý používa Kubernetes::pods(), Kubernetes::ping() a každá ďalšia skratka pre predvolený klaster — a ktorý kubernetes:ping overí bez argumentu. |
clusters.<name>.source | KUBERNETES_SOURCE | url | Odkiaľ sa berie pripojenie: url (kľúče nižšie), kubeconfig (súbor a kontext) alebo in-cluster (service account podu). |
clusters.<name>.url | KUBERNETES_URL | null | URL apiservera pre zdroj url. |
clusters.<name>.token | KUBERNETES_TOKEN | null | Bearer token. |
clusters.<name>.certificate / private_key / ca_certificate | KUBERNETES_CLIENT_CERTIFICATE · …_CLIENT_KEY · …_CA_CERTIFICATE | null | Cesty ku klientskemu certifikátu, jeho kľúču a k CA. |
clusters.<name>.verify | KUBERNETES_VERIFY_SSL | true | Overovanie TLS. Vypnite ho len pri lokálnom vývoji. Prázdne KUBERNETES_VERIFY_SSL= sa počíta ako nenastavené a overovanie ponechá zapnuté. |
clusters.<name>.kubeconfig / context | KUBERNETES_KUBECONFIG · KUBERNETES_CONTEXT | null | Pre zdroj kubeconfig: súbor (null = KUBECONFIG alebo ~/.kube/config) a kontext (null = current-context). |
clusters.<name>.namespace | KUBERNETES_NAMESPACE | default | Predvolený namespace pre zdroje v namespace na tomto klastri. |
clusters.<name>.manager | KUBERNETES_MANAGER | null | Field manager vašej aplikácie — posiela sa ako fieldManager pri každom zápise a ako user agent. Server-side apply bez neho použije kubernetes-api-for-laravel. Rozpočet požiadaviek podľa neho nekľúčuje (ten platí pre apiserver). |
client.options | — | ['timeout' => 5] | Voľby HTTP klienta Laravelu pridané ku každej požiadavke balíka (timeout, proxy, hlavičky…). Timeout — sekundy ako int, float alebo číselný reťazec, 0 = bez limitu — ohraničuje bežné požiadavky; pri watch a streamLogs() len pripojenie a hlavičky odpovede, exec() ho ignoruje. |
client.stream_timeout | KUBERNETES_STREAM_TIMEOUT | 0 | Časový limit nečinnosti streamov v sekundách (celé číslo od 0 do 86400): po takom dlhom tichu sa watch či sledovanie logov čisto ukončí a nedokončený exec() nevráti exit kód. 0 čaká neobmedzene, ako kubectl. |
rate_limits.enabled | KUBERNETES_RATELIMIT_ENABLED | true | Zapína obmedzenie požiadaviek na strane klienta; false posiela požiadavky bez obmedzenia. |
rate_limits.owner | KUBERNETES_RATELIMIT_OWNER | app | Predpona kľúča rozpočtu — viac aplikácií či workerov môže rozpočet klastra zdieľať alebo oddeliť. |
rate_limits.max_attempts | KUBERNETES_RATELIMIT | 400 | Počet požiadaviek na klaster v jednom okne, kým sa začne čakať — celé číslo, aspoň 1. |
rate_limits.timespan | KUBERNETES_RATELIMIT_TIMESPAN | minute | Dĺžka okna: presne second, minute, hour alebo day. Preklep ako minutes vyhodí výnimku, namiesto aby sa z neho stala minúta. |
rate_limits.adaptive | KUBERNETES_RATELIMIT_ADAPTIVE | true | Pri odpovedi 429 rešpektuje hlavičku Retry-After od apiservera a limiter sa sám doladí. |
rate_limits.max_wait | KUBERNETES_RATELIMIT_MAX_WAIT | null | null znamená čakať. Strop v ms (0 alebo viac) namiesto čakania okamžite vyhodí RateLimitExceededException. |
rate_limits.jitter | KUBERNETES_RATELIMIT_JITTER | null | Náhodný rozptyl v ms (0 alebo viac) pridaný ku každému odkladu, ktorý rozloží nárazové špičky. |
traefik.group | — | traefik.io/v1alpha1 | API skupina/verzia vstavaných zdrojov Traefiku; pre Traefik starší ako v3 traefik.containo.us/v1alpha1. |
resources | — | 33 vstavaných položiek | Názov prístupu → trieda zdroja, číta sa pri každom volaní. Vstavané meno nasmerujte na vlastnú podtriedu alebo pridajte vlastné CRD. Každá položka musí byť podtrieda Resource. |
Prostredie (env)
Predvolený klaster aj limity požiadaviek sa riadia cez env, takže konfiguráciu často ani nemusíte publikovať:
KUBERNETES_CLUSTER=default # the default cluster's name
KUBERNETES_SOURCE=url # url | kubeconfig | in-cluster
KUBERNETES_URL=https://api.my-cluster.example:6443
KUBERNETES_TOKEN=service-account-token
KUBERNETES_NAMESPACE=shop # default namespace for namespaced resources
KUBERNETES_MANAGER=shop-app # field manager (fieldManager on writes) and user agent
KUBERNETES_STREAM_TIMEOUT=0 # idle seconds before a watch or log follow ends (0 = never)KUBERNETES_RATELIMIT=400 # attempts per window, per cluster
KUBERNETES_RATELIMIT_TIMESPAN=minute
KUBERNETES_RATELIMIT_ADAPTIVE=true # honour 429 Retry-After
# KUBERNETES_RATELIMIT_MAX_WAIT=2000 # ms — fail fast instead of waiting
# KUBERNETES_RATELIMIT_JITTER=250 # ms of random spread per defer
# KUBERNETES_RATELIMIT_OWNER=app
# KUBERNETES_RATELIMIT_ENABLED=false # the raw, unthrottled clientČo prísna konfigurácia odmietne
Každý kľúč sa číta prísne: predvolená hodnota sa použije len pri nenastavenom kľúči a zadaná, no neplatná hodnota vyhodí výnimku s názvom kľúča. Prázdna hodnota znamená nenastavená: chýbajúci kľúč, null aj prázdna hodnota (KEY= u hostiteľa, prázdna alebo len z medzier) dostanú predvolenú hodnotu — aj pri prepínačoch, kde prázdna hodnota nikdy neznamená false.
- Prepínače — clusters.<name>.verify, rate_limits.enabled a rate_limits.adaptive — prijímajú true/false, 1/0, on/off a yes/no. Čokoľvek iné vyhodí výnimku, takže preklep v KUBERNETES_VERIFY_SSL overovanie TLS nikdy nevypne — a prázdne KUBERNETES_VERIFY_SSL= sa počíta ako nenastavené, takže overovanie zostane zapnuté.
- Čísla prijímajú int alebo celočíselný reťazec ('400'): rate_limits.max_attempts (aspoň 1), rate_limits.max_wait a jitter (0 alebo viac) a client.stream_timeout (0 – 86400). client.options.timeout prijme aj float či desatinný reťazec ('2.5'), 0 alebo viac. 'five', '5.5' pri celom čísle, '5s' alebo záporné číslo vyhodia výnimku. Prázdne KUBERNETES_STREAM_TIMEOUT= znamená predvolenú 0 a prázdne max_wait či jitter sa počíta ako nenastavené — nikdy nie ako strop 0 ms s okamžitým zlyhaním.
- rate_limits.timespan musí byť presne second, minute, hour alebo day — minutes vyhodí výnimku, namiesto aby sa z neho stala minúta.
- Reťazce — default, url klastra, cesty k prihlasovacím údajom, kubeconfig, context, namespace a manager, ako aj rate_limits.owner a traefik.group — musia byť reťazce. Prázdna env premenná ako KUBERNETES_TOKEN= sa počíta ako nenastavená: žiadny token sa nepošle, presne ako keby riadok chýbal. Rovnako KUBERNETES_NAMESPACE= znamená default a KUBERNETES_CLUSTER= predvolený klaster. Neznámy alebo nereťazcový source vyhodí výnimku; prázdny znamená url.
- Mapy — clusters, každá položka clusters.<name>, client.options a resources — musia byť polia a každá položka resources musí byť podtrieda Resource.
Nastavenia klastra a klienta vyhodia ClusterConfigurationException, resources vyhodí InvalidResourceException a limity požiadaviek spolu s traefik.group vyhodia InvalidConfigurationException z toolkitu.
Mapa zdrojov
Typované prístupy čítajú mapu resources pri každom volaní a ak v nej svoje meno nenájdu, použijú triedu z balíka. Publikované pole resources tak stačí obmedziť na položky, ktoré pridávate alebo meníte — publikovaný súbor uvádza všetkých 33 len pre prehľad. Vlastné mená fungujú, len kým sú v mape. Položka, ktorá nie je podtrieda Resource, alebo hodnota resources, ktorá nie je pole, vyhodí InvalidResourceException.
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 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.