A PHP client for managing a Kubernetes cluster. Control your Kubernetes resources by manipulating manifests, as PHP array, through the Kubernetes HTTP API. The client supports all Kubernetes API V1.28 resources, but it's possible to define new resource usable with the client. This is a fork and a rework from Maclof Kuebrnetes library.
- Config Maps
- Delete Options
- EndPoints
- Endpoints
- Events
- Namespaces
- Nodes
- Persistent Volume
- Persistent Volume Claims
- Pods
- Quota
- Replica Sets
- Replication Controllers
- Secrets
- Service Account
- Services
- Horizontal Pad Autoscaler
- CronJobs
- Jobs
- Cron Jobs
- Daemon Set
- Deployments
- ReplicaSet
- Daemon Sets
- Ingresses
- Network Policies
- Certificates
- Issuers
- ClusterRole
- ClusterRoleBinding
- Role
- RoleBinding
- Subnamespace Anchor
use Teknoo\Kubernetes\Client;
$client = new Client([
'master' => 'http://master.mycluster.com',
]);
// Find pods by label selector
$pods = $client->pods()
->setLabelSelector(
[
'name' => 'test',
'version' => 'a',
]
)->find();
// Both setLabelSelector and setFieldSelector can take an optional
// second parameter which lets you define inequality based selectors (ie using the != operator)
$pods = $client->pods()
->setLabelSelector(
['name' => 'test'],
['env' => 'staging']
)->find();
// Find pods by field selector
$pods = $client->pods()->setFieldSelector(['metadata.name' => 'test'])->find();
// Find first pod with label selector (same for field selector)
$pod = $client->pods()->setLabelSelector(['name' => 'test'])->first();
use Teknoo\Kubernetes\Client;
$client = new Client([
'master' => 'http://master.mycluster.com',
]);
use Teknoo\Kubernetes\Client;
// Parsing from the file data directly
$client = Client::loadFromKubeConfig('kubeconfig yaml data');
// Parsing from the file path
$client = Client::loadFromKubeConfigFile('~/.kube/config.yml');
use Teknoo\Kubernetes\Client;
$repositories = new RepositoryRegistry();
$repositories['things'] = MyApp\Kubernetes\Repository\ThingRepository::class;
$client = new Client(
[
'master' => 'https://master.mycluster.com',
],
$repositories
);
$client->things(); //ThingRepository
The below example uses an array to specify the replication controller's attributes. You can specify the attributes either as an array, JSON encoded string or a YAML encoded string. The second parameter to the model constructor is the data type and defaults to array.
use Teknoo\Kubernetes\Model\ReplicationController;
$replicationController = new ReplicationController([
'metadata' => [
'name' => 'nginx-test',
'labels' => [
'name' => 'nginx-test',
],
],
'spec' => [
'replicas' => 1,
'template' => [
'metadata' => [
'labels' => [
'name' => 'nginx-test',
],
],
'spec' => [
'containers' => [
[
'name' => 'nginx',
'image' => 'nginx',
'ports' => [
[
'containerPort' => 80,
'protocol' => 'TCP',
],
],
],
],
],
],
],
]);
if ($client->replicationControllers()->exists($replicationController->getMetadata('name'))) {
$client->replicationControllers()->update($replicationController);
} else {
$client->replicationControllers()->create($replicationController);
}
$client->replicationControllers()->apply($replicationController);
// or
$replicationController = $client->replicationControllers()->setLabelSelector(['name' => 'nginx-test'])->first();
$client->replicationControllers()->delete($replicationController);
You can also specify options when performing a deletion, eg. to perform cascading delete
use Teknoo\Kubernetes\Model\DeleteOptions;
$client->replicationControllers()->delete(
$replicationController,
new DeleteOptions(['propagationPolicy' => 'Background'])
);
This project is free and will remain free. It is fully supported by the activities of the EIRL. If you like it and help me maintain it and evolve it, don't hesitate to support me on Patreon or Github.
Thanks :) Richard.
EIRL Richard Déloge - https://deloge.io - Lead developer. SASU Teknoo Software - https://teknoo.software
Teknoo Software is a PHP software editor, founded by Richard Déloge, as part of EIRL Richard Déloge. Teknoo Software's goals : Provide to our partners and to the community a set of high quality services or software, sharing knowledge and skills.
Kubernetes Client is licensed under the MIT License - see the licenses folder for details.
To install this library with composer, run this command :
composer require teknoo/kubernetes-client
This library requires :
* PHP 8.1+
* A PHP autoloader (Composer is recommended)
* Symfony/Yaml.
* Illuminate/Collections
You are welcome to contribute to this project. Fork it on Github