Giter Club home page Giter Club logo

kubernetes-client's Introduction

Kubernetes Client

Build Status

A PHP client for managing a Kubernetes cluster.

Last tested with v1.9.6 on a production cloud hosted cluster.

Installation using Composer

$ composer require maclof/kubernetes-client

Supported API Features

v1

  • Nodes
  • Namespaces
  • Pods
  • Replica Sets
  • Replication Controllers
  • Services
  • Secrets
  • Events
  • Config Maps
  • Endpoints
  • Persistent Volume
  • Persistent Volume Claims

batch/v1

  • Jobs

batch/v1beta1

  • Cron Jobs

apps/v1

  • Deployments

extensions/v1beta1

  • Daemon Sets
  • Ingresses

traefik.containo.us/v1alpha1

  • IngressRouteTCPs
  • IngressRoutes
  • Middlewares

networking.k8s.io/v1

  • Network Policies

Basic Usage

<?php

require __DIR__ . '/vendor/autoload.php';

use Maclof\Kubernetes\Client;

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

// Find pods by label selector
$pods = $client->pods()->setLabelSelector([
	'name'    => 'test',
	'version' => 'a',
])->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();

Using JSONPath

It allows you to query status data.

$jobStartTime = $client->jobs()->find()->getJsonPath('$.status.startTime')[0];

Authentication Examples

Insecure HTTP

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

Using TLS Certificates (Client Certificate Validation)

$client = new Client([
	'master'      => 'https://master.mycluster.com',
    	'ca_cert'     => '/etc/kubernetes/ssl/ca.crt',
    	'client_cert' => '/etc/kubernetes/ssl/client.crt',
    	'client_key'  => '/etc/kubernetes/ssl/client.key',
]);

Using Basic Auth

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

Using a Service Account

$client = new Client([
	'master'  => 'https://master.mycluster.com',
	'ca_cert' => '/var/run/secrets/kubernetes.io/serviceaccount/ca.crt',
	'token'   => '/var/run/secrets/kubernetes.io/serviceaccount/token',
]);

Extending a library

Custom repositories

$repositories = new RepositoryRegistry();

$repositories['things'] = MyApp\Kubernetes\Repository\ThingRepository;

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

$client->things() //ThingRepository

Usage Examples

Create/Update a Replication Controller

use Maclof\Kubernetes\Models\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);
}

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 Maclof\Kubernetes\Models\DeleteOptions;

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

See the API documentation for an explanation of the options:

https://kubernetes.io/docs/api-reference/v1.6/#deleteoptions-v1-meta

kubernetes-client's People

Contributors

annprog avatar avimoto avatar bkolobara avatar claygorman avatar dhemeier avatar glennschmidt avatar gregy avatar jakubkulhan avatar jjtroberts avatar leonboot avatar luceos avatar lxm avatar m24te28 avatar maclof avatar mwadon avatar shanefrightidentos avatar stackout avatar sz-po avatar tvass avatar weechow avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.