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

Workloady pridávajú typované settery pre spec a čitateľné gettery pre status. Zdravie deploymentu na prvý pohľad:

$checkout = $cluster->deployments()->setNamespace('shop')->withName('checkout')->find();

$checkout->getReplicas();                   // spec.replicas
$checkout->getReadyReplicasCount();         // status.readyReplicas
$checkout->getAvailableReplicasCount();     // status.availableReplicas
$checkout->getUnavailableReplicasCount();   // status.unavailableReplicas
$checkout->getDesiredReplicasCount();       // status.replicas
$checkout->getConditions();                 // status.conditions
$checkout->getPodsSelectors();              // spec.selector.matchLabels
$checkout->getTemplate();                   // the pod template as a Pod
$checkout->getUpdateStrategy();             // spec.strategy

// Tweak and write back
$checkout->setMinReadySeconds(10)->setReplicas(6)->update();

// spec.strategy — RollingUpdate (with its surge limits) or Recreate
$checkout->setUpdateStrategy('RollingUpdate', maxUnavailable: '0', maxSurge: '1')->update();

setPodsSelectors() pri deploymentoch, daemon setoch a replica setoch zapisuje spec.selector.matchLabels, pri replication controlleroch plochú mapu selector. Prázdny selektor apiserver pri workloadoch apps/v1 odmietne, preto im vždy dajte aspoň jeden label. setTemplate() prijíma Pod a pošle len jeho metadata a spec; alebo spec.template nastavte priamo cez setSpec() ako v príkladoch nižšie.

StatefulSety

Stabilnú sieťovú identitu zabezpečí setServiceName(), úložisko pre každú repliku objekty PersistentVolumeClaimTemplate:

use RoundlyConsulting\KubernetesApi\Resources\Types\PersistentVolumeClaimTemplate;

$cluster->statefulSets()
    ->setNamespace('shop')
    ->setName('search')
    ->setServiceName('search')
    ->setReplicas(3)
    ->setSpec('selector.matchLabels', ['app' => 'search'])
    ->setSpec('template', [
        'metadata' => ['labels' => ['app' => 'search']],
        'spec' => ['containers' => [['name' => 'search', 'image' => 'registry.example.com/search:v2.1.0']]],
    ])
    ->setVolumeClaimTemplates([
        PersistentVolumeClaimTemplate::make()
            ->setName('data')
            ->setAccessModes(['ReadWriteOnce'])
            ->setStorageClassName('fast-ssd')
            ->setStorageRequest('20Gi'),
    ])
    ->create();

$search = $cluster->statefulSets()->setNamespace('shop')->withName('search')->find();
$search->getReadyReplicasCount();
$search->getCurrentReplicasCount();
$search->getUpdatedReplicasCount();

DaemonSety

$cluster->daemonSets()
    ->setNamespace('monitoring')
    ->setName('node-agent')
    ->setPodsSelectors(['app' => 'node-agent'])
    ->setUpdateStrategy('RollingUpdate', maxUnavailable: '2')   // or 'OnDelete'
    ->setSpec('template', [
        'metadata' => ['labels' => ['app' => 'node-agent']],
        'spec' => ['containers' => [['name' => 'agent', 'image' => 'registry.example.com/node-agent:v3.0.2']]],
    ])
    ->create();

$agent = $cluster->daemonSets()->setNamespace('monitoring')->withName('node-agent')->find();
$agent->getDesiredNumberScheduled();
$agent->getCurrentNumberScheduled();
$agent->getNumberReady();
$agent->getNumberAvailable();

ReplicaSety ponúkajú setPodsSelectors(), getReadyReplicasCount(), getAvailableReplicasCount() a getFullyLabeledReplicasCount(); replication controllery prvé tri z nich.

Joby

Spúšťajte jednorazovú prácu — migrácie dát, zálohy, reporty — a po dokončení skontrolujte výsledok:

$cluster->jobs()
    ->setNamespace('shop')
    ->setName('reindex-catalogue')
    ->setTtl(3600)                              // ttlSecondsAfterFinished
    ->setSpec('template', [
        'spec' => [
            'restartPolicy' => 'Never',
            'containers' => [[
                'name' => 'reindex',
                'image' => 'registry.example.com/shop-cli:v1.4.0',
                'command' => ['php', 'artisan', 'catalogue:reindex'],
            ]],
        ],
    ])
    ->create();

// Later — for example from a queued job
$job = $cluster->jobs()->setNamespace('shop')->withName('reindex-catalogue')->find();

$job->hasCompleted();             // status.completionTime is set
$job->getActivePodsCount();
$job->getSucceededPodsCount();
$job->getFailedPodsCount();
$job->getStartTime();             // ?Carbon
$job->getDurationInSeconds();
$job->getStatusMessage();

// The job's pods carry the job-name label
$cluster->pods()->setNamespace('shop')->whereLabel('job-name', $job->getName())->get();
$job->podsSelectors();            // ['job-name' => 'reindex-catalogue']

CronJoby

$cluster->cronJobs()
    ->setNamespace('shop')
    ->setName('nightly-report')
    ->setSchedule('0 3 * * *')
    ->setConcurrencyPolicy('Forbid')            // default 'Allow'
    ->setSuccessfulJobsHistoryLimit(3)
    ->setFailedJobsHistoryLimit(1)
    ->setSpec('jobTemplate', [
        'spec' => [
            'template' => [
                'spec' => [
                    'restartPolicy' => 'Never',
                    'containers' => [[
                        'name' => 'report',
                        'image' => 'registry.example.com/shop-cli:v1.4.0',
                        'command' => ['php', 'artisan', 'reports:nightly'],
                    ]],
                ],
            ],
        ],
    ])
    ->create();

$report = $cluster->cronJobs()->setNamespace('shop')->withName('nightly-report')->find();
$report->getSchedule();             // '0 3 * * *'
$report->getLastScheduleTime();     // ?Carbon
$report->getLastSuccessfulTime();   // ?Carbon

// Pause it
$report->suspend()->update();
$report->isSuspended();             // true

setJobTemplate() prijíma aj Job a getJobTemplate() ho vráti. Limity histórie sa bez nastavenia čítajú ako 3 a 1.

Horizontal pod autoscalery

$cluster->horizontalPodAutoscalers()
    ->setNamespace('shop')
    ->setName('checkout')
    ->setScaleTargetRef('Deployment', 'checkout')   // apiVersion defaults to apps/v1
    ->setMinReplicas(2)
    ->setMaxReplicas(10)
    ->setSpec('metrics', [[
        'type' => 'Resource',
        'resource' => ['name' => 'cpu', 'target' => ['type' => 'Utilization', 'averageUtilization' => 70]],
    ]])
    ->create();

$hpa = $cluster->horizontalPodAutoscalers()->setNamespace('shop')->withName('checkout')->find();
$hpa->getCurrentReplicas();
$hpa->getDesiredReplicas();

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.