pyk

A simple, yet useful Kubernetes toolkit in Python


Keywords
Kubernetes, containers, appops
License
Apache-2.0
Install
pip install pyk==0.3.2

Documentation

pyk: a simple, yet useful Kubernetes toolkit in Python

version downloads build status

This is a simple, yet useful toolkit that supports you in writing microservices-style apps with Kubernetes.

The pyk toolkit is meant to be used by tools such as kploy or from your own app. It is manifest-oriented, that is, it expects the resource definitions in YAML files; currently pyk's API is as follows:

  • execute an arbitrary operation and return the resource, if any: execute_operation(method='GET', ops_path='', payload='')
  • return a description of a resource: describe_resource(resource_path)
  • delete a resource: delete_resource(resource_path)
  • create a Replication Controller (RC): create_rc(manifest_filename, namespace='default')
  • scale a RC: scale_rc(manifest_filename, namespace='default', num_replicas=0)
  • create a service: create_svc(manifest_filename, namespace='default')

Dependencies

All of these are included in the setup:

  • Python Requests (note: I've tested with version 2.6.2)
  • Python PyYAML (note: I've tested with version 3.11)

Using pyk

A simple usage pattern is, for example, to create a Replication Controller:

import pprint
from pyk import toolkit

pyk_client = toolkit.KubeHTTPClient() # assumes local API Server at http://localhost:8080
_, rc_url = pyk_client.create_rc(manifest_filename='manifest/nginx-webserver-rc.yaml')
rc = pyk_client.describe_resource(rc_url)
pprint.pprint(rc.json())

Testing pyk

In order to run the tests, use test_pyk.py $KUBERNETES_API_SERVER_URL, for example:

$ ./test_pyk.py http://52.33.181.164/service/kubernetes

Above runs all the tests. You can also specify a particular test, like so:

$ ./test_pyk.py http://52.33.181.164/service/kubernetes "init app"
================================================================================
= Test case: init a simple app

2015-11-28T05:13:16 From manifest/nginx-webserver-rc.yaml I created the RC "webserver-rc" at /api/v1/namespaces/default/replicationcontrollers/webserver-rc
2015-11-28T05:13:17 From manifest/webserver-svc.yaml I created the service "webserver-svc" at /api/v1/namespaces/default/services/webserver-svc
2015-11-28T05:13:18 Found following endpoints:
2015-11-28T05:13:18 /api/v1/namespaces/default/endpoints/k8sm-scheduler ->
{
  "addresses": [
    {
      "ip": "10.0.3.45"
    }
  ],
  "ports": [
    {
      "port": 25504,
      "protocol": "TCP"
    }
  ]
}
2015-11-28T05:13:18 /api/v1/namespaces/default/endpoints/kubernetes ->
{
  "addresses": [
    {
      "ip": "10.0.3.45"
    }
  ],
  "ports": [
    {
      "port": 25502,
      "protocol": "TCP"
    }
  ]
}
2015-11-28T05:13:18 /api/v1/namespaces/default/endpoints/webserver-svc ->