useRenokiCo\PhpK8s\K8s;$container =K8s::container()->setName('mysql')->setImage('mysql','5.7')->setPorts([ ['name'=>'mysql','protocol'=>'TCP','containerPort'=>3306], ]);$pod =K8s::pod()->setName('mysql')->setLabels(['statefulset-name'=>'mysql'])// needs statefulset-name: mysql so that ->getPods() can work->setContainers([$mysql]);$svc =$this->cluster->service()->setName('mysql')->setPorts([ ['protocol'=>'TCP','port'=>3306,'targetPort'=>3306], ])->create();$pvc =$this->cluster->persistentVolumeClaim()->setName('mysql-pvc')->setCapacity(1,'Gi')->setAccessModes(['ReadWriteOnce'])->create();$sts =$this->cluster->statefulSet()->setName('mysql')->setSelectors(['matchLabels'=> ['tier'=>'backend']])->setReplicas(1)->setService($svc)->setTemplate($pod)->setVolumeClaims([$pvc])->create();
Pod Template Retrieval
Stateful Sets rely on pods, so you can get the pod template as K8sPod class:
To get the pods, the Pod template must have the statefulset-name label set. This way, the labelSelector API parameter is issued and you may retrieve the associated pods:
metadata:name: [here it goes the statefulset name]spec:template:metadata:labels:statefulset-name: [here it goes the statefulset name]
You can retrieve the pods as resources controlled by the Stateful Set by issuing ->getPods():
If you cannot declare the statefulset-name label or simply want to use something else, you may call selectPods from the resource:
useRenokiCo\PhpK8s\Kinds\K8sStatefulSet;K8sStatefulSet::selectPods(function (K8sStatefulSet $sts) {// $sts is the current StatefulSetreturn ['some-label'=>'some-label-value','some-other-label'=>"{$sts->getName()}-custom-name", ];});
Scaling
The Scaling API is available via a K8sScale resource:
$scaler = $sts->scaler();$scaler->setReplicas(3)->update(); // autoscale the Stateful Set to 3 replicas
Shorthand, you can use scale() directly from the Stateful Set: