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

Prístup k zdrojom

Každý zdroj balíka má typovaný prístup — na fasáde, naviazaný na predvolený klaster, aj na každom objekte Cluster — ktorý vráti nový objekt zdroja naviazaný na klaster. Každý prístup číta mapu resources pri volaní, takže meno nasmerované na vlastnú podtriedu vráti túto triedu; vlastné mená sa vyriešia rovnako:

use RoundlyConsulting\KubernetesApi\Facades\Kubernetes;
use RoundlyConsulting\KubernetesApi\Resources\Deployment;

Kubernetes::pods();                // Resources\Pod, on the default cluster

$cluster = Kubernetes::cluster('production');

$cluster->pods();                  // Resources\Pod
$cluster->deployments();           // Resources\Deployment
$cluster->namespaces();            // Resources\KubernetesNamespace
$cluster->traefikIngressRoutes();  // Resources\TraefikIngressRoute

// Namespaced resources target the cluster's default namespace unless you set one
$cluster->pods()->setNamespace('shop')->get();

// List across every namespace
$cluster->pods()->allNamespaces()->get();

// Cluster-scoped resources ignore setNamespace()
$cluster->nodes()->get();

// Any resource class, with or without an accessor
Kubernetes::resource(Deployment::class)->setNamespace('shop')->get();
$cluster->resource(Deployment::class)->setNamespace('shop')->get();
Deployment::make()->setCluster($cluster)->setNamespace('shop')->get();

Vstavané zdroje

PrístupTriedaKindapiVersionRozsah
clusterRoles()ClusterRoleClusterRolerbac.authorization.k8s.io/v1Klaster
clusterRoleBindings()ClusterRoleBindingClusterRoleBindingrbac.authorization.k8s.io/v1Klaster
configMaps()ConfigMapConfigMapv1Namespace
cronJobs()CronJobCronJobbatch/v1Namespace
daemonSets()DaemonSetDaemonSetapps/v1Namespace
deployments()DeploymentDeploymentapps/v1Namespace
endpoints()EndpointsEndpointsv1Namespace
events()EventEventv1Namespace
horizontalPodAutoscalers()HorizontalPodAutoscalerHorizontalPodAutoscalerautoscaling/v2Namespace
ingresses()IngressIngressnetworking.k8s.io/v1Namespace
jobs()JobJobbatch/v1Namespace
limitRanges()LimitRangeLimitRangev1Namespace
namespaces()KubernetesNamespaceNamespacev1Klaster
networkPolicies()NetworkPolicyNetworkPolicynetworking.k8s.io/v1Namespace
nodes()NodeNodev1Klaster
persistentVolumes()PersistentVolumePersistentVolumev1Klaster
persistentVolumeClaims()PersistentVolumeClaimPersistentVolumeClaimv1Namespace
pods()PodPodv1Namespace
replicaSets()ReplicaSetReplicaSetapps/v1Namespace
replicationControllers()ReplicationControllerReplicationControllerv1Namespace
resourceQuotas()ResourceQuotaResourceQuotav1Namespace
roles()RoleRolerbac.authorization.k8s.io/v1Namespace
roleBindings()RoleBindingRoleBindingrbac.authorization.k8s.io/v1Namespace
secrets()SecretSecretv1Namespace
serviceAccounts()ServiceAccountServiceAccountv1Namespace
services()ServiceServicev1Namespace
statefulSets()StatefulSetStatefulSetapps/v1Namespace
storageClasses()StorageClassStorageClassstorage.k8s.io/v1Klaster
traefikIngressRoutes()TraefikIngressRouteIngressRoutetraefik.groupNamespace
traefikMiddlewares()TraefikMiddlewareMiddlewaretraefik.groupNamespace
traefikServersTransports()TraefikServersTransportServersTransporttraefik.groupNamespace
traefikTlsOptions()TraefikTlsOptionTLSOptiontraefik.groupNamespace
traefikTlsStores()TraefikTlsStoreTLSStoretraefik.groupNamespace

Triedy sú v RoundlyConsulting\KubernetesApi\Resources. Trieda pre Namespace sa volá KubernetesNamespace, pretože namespace je v PHP rezervované slovo; prístup je naďalej namespaces(). apiVersion v1 smeruje na /api/v1, každá iná verzia na /apis/<verzia>. Zdroje Traefiku berú skupinu z kľúča traefik.group (predvolene traefik.io/v1alpha1).

Obmedzenie na namespace

namespace() obmedzí klaster na jeden namespace a všetko, čo vydá, je doň pripnuté: každá požiadavka ide do tohto namespace a každý pokus z neho odísť — setNamespace('other'), allNamespaces(), ignoreNamespace(), nové obmedzenie klastra či naviazanie zdroja na klaster obmedzený inde — vyhodí NamespaceScopeException. Pripnuté zostávajú aj položky, ktoré vráti obmedzený výpis:

use RoundlyConsulting\KubernetesApi\Facades\Kubernetes;

$shop = Kubernetes::namespace('shop');           // or Kubernetes::cluster('production')->namespace('shop')

$shop->pods()->whereLabel('app', 'web')->get();  // GET /api/v1/namespaces/shop/pods?labelSelector=app%3Dweb
$shop->pods()->setNamespace('kube-system');      // NamespaceScopeException
$shop->pods()->allNamespaces();                  // NamespaceScopeException
$shop->nodes()->get();                           // cluster-scoped kinds are unaffected
$shop->namespaceScope();                         // 'shop'

// A soft default instead of a boundary — setNamespace() still works
$cluster = Kubernetes::cluster('production')->withDefaultNamespace('shop');

Namespace pri položke v clusters či withDefaultNamespace() je len predvolená hodnota; hranicou je až namespace(). Klastrových typov — nodov, namespace, cluster rolí a podobne — sa obmedzenie netýka.

Obísť ho nedokážu ani mená. Pred odoslaním požiadavky sa skontroluje každá hodnota, ktorá ide do cesty URL — čokoľvek iné vyhodí InvalidResourceException a nič sa neodošle, takže withName('../../kube-system/secrets/admin-token') z namespace shop neunikne:

  • Mená musia byť jeden segment cesty: nie . ani .., bez /, % či medzier. Navyše sa percentuálne kódujú.
  • Namespace musia byť platné DNS-1123 labely.
  • Plurály a apiVersion musia zodpovedať gramatike Kubernetes.
  • Výnimkou je surová úniková cesta request($method, $path): pošle cestu presne tak, ako ju zadáte, a obmedzenie na namespace sa na ňu nevzťahuje.

Operácie podľa typu

  • scale() — deploymenty, replica sety, stateful sety a replication controllery.
  • rolloutRestart() — deploymenty, stateful sety a daemon sety.
  • logs(), streamLogs() a exec() — pody.
  • Všetko ostatné — get, find, create, update, updateOrCreate, patch, delete, watch, dryRun — funguje na každom zdroji.

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.