Kubernetes API 库

v0.0.8 2024-04-22 11:31 UTC

This package is auto-updated.

Last update: 2024-09-22 16:34:41 UTC


README

一个正在开发的库,用于使用PHP开发Kubernetes API,具有高级抽象和丰富的资源。

用法

实例化

该库严重依赖于底层的 kubernetes-client-php 库。先实例化那个库,然后再实例化此库作为其包装器

<?php
// Instantiate underlying client
$config = KubernetesClient\Config::LoadFromDefault();
$client = new KubernetesClient\Client($config);

// Instantiate this library
$k8s = new Nucleardog\K8s\Kubernetes($client);

读取资源

类型通常通过在Kubernetes中注册的复数名称来识别(例如,如果您使用 kubectl get services -> services)。资源最初通过这种方式过滤,然后您可以从那里进一步过滤资源。

<?php

// Fetch all services
$services = $k8s->services->all();

// Fetch a single service by name
$service = $k8s->services->find('my-service');

// Fetch a single service by name, throwing an exception if not found
$service = $k8s->services->findOrFail('my-service');

// Fetch a service by its labels
$service = $k8s->services->whereLabels(new Collection([
	'app.kubernetes.io/name' => 'my-service',
]));

创建资源

可以通过向 create() 传递所需字段来创建任何资源。只有在您调用 save 时,资源才会实际上提交到 Kubernetes

<?php

// Data can be specified during creation
$my_service = $k8s->services->create([
	'metadata' => [
		'name' => 'my-service',
		'labels' => [
			'app.kubernetes.io/name' => 'example-project',
		],
	],
	'spec' => [
		'ports' => [],
		'selector' => [
			'app.kubernetes.io/name' => 'example-project',
		],
	],
]);

// Or by setting fields on the object afterwards
$my_service['spec']['ports'][0] = [
	'name' => 'http',
	'port' => 80,
	'protocol' => 'TCP',
	'targetPort' => 80,
];

// You must save the resource to actually have these changes reflected anywhere.
$my_service->save();

修改资源

要更新资源上的值,只需加载它,进行修改,然后调用 save

<?php

// Load the resource
$service = $k8s->services->findOrFail('my-service');

// Change some stuff
$service['spec']['selector']['app.kubernetes.io/part-of'] = 'examples';

// Save it
$service->save();

您也可以以类似的方式删除资源

<?php

// Load the resource
$service = $k8s->services->findOrFail('my-service');

// Remove it
$service->delete();

监视资源

可以在任何资源类型上注册监视器。库将为您处理将事件解码为资源实例

<?php

$k8s->services->on(Nucleardog\K8s\Watcher\EventType::ADDED)->call(
	function(Nucleardog\K8s\EventType $event, Nucleardog\K8s\Kind\Pod $pod) {
		echo sprintf('Pod Added: Namespace=%s Name=%s', $pod->namespace, $pod->name).PHP_EOL;
	},
);

$k8s->watcher->start()->listen();

如果资源类不存在,您将得到 Nucleardog\K8s\Resources\Resource 的一个实例。

命名空间

所有调用都可以通过调用 namespace() 来预先覆盖默认命名空间。

<?php

$service = $k8s->namespace('kube-system')->services->findOrFail('traefik');

您还可以在库实例化期间设置选项,以覆盖未指定时使用的命名空间

<?php

// Instantiate underlying client
$config = KubernetesClient\Config::LoadFromDefault();
$client = new KubernetesClient\Client($config);

// Instantiate optiosn

$options = new Nucleardog\K8s\KubernetesOptions(
	namespace: 'my-namespace',
);

// Instantiate this library
$k8s = new Nucleardog\K8s\Kubernetes($client, $options);

应用文件

此库可以从JSON和YAML文件中加载资源定义。

<?php

$resources = $k8s->json()->fromFile('my-file.json');
//$resources = $k8s->yaml()->fromFile('my-file.yaml');
// These also support fromStream and fromString

一旦加载,您可以“应用”资源

<?php

$resources->each(fn($resource) => $resource->apply());

或“删除”资源

<?php

$resources->each(fn($resource) => $resource->delete());

示例

请参阅示例以获取更多信息。

感谢

  • Travis Glenn Hansen 为 kubernetes-client-php 做出了贡献,这是一个“无废话”的PHP客户端,处理了所有底层认证和通信问题,因此我们可以在其之上添加所有这些废话。

法律

版权 2024 Adam Pippin hello@adampippin.ca

根据Apache许可证第2版(“许可证”);除非遵守许可证规定或书面同意,否则不得使用本项目。您可以在以下位置获得许可证副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可证下分发的软件按照“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言规定权限和限制,请参阅许可证。