承接 teknoo/kubernetes-client 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

teknoo/kubernetes-client

最新稳定版本:2.0.3

Composer 安装命令:

composer require teknoo/kubernetes-client

包简介

A simple yet elegant client for accessing and controlling a Kubernetes cluster.

README 文档

README

Latest Stable Version Latest Unstable Version Total Downloads License PHPStan

A PHP client for managing a Kubernetes cluster. Control your Kubernetes resources by manipulating manifests, as PHP array, through the Kubernetes HTTP API. The client supports all Kubernetes API V1.28 resources, but it's possible to define new resource usable with the client. This is a fork and a rework from Maclof Kuebrnetes library.

Supported API Features

v1

  • Config Maps
  • Delete Options
  • EndPoints
  • Endpoints
  • Events
  • Namespaces
  • Nodes
  • Persistent Volume
  • Persistent Volume Claims
  • Pods
  • Quota
  • Replica Sets
  • Replication Controllers
  • Secrets
  • Service Account
  • Services

autoscaling/v2

  • Horizontal Pad Autoscaler

batch/v1

  • CronJobs
  • Jobs

batch/v1beta1

  • Cron Jobs

apps/v1

  • Daemon Set
  • Deployments
  • ReplicaSet

extensions/v1beta1

  • Daemon Sets

networking.k8s.io/v1

  • Ingresses
  • Network Policies

certmanager.k8s.io/v1

  • Certificates
  • Issuers

rbac.authorization.k8s.io/v1

  • ClusterRole
  • ClusterRoleBinding
  • Role
  • RoleBinding

hnc.x-k8s.io/v1

  • Subnamespace Anchor

Basic Usage

use Teknoo\Kubernetes\Client;

$client = new Client([
	'master' => 'http://master.mycluster.com',
]);

// Find pods by label selector
$pods = $client->pods()
    ->setLabelSelector(
        [
            'name'    => 'test',
            'version' => 'a',
        ]
    )->find();

// Both setLabelSelector and setFieldSelector can take an optional
// second parameter which lets you define inequality based selectors (ie using the != operator)
$pods = $client->pods()
    ->setLabelSelector(
        ['name' => 'test'], 
	    ['env' => 'staging']
    )->find();

// Find pods by field selector
$pods = $client->pods()->setFieldSelector(['metadata.name' => 'test'])->find();

// Find first pod with label selector (same for field selector)
$pod = $client->pods()->setLabelSelector(['name' => 'test'])->first();

Authentication Examples

Insecure HTTP

use Teknoo\Kubernetes\Client;
$client = new Client([
	'master' => 'http://master.mycluster.com',
]);

Connecting from a kubeconfig file

use Teknoo\Kubernetes\Client;

// Parsing from the file data directly
$client = Client::loadFromKubeConfig('kubeconfig yaml data');

// Parsing from the file path
$client = Client::loadFromKubeConfigFile('~/.kube/config.yml');

Extending a library

Custom repositories

use Teknoo\Kubernetes\Client;

$repositories = new RepositoryRegistry();
$repositories['things'] = MyApp\Kubernetes\Repository\ThingRepository::class;

$client = new Client(
    [
        'master' => 'https://master.mycluster.com',
    ], 
    $repositories
);

$client->things(); //ThingRepository

Usage Examples

Create/Update a Replication Controller

The below example uses an array to specify the replication controller's attributes. You can specify the attributes either as an array, JSON encoded string or a YAML encoded string. The second parameter to the model constructor is the data type and defaults to array.

use Teknoo\Kubernetes\Model\ReplicationController;

$replicationController = new ReplicationController([
	'metadata' => [
		'name' => 'nginx-test',
		'labels' => [
			'name' => 'nginx-test',
		],
	],
	'spec' => [
		'replicas' => 1,
		'template' => [
			'metadata' => [
				'labels' => [
					'name' => 'nginx-test',
				],
			],
			'spec' => [
				'containers' => [
					[
						'name'  => 'nginx',
						'image' => 'nginx',
						'ports' => [
							[
								'containerPort' => 80,
								'protocol'      => 'TCP',
							],
						],
					],
				],
			],
		],
	],
]);

if ($client->replicationControllers()->exists($replicationController->getMetadata('name'))) {
	$client->replicationControllers()->update($replicationController);
} else {
	$client->replicationControllers()->create($replicationController);
}
$client->replicationControllers()->apply($replicationController);
// or

Delete a Replication Controller

$replicationController = $client->replicationControllers()->setLabelSelector(['name' => 'nginx-test'])->first();
$client->replicationControllers()->delete($replicationController);

You can also specify options when performing a deletion, eg. to perform cascading delete

use Teknoo\Kubernetes\Model\DeleteOptions;

$client->replicationControllers()->delete(
	$replicationController,
	new DeleteOptions(['propagationPolicy' => 'Background'])
);

Support this project

This project is free and will remain free. It is fully supported by the activities of the EIRL. If you like it and help me maintain it and evolve it, don't hesitate to support me on Patreon or Github.

Thanks :) Richard.

Credits

EIRL Richard Déloge - https://deloge.io - Lead developer. SASU Teknoo Software - https://teknoo.software

About Teknoo Software

Teknoo Software is a PHP software editor, founded by Richard Déloge, as part of EIRL Richard Déloge. Teknoo Software's goals : Provide to our partners and to the community a set of high quality services or software, sharing knowledge and skills.

License

Kubernetes Client is licensed under the 3-Clause BSD License - see the licenses folder for details.

Installation & Requirements

To install this library with composer, run this command :

composer require teknoo/kubernetes-client

This library requires :

* PHP 8.1+
* A PHP autoloader (Composer is recommended)
* Symfony/Yaml.
* Illuminate/Collections

Contribute :)

You are welcome to contribute to this project. Fork it on Github

统计信息

  • 总下载量: 7.9k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 4
  • 点击次数: 1
  • 依赖项目数: 2
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: BSD-3-Clause
  • 更新时间: 2023-01-02