prezly/kubernetes-client

极简Kubernetes API客户端实现

0.2.1 2021-07-14 10:16 UTC

This package is auto-updated.

Last update: 2024-09-05 19:37:25 UTC


README

Prezly的Kubernetes客户端是一个PHP编写的极简Kubernetes API客户端实现,允许您列出、获取、更新、删除和监视您Kubernetes集群中的资源。

Tests Status

特性

  • 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软件。