keboola / k8s-client
Keboola K8S 客户端库
2.1.0
2024-03-12 15:49 UTC
Requires
- php: ^8.2
- keboola/retry: ^0.5.1
- kubernetes/php-client: 1.26.10
- kubernetes/php-runtime: ^1.0.10
Requires (Dev)
- keboola/coding-standard: ^15.0
- phpstan/phpstan: ^1.9
- phpstan/phpstan-phpunit: ^1.1
- phpunit/phpunit: ^9.5
- sempro/phpunit-pretty-print: ^1.4
- symfony/dotenv: ^6.2
- symfony/filesystem: ^6.1
- dev-main
- 2.1.0
- 2.0.0
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- dev-pepa_k8s_deployment
- dev-erik-PST-2051
- dev-odin-PST-1670
- dev-pepa_PST-777_tableIngoGenerator
- dev-roman-pst-1710
- dev-pepa_auth_adminToken
- dev-rrik-om-ci-fixup
- dev-erik-PST-850-part2
- dev-erik-GCP-374-part1
- dev-erik-GCP-374-part3
- dev-erik-GCP-472
- dev-odin-GCP-374-c
- dev-zajca-event-grid
- dev-azure-event-grid
- dev-erik-PST-780-pokuse
- dev-pepa_azClientNamedArgs
This package is auto-updated.
Last update: 2024-09-20 10:14:06 UTC
README
高级 K8S 客户端库。它基于 kubernetes/php-client
库,但在许多方面进行了增强
- 支持连接到多个集群
- 自动处理结果类型(您不需要检查结果是否符合预期,是
状态
还是其他类型) - 在网络问题情况下集成重试机制
- 高级操作,如一次创建多个资源,使用
waitWhileExists
等待资源存在等
使用方法
要创建客户端,请使用提供的客户端工厂之一
GenericClientFacadeFactory
如果您有集群凭据InClusterClientFacadeFactory
如果您在一个可以访问 K8S API 的 Pod 中运行
<?php use Keboola\K8sClient\ClientFacadeFactory\GenericClientFacadeFactory; use Kubernetes\Model\Io\K8s\Api\Core\V1\Container; use Kubernetes\Model\Io\K8s\Api\Core\V1\Pod; $clientFactory = new GenericClientFacadeFactory($retryProxy, $logger); $client = $clientFactory->createClusterClient( 'https://api.k8s-cluster.example.com', 'secret-token', 'var/k8s/caCert.pem', 'default' ); $pod = new Pod([ 'metadata' => [ 'name' => 'my-pod', ], 'spec' => [ 'restartPolicy' => 'Never', 'containers' => [ new Container([ 'name' => 'app', 'image' => 'alpine', 'command' => ['sh', '-c', 'echo hello; sleep 3; echo bye'], ]), ], ], ]); // create the pod $client->createModels([ $pod, ]); // wait for pod to finish do { $pod = $client->pods()->getStatus($pod->metadata->name); if (in_array($pod->status->phase, ['Succeeded', 'Failed'], true)) { break; } sleep(1); } while (true); // check pod logs $client->pods()->readLog($pod->metadata->name); // delete the pod $client->deleteModels([ $pod, ]);
开发
先决条件
- 配置了
az
和aws
CLI 工具(运行az login
和aws configure --profile keboola-dev-platform-services
) - 安装了
terraform
(https://www.terraform.io) 和jq
(https://stedolan.github.io/jq) 以设置本地环境 - 安装了
docker
以运行和开发库
TL;DR
export NAME_PREFIX= # your name/nickname to make your resource unique & recognizable cat <<EOF > ./provisioning/local/terraform.tfvars name_prefix = "${NAME_PREFIX}" EOF terraform -chdir=./provisioning/local init -backend-config="key=k8s-client/${NAME_PREFIX}.tfstate" terraform -chdir=./provisioning/local apply ./provisioning/local/update-env.sh azure # or aws docker compose run --rm dev composer install docker compose run --rm dev composer ci
实现新 API
迄今为止,仅实现了我们需要的少数几个 K8S API。要实现新 API,请执行以下操作
- 在
Keboola\K8sClient\ApiClient
中创建 API 客户端包装器- 这是一个围绕
kubernetes/php-client
API 类的包装器,负责处理结果
- 这是一个围绕
- 将包装器添加到
KubernetesApiClientFacade
- 通过构造函数注入
kubernetes/php-client
客户端 - 将新资源支持添加到方法签名
- 通过构造函数注入
- 更新
GenericClientFacadeFactory
以向KubernetesApiClientFacade
提供新 API 类
许可
MIT 许可,请参阅 LICENSE 文件。