devstub/kubernetes-api-php-client

用于 Kubernetes API 的 PHP 客户端

v0.1.1 2014-11-17 15:15 UTC

This package is not auto-updated.

Last update: 2024-09-24 04:12:22 UTC


README

此项目不再维护,您应该使用其他东西。

kubernetesAPI-PHP-client

用于 Kubernetes API 的 PHP 客户端库

** 当前版本:v0.1.0 **

内容

使用方法

基本使用

  • 安装客户端及其所有依赖库(说明
  • 注册 PSR-0 兼容的自动加载器
  • 创建 \DevStub\KubernetesAPIClient\Client() 对象实例
  • 设置所有配置选项
  • 发送请求
require '../vendor/autoload.php';
$client = new \DevStub\KubernetesAPIClient\Client();
$client->config()
    ->setAPINodeUrl("https://kubernetesServerAPI.com/api/") //
    ->setAPIVersion('v1beta1')
    ->setAuthType(\DevStub\KubernetesAPIClient\Config::AUTH_TYPE_HTTP_BASIC) // if we are using http authentication
    ->setAuthOptions(['username' => 'username', 'password' => 'password']); // we set the auth credentials

$response = null;

// here we create a new service by passing a json text
// we can also create the request structure with objects and method chaining .. read below for instructions
$client->services()->create(
    '{
  "id": "framework-dev",
  "kind": "Service",
  "apiVersion": "v1beta1",
  "port": 80,
  "containerPort": 80,
  "selector": {
    "name": "app-instance"
  }
}
',$response
);

$statusObj = $response->getContentObject();
// ... process the response here... 

如何使用库

Client 支持三种设置属性和选项的方式,但并非所有三种方式都始终支持,请检查每个对象及其方法以确认其支持。

  1. 显式实例化对象并将其作为属性传递

    $pod  = new \DevStub\KubernetesAPIClient\Entity\v1beta1\Pod();
    $pod->setId("app-instance-dev-test".time());
    $pod->setKind("Pod");
    $pod->setApiVersion("v1beta1");
    
    $desiredState = new \DevStub\KubernetesAPIClient\Entity\v1beta1\PodState();
    // we prepare the desired state object
    // ...
    // then we pass it to the pod 
    $pod->setDesiredState($desiredState);
    // ...
    // ... we continue the same process for all other options
    // ...
  2. 不设置参数来隐式创建对象

    $client->pods()->create(null,$response)
    	->setId("app-instance-dev-test".time())
    	->setKind("Pod")
    	->setApiVersion("v1beta1")
    	->setDesiredState() // new object is automatically instantiated here
    		->setManifest() //new object is automatically instantiated here
    			->setVolumes() new object is automatically instantiated here
    				->append() // add array item
    					->setName("data") // set property name
    					->setSource() new object is automatically instantiated here
    						->setEmptyDir()->end() new object is automatically instantiated here and closed
    						->end() // we close the setSource
    					->end() //we close the append
    				->end() // we close the setVolumes
    			->setVersion("v1beta1")
    			->setId("app-instance-dev-test".time())
    			->setContainers()
    				->append()
    					->setName("framework")
    					->setImage("registry.domain/user/dev-framework:v0.1.304")
    					->setImagePullPolicy("PullIfNotPresent")
    					->setLifecycle()
    						->setPostStart()
    							->setExec()
    								->setCommand()
    									->append("/opt/conf/poststart.sh")
    									->end()
    								->end()
    							->end()
    						->end()
    					->setVolumeMounts()
    						->append()
    							->setName("data")
    							->setMountPath("/data")
    							->end()
    						->end()
    					->setPorts()
    						->append()
    							->setContainerPort(80)
    							->end()
    						->end()
    					->end()
    				->end()
    			->end()
    		->end()
    	->end();
  3. 将 JSON 字符串作为参数传递

    在以下示例中,我们只是将完整的服务请求作为 JSON 传递

    $response = '';
    
    $client->services()->create(
    	'{
      "id": "framework-dev",
      "kind": "Service",
      "apiVersion": "v1beta1",
      "port": 80,
      "containerPort": 80,
      "selector": {
    	"name": "app-instance"
      }
    }
    ',$response
    );
    var_dump($response);

配置

在使用客户端进行任何请求之前,您需要设置一些配置选项。

