prezly / kubernetes-client
极简Kubernetes API客户端实现
Requires
- php: >=7.4
- ext-curl: *
- ext-json: *
- guzzlehttp/guzzle: ^6.0|^7.0
- psr/log: ^1.0
Requires (Dev)
- mockery/mockery: ^1.4
- peridot-php/peridot: ^1.19
README
Prezly的Kubernetes客户端是一个PHP编写的极简Kubernetes API客户端实现,允许您列出、获取、更新、删除和监视您Kubernetes集群中的资源。
特性
- Kubernetes Watch API 支持
- 无限的认证功能
- 无需了解任何特定Kubernetes资源:它支持您拥有的所有资源或集合
- PHP 7.4+
- PHP 8.0
- 语义化版本控制
- 测试
安装
使用 Composer 包管理器将 Prezly的Kubernetes客户端 添加到您的项目中
composer require prezly/kubernetes-client
认证
Prezly的Kubernetes客户端 接受一个预配置的Guzzle HTTP客户端作为构造函数参数,因此您可以将其配置为任何您可能具有的异国情调的连接、认证或代理设置。
use GuzzleHttp\Client as HttpClient; use Prezly\KubernetesClient\KubernetesClient; $http = new HttpClient([ 'base_uri' => 'https://kubernetes.local/', 'verify' => false, ]); $client = new KubernetesClient($http);
还有一个 KubernetesClientFactory
,它提供了一个流畅的API来配置KubernetesClient,用于大多数常见用例
<?php use Prezly\KubernetesClient\KubernetesClientFactory as Factory; $client = Factory::connectTo('https://kubernetes.companyintranet.local') ->withAccessToken(getenv('KUBERNETES_ACCESS_TOKEN')) ->withCertificateAuthority('/app/kubernetes.ca') ->constructClient(); // Interact with Kubernetes API with $client
日志记录
Prezly的Kubernetes客户端 可以配置任何PSR日志记录实现,以提供应用程序监控的内部日志。这对于长时间运行的资源监视的 守护进程应用程序 尤为推荐。
use Prezly\KubernetesClient\KubernetesClient; use Psr\Log\LoggerInterface; $logger = new MyCustomLogger(); assert($logger instanceof LoggerInterface); $client = new KubernetesClient($http, $logger);
或者,您也可以使用 KubernetesClientFactory
流畅API配置日志记录器
use Prezly\KubernetesClient\KubernetesClientFactory as Factory; $client = Factory::connectTo('https://kubernetes.companyintranet.local') ->withLogger(new MyCustomLogger()) ->constructClient();
API交互
一旦您有了 KubernetesClient 实例,您就可以使用简单的REST客户端抽象与Kubernetes API进行交互
$client->get($uri, $queryParams)
— 执行GET
请求$client->post($uri, $body, $queryParams)
— 执行POST
请求$client->put($uri, $body, $queryParams)
— 执行PUT
请求$client->patch($uri, $body, $queryParams)
— 执行PATCH
请求$client->delete($uri, $queryParams)
— 执行DELETE
请求
<?php /** @var \Prezly\KubernetesClient\KubernetesClient $client */ $ingresses = $client->get('/apis/networking.k8s.io/v1/namespaces/default/ingresses'); foreach ($ingresses['items'] as $ingress) { $client->delete("/apis/networking.k8s.io/v1/namespaces/default/ingresses/{$ingress['metadata']['name']}"); }
监视资源
KubernetesClient 实现了一个简单但强大的抽象,用于访问Kubernetes Watch API
/** @var \Prezly\KubernetesClient\KubernetesClient $client */ $client->watch($url, $watcher, $initializer = null);
一个 watch()
调用一个无限守护进程进程开始,该进程将从任何HTTP错误中 自我恢复并重试。为了更好地监视监视调用期间发生的情况,强烈建议配置一个日志记录器。
/** @var \Prezly\KubernetesClient\KubernetesClient $client */ $client->watch('/apis/networking.k8s.io/v1/namespaces/default/ingresses', function (array $event) { if ($event['type'] === 'ADDED') { echo "Ingress `{$event['object']['metadata']['name']}` was added\n"; } });
在启动监视器之前初始化状态
您还可以提供一个 初始化器,在 监视 开始之前初始化状态
/** @var \Prezly\KubernetesClient\KubernetesClient $client */ $client->watch( '/apis/networking.k8s.io/v1/namespaces/default/ingresses', function (array $event) { if ($event['type'] === 'ADDED') { echo "Ingress `{$event['object']['metadata']['name']}` was added\n"; } }, function (array $ingresses) { foreach ($ingresses['items'] as $ingress) { echo "Ingress `{$ingress['metadata']['name']}` existed before the watcher started\n"; } } );
停止守护进程
默认情况下,监视器将无限期运行,但您可以从您的 监视 回调中返回 false
以强制它退出。
/** @var \Prezly\KubernetesClient\KubernetesClient $client */ $client->watch('/apis/networking.k8s.io/v1/namespaces/default/ingresses', function (array $event) { if ($event['type'] === 'DELETED') { return false; // force exit } });
致谢
由 Prezly 带来 ❤️ —— 适用于更高效、更快沟通的PR软件。