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ístup | Trieda | Kind | apiVersion | Rozsah |
|---|---|---|---|---|
clusterRoles() | ClusterRole | ClusterRole | rbac.authorization.k8s.io/v1 | Klaster |
clusterRoleBindings() | ClusterRoleBinding | ClusterRoleBinding | rbac.authorization.k8s.io/v1 | Klaster |
configMaps() | ConfigMap | ConfigMap | v1 | Namespace |
cronJobs() | CronJob | CronJob | batch/v1 | Namespace |
daemonSets() | DaemonSet | DaemonSet | apps/v1 | Namespace |
deployments() | Deployment | Deployment | apps/v1 | Namespace |
endpoints() | Endpoints | Endpoints | v1 | Namespace |
events() | Event | Event | v1 | Namespace |
horizontalPodAutoscalers() | HorizontalPodAutoscaler | HorizontalPodAutoscaler | autoscaling/v2 | Namespace |
ingresses() | Ingress | Ingress | networking.k8s.io/v1 | Namespace |
jobs() | Job | Job | batch/v1 | Namespace |
limitRanges() | LimitRange | LimitRange | v1 | Namespace |
namespaces() | KubernetesNamespace | Namespace | v1 | Klaster |
networkPolicies() | NetworkPolicy | NetworkPolicy | networking.k8s.io/v1 | Namespace |
nodes() | Node | Node | v1 | Klaster |
persistentVolumes() | PersistentVolume | PersistentVolume | v1 | Klaster |
persistentVolumeClaims() | PersistentVolumeClaim | PersistentVolumeClaim | v1 | Namespace |
pods() | Pod | Pod | v1 | Namespace |
replicaSets() | ReplicaSet | ReplicaSet | apps/v1 | Namespace |
replicationControllers() | ReplicationController | ReplicationController | v1 | Namespace |
resourceQuotas() | ResourceQuota | ResourceQuota | v1 | Namespace |
roles() | Role | Role | rbac.authorization.k8s.io/v1 | Namespace |
roleBindings() | RoleBinding | RoleBinding | rbac.authorization.k8s.io/v1 | Namespace |
secrets() | Secret | Secret | v1 | Namespace |
serviceAccounts() | ServiceAccount | ServiceAccount | v1 | Namespace |
services() | Service | Service | v1 | Namespace |
statefulSets() | StatefulSet | StatefulSet | apps/v1 | Namespace |
storageClasses() | StorageClass | StorageClass | storage.k8s.io/v1 | Klaster |
traefikIngressRoutes() | TraefikIngressRoute | IngressRoute | traefik.group | Namespace |
traefikMiddlewares() | TraefikMiddleware | Middleware | traefik.group | Namespace |
traefikServersTransports() | TraefikServersTransport | ServersTransport | traefik.group | Namespace |
traefikTlsOptions() | TraefikTlsOption | TLSOption | traefik.group | Namespace |
traefikTlsStores() | TraefikTlsStore | TLSStore | traefik.group | Namespace |
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 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.