NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky

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ľúčEnvPredvolenéÚčel
defaultKUBERNETES_CLUSTERdefaultKlaster, 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>.sourceKUBERNETES_SOURCEurlOdkiaľ sa berie pripojenie: url (kľúče nižšie), kubeconfig (súbor a kontext) alebo in-cluster (service account podu).
clusters.<name>.urlKUBERNETES_URLnullURL apiservera pre zdroj url.
clusters.<name>.tokenKUBERNETES_TOKENnullBearer token.
clusters.<name>.certificate / private_key / ca_certificateKUBERNETES_CLIENT_CERTIFICATE · …_CLIENT_KEY · …_CA_CERTIFICATEnullCesty ku klientskemu certifikátu, jeho kľúču a k CA.
clusters.<name>.verifyKUBERNETES_VERIFY_SSLtrueOverovanie 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 / contextKUBERNETES_KUBECONFIG · KUBERNETES_CONTEXTnullPre zdroj kubeconfig: súbor (null = KUBECONFIG alebo ~/.kube/config) a kontext (null = current-context).
clusters.<name>.namespaceKUBERNETES_NAMESPACEdefaultPredvolený namespace pre zdroje v namespace na tomto klastri.
clusters.<name>.managerKUBERNETES_MANAGERnullField 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_timeoutKUBERNETES_STREAM_TIMEOUT0Č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.enabledKUBERNETES_RATELIMIT_ENABLEDtrueZapína obmedzenie požiadaviek na strane klienta; false posiela požiadavky bez obmedzenia.
rate_limits.ownerKUBERNETES_RATELIMIT_OWNERappPredpona kľúča rozpočtu — viac aplikácií či workerov môže rozpočet klastra zdieľať alebo oddeliť.
rate_limits.max_attemptsKUBERNETES_RATELIMIT400Počet požiadaviek na klaster v jednom okne, kým sa začne čakať — celé číslo, aspoň 1.
rate_limits.timespanKUBERNETES_RATELIMIT_TIMESPANminuteDĺžka okna: presne second, minute, hour alebo day. Preklep ako minutes vyhodí výnimku, namiesto aby sa z neho stala minúta.
rate_limits.adaptiveKUBERNETES_RATELIMIT_ADAPTIVEtruePri odpovedi 429 rešpektuje hlavičku Retry-After od apiservera a limiter sa sám doladí.
rate_limits.max_waitKUBERNETES_RATELIMIT_MAX_WAITnullnull znamená čakať. Strop v ms (0 alebo viac) namiesto čakania okamžite vyhodí RateLimitExceededException.
rate_limits.jitterKUBERNETES_RATELIMIT_JITTERnullNáhodný rozptyl v ms (0 alebo viac) pridaný ku každému odkladu, ktorý rozloží nárazové špičky.
traefik.group—traefik.io/v1alpha1API skupina/verzia vstavaných zdrojov Traefiku; pre Traefik starší ako v3 traefik.containo.us/v1alpha1.
resources—33 vstavaných položiekNá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 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.