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(); // truesetJobTemplate() 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 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.