-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactor: Convert README.rst to README.md (#12)
* Refactor: remove README.rst * Refactor: Create README.md * Refactor: Changed values in pyproject.toml
- Loading branch information
Showing
3 changed files
with
190 additions
and
241 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
new-pykube | ||
========= | ||
|
||
Pykube (new-pykube) is a lightweight Python 3.6+ client library for Kubernetes. | ||
|
||
This is a fork of [pykube-ng](https://codeberg.org/hjacobs/pykube-ng) which is no longer maintained. | ||
|
||
|
||
## Features | ||
|
||
* HTTP interface using requests using kubeconfig for authentication | ||
* Python native querying of Kubernetes API objects | ||
|
||
|
||
## Installation | ||
|
||
To install pykube, use pip: | ||
```bash | ||
pip install pykube-ng | ||
``` | ||
|
||
|
||
## Interactive Console | ||
|
||
The `pykube` library module can be run as an interactive console locally for quick exploration. | ||
It will automatically load `~/.kube/config` to provide the `api` object, and it loads pykube classes (`Deployment`, `Pod`, ..) into local context: | ||
|
||
```bash | ||
python3 -m pykube | ||
>>> [d.name for d in Deployment.objects(api)] | ||
``` | ||
## Usage | ||
### Query for all ready pods in a custom namespace: | ||
```python | ||
import operator | ||
import pykube | ||
|
||
api = pykube.HTTPClient(pykube.KubeConfig.from_file()) | ||
pods = pykube.Pod.objects(api).filter(namespace="gondor-system") | ||
ready_pods = filter(operator.attrgetter("ready"), pods) | ||
``` | ||
### Access any attribute of the Kubernetes object: | ||
```python | ||
pod = pykube.Pod.objects(api).filter(namespace="gondor-system").get(name="my-pod") | ||
pod.obj["spec"]["containers"][0]["image"] | ||
``` | ||
### Selector query: | ||
```python | ||
pods = pykube.Pod.objects(api).filter( | ||
namespace="gondor-system", | ||
selector={"gondor.io/name__in": {"api-web", "api-worker"}}, | ||
) | ||
pending_pods = pykube.objects.Pod.objects(api).filter( | ||
field_selector={"status.phase": "Pending"} | ||
) | ||
``` | ||
### Watch query: | ||
```python | ||
watch = pykube.Job.objects(api, namespace="gondor-system") | ||
watch = watch.filter(field_selector={"metadata.name": "my-job"}).watch() | ||
|
||
# watch is a generator: | ||
for watch_event in watch: | ||
print(watch_event.type) # 'ADDED', 'DELETED', 'MODIFIED' | ||
print(watch_event.object) # pykube.Job object | ||
``` | ||
### Create a Deployment: | ||
```python | ||
obj = { | ||
"apiVersion": "apps/v1", | ||
"kind": "Deployment", | ||
"metadata": { | ||
"name": "my-deploy", | ||
"namespace": "gondor-system" | ||
}, | ||
"spec": { | ||
"replicas": 3, | ||
"selector": { | ||
"matchLabels": { | ||
"app": "nginx" | ||
} | ||
}, | ||
"template": { | ||
"metadata": { | ||
"labels": { | ||
"app": "nginx" | ||
} | ||
}, | ||
"spec": { | ||
"containers": [ | ||
{ | ||
"name": "nginx", | ||
"image": "nginx", | ||
"ports": [ | ||
{"containerPort": 80} | ||
] | ||
} | ||
] | ||
} | ||
} | ||
} | ||
} | ||
pykube.Deployment(api, obj).create() | ||
``` | ||
### Delete a Deployment: | ||
```python | ||
obj = { | ||
"apiVersion": "apps/v1", | ||
"kind": "Deployment", | ||
"metadata": { | ||
"name": "my-deploy", | ||
"namespace": "gondor-system" | ||
} | ||
} | ||
pykube.Deployment(api, obj).delete() | ||
``` | ||
### Check server version: | ||
```python | ||
api = pykube.HTTPClient(pykube.KubeConfig.from_file()) | ||
api.version | ||
``` | ||
## Requirements | ||
* Python 3.6+ | ||
* requests (included in `install_requires`) | ||
* PyYAML (included in `install_requires`) | ||
## Local Development | ||
You can run pykube against your current kubeconfig context, e.g. local [Minikube](https://github.com/kubernetes/minikube): | ||
```bash | ||
poetry install | ||
poetry run python3 | ||
>>> import pykube | ||
>>> config = pykube.KubeConfig.from_file() | ||
>>> api = pykube.HTTPClient(config) | ||
>>> list(pykube.Deployment.objects(api)) | ||
``` | ||
To run PEP8 (flake8) checks and unit tests including coverage report: | ||
```bash | ||
make test | ||
``` | ||
## License | ||
The code in this project is licensed under the [Apache License, version 2.0](./LICENSE) | ||
## Contributing | ||
Easiest way to contribute is to provide feedback! We would love to hear what you like and what you think is missing. | ||
Create an issue and we will take a look. PRs are welcome. | ||
## Code of Conduct | ||
In order to foster a kind, inclusive, and harassment-free community, this project follows the [Contributor Covenant Code of Conduct](http://contributor-covenant.org/version/1/4/). |
Oops, something went wrong.