nucleardog / k8s
Kubernetes API 库
v0.0.8
2024-04-22 11:31 UTC
Requires
- php: ^8.2
- illuminate/collections: ^8.0|^9.0|^10.0|^11.0
- travisghansen/kubernetes-client-php: dev-master
Suggests
- symfony/yaml: for reading YAML to server-side apply
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
除非适用法律要求或书面同意,否则在许可证下分发的软件按照“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言规定权限和限制,请参阅许可证。