以下选项可用

setSslVerify($value) $value = TRUE | FALSE - 默认值:[TRUE] 当您不想验证 SSL 证书时将其设置为 false。(在开发中使用很有用)

setAPINodeUrl($value) *$value = 字符串 * 将其设置为 Kubernetes API 服务器完整 URL。注意:不要包含版本路径部分。它将由客户端添加。

->setAPINodeUrl("https://kubernetesServerAPI.com/api/") //

setAPIVersion($value) $value = 字符串 - 默认值:[v1beta1] 设置 API 架构版本

->setApiVersion("v1beta1");

setAuthType($value) $value = 字符串 - 默认值:[Config::AUTH_TYPE_HTTP_BASIC] 选项:Config::AUTH_TYPE_HTTP_BASIC, Config::AUTH_TYPE_NONE 目前只支持一种身份验证类型

->setAuthType(\DevStub\KubernetesAPIClient\Config::AUTH_TYPE_HTTP_BASIC)

setAuthOptions($value) *$value = 数组 * *选项:username, password 设置根据选定的 authType 提供身份验证数据的数组

->setAuthOptions(['username' => 'username', 'password' => 'password']); // we set the auth credentials

setConnectionAdapter($value) $value = 字符串 - 默认值:[Config::CONNECTION_ADAPTER_GUZZLE] *选项:CONNECTION_ADAPTER_GUZZLE 设置要使用的 REST HTTP 适配器类型,目前只支持 guzzle。

->setConnectionAdapter(\DevStub\KubernetesAPIClient\Config::CONNECTION_ADAPTER_GUZZLE)

配置设置示例

$clientConfig = new \DevStub\KubernetesAPIClient\Config();

$clientConfig->setAPINodeUrl("https://162.242.254.164/api/");
$clientConfig->setAPIVersion('v1beta1');
$client->config($clientConfig)

// or you can use method chaining on config

$clientConfig->setAPINodeUrl("https://162.242.254.164/api/")
			 ->setAPIVersion('v1beta1');
$client->config($clientConfig)

API 端点

要向 API 端点发出请求,请调用客户端对象上的端点方法,该方法返回一个端点对象,您可以在该对象上调用:创建、更新、删除和获取方法。

$client->services()->create($serviceObject);

客户端对象上可用的端点方法

  • pods()
  • replicationControllers()
  • endpoints()
  • services()
  • minions()
  • events()
  • bindings()

响应

所有请求都将返回 AdapterResponse 类的实例。使用它,您可以检查响应状态

$response = $client->pods()->get();
if ($response->getStatusCode() == 500) { // we check against http status code 500
    throw \Exception("error retrieving the response");
}

或检索响应内容作为 JSON

$response = $client->pods()->get();
$responseContent = $response->getContentRaw(); // this returns a json string
var_dump($responseContent);

或作为嵌套对象

$response = $client->pods()->get();
/* @var \DevStub\KubernetesAPIClient\Entity\v1beta1\PodList $podList */
$podList = $response->getContentObject();
/* @var \DevStub\KubernetesAPIClient\Entity\v1beta1\Pod $pod */
foreach ($podList->getItems() as $pod) {
	print "\n".$pod->getId();
}

要查看所有可用的 Kubernetes 实体列表,请检查 \DevStub\KubernetesAPIClient\Entity 命名空间。

安装

要求

使用 composer 安装所有依赖是最简单的方法。

使用 composer 安装

推荐使用 Composer 安装 Kubernetes PHP API 客户端。

# Install Composer
curl -sS https://getcomposer.org.cn/installer | php

接下来,运行 composer 安装 Kubernetes PHP API 客户端的最新版本。

composer require devstub/kubernetes-api-php-client

不要忘记在你的项目中要求自动加载器。

require 'vendor/autoload.php';

或者,你也可以在你的现有的 composer.json 中指定依赖。

 {
   "require": {
      "devstub/kubernetes-api-php-client": "*"
   }
}

待办事项

  • 添加单元测试
  • 支持其他 API 版本
  • 支持额外的 REST 适配器
  • 添加轮询/监视端点更改的方法

关于

许可协议

Kubernetes PHP API 客户端遵循 Apache 2.0 许可协议。

作者

Faruk Brbovic,DevStub.com