appwrite-labs / php-k8s
Control your Kubernetes clusters with this PHP-based Kubernetes client. It supports any form of authentication, the exec API, and it has an easy implementation for CRDs.
Fund package maintenance!
Requires
- php: ^8.3
- ext-json: *
- composer/semver: ^3.4
- guzzlehttp/guzzle: ^7.10
- illuminate/macroable: ^12.0
- illuminate/support: ^12.0
- ratchet/pawl: ^0.4.3
- symfony/process: ^7.4
Requires (Dev)
- laravel/pint: ^1.29
- mockery/mockery: ^1.6
- orchestra/testbench: ^10.9.0
- phpunit/phpunit: ^11.5
- vimeo/psalm: ^6.16.1
Suggests
- ext-yaml: YAML extension is used to read or generate YAML from PHP K8s internal classes.
- aws/aws-sdk-php: Required for native EKS token generation without AWS CLI.
This package is auto-updated.
Last update: 2026-06-25 17:07:14 UTC
README
Note: This is a maintained fork of renoki-co/php-k8s with PHP 8.3+ support and additional features. See fork differences for details.
Control your Kubernetes clusters with this PHP-based Kubernetes client. It supports any form of authentication, the exec API, and it has an easy implementation for CRDs.
For Laravel projects, you might want to use renoki-co/laravel-php-k8s (from the upstream project). Note that compatibility with this fork is not guaranteed.
✨ Features
- Full Kubernetes API Support: 33+ resource types including Pods, Deployments, Services, and more
- Exec & Logs: Execute commands and stream logs from containers
- Watch API: Real-time event streaming for resource changes
- JSON Patch & Merge Patch: RFC 6902 and RFC 7396 support for precise updates
- Custom Resources (CRDs): Easy CRD integration with macros
- PHP 8.2+ Modern Features: Enums, type hints, readonly properties, match expressions
- Laravel Integration: First-class Laravel support via laravel-php-k8s
- Flexible Authentication: Kubeconfig, tokens, certificates, exec plugins, AWS EKS native, OpenShift OAuth
- YAML Import: Load resources directly from YAML files with templating
🚀 Quick Start
use RenokiCo\PhpK8s\K8s; use RenokiCo\PhpK8s\KubernetesCluster; $cluster = new KubernetesCluster('http://127.0.0.1:8080'); $pod = K8s::pod($cluster) ->setName('my-pod') ->setContainers([ K8s::container()->setName('app')->setImage('nginx:latest') ]) ->create(); echo $pod->getName(); // my-pod echo $pod->getPodPhase(); // Returns PodPhase enum
🔐 Advanced Authentication
AWS EKS Native
// No AWS CLI required - pure PHP token generation $cluster = KubernetesCluster::fromUrl($eksClusterUrl) ->withEksAuth('cluster-name', 'us-east-2') ->withCaCertificate('/path/to/ca.crt');
OpenShift OAuth
// Direct username/password authentication $cluster = KubernetesCluster::fromUrl($openshiftUrl) ->withOpenShiftAuth('username', 'password');
Exec Credential Plugins
// Automatically supported from kubeconfig $cluster = KubernetesCluster::fromKubeConfigYamlFile('~/.kube/config'); // Works with AWS EKS, GKE, AKS, and custom credential providers
📦 Requirements
- PHP 8.2 or higher
- Laravel 11.x or 12.x (for Laravel integration)
- Kubernetes cluster access
📃 Documentation
Read the full documentation at php-k8s.cuppett.dev
This fork is based on renoki-co/php-k8s. See the project history and upstream documentation for more details.
🐛 Testing
vendor/bin/phpunit
🤝 Contributing
Please see CONTRIBUTING for details.
🔒 Security
If you discover any security related issues, please email steve@cuppett.com instead of using the issue tracker.
🎉 Credits
- Original Author: Alex Renoki
- Fork Maintainer: Stephen Cuppett
- All Contributors