https://github.com/tomplus/k8s-multi-tool
Set of tools to manage your Kubernetes clusters
https://github.com/tomplus/k8s-multi-tool
asyncio exec k8s kubernetes logs pod python tail
Last synced: about 2 months ago
JSON representation
Set of tools to manage your Kubernetes clusters
- Host: GitHub
- URL: https://github.com/tomplus/k8s-multi-tool
- Owner: tomplus
- License: mit
- Created: 2018-09-13T19:27:41.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2018-09-29T19:14:14.000Z (over 7 years ago)
- Last Synced: 2025-12-08T22:04:11.797Z (7 months ago)
- Topics: asyncio, exec, k8s, kubernetes, logs, pod, python, tail
- Language: Python
- Size: 23.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# k8s-multi-tool (k8smtool)
[](https://badge.fury.io/py/k8smtool)
[](https://pypi.python.org/pypi/k8smtool)
Set of tools to manage your Kubernetes clusters.
# Requirements
* Python >= 3.5.2
* [kubernetes_asyncio](https://github.com/tomplus/kubernetes_asyncio)
# Instalation
This application is distributed as a Python package. You can install it globally
in your system:
```
pip install k8smtool
```
or in the virtual environment:
```
# create virtalenv
virtualenv -ppython3 env
# activate
. env/bin/activate
# instalation
pip install k8smtool
```
# Usage
All scripts read the confguration from `.kube/config` or from a file defined by `KUBECONFIG` as _kubectl_ does it.
Common arguments:
Positional arguments - `[filters [filters ...]]` are optional and can have values:
* `@namespace` - get objects from `namespace` only
* `~name` - get objects with name like `name*`
* `labe~value` - get objects which has `label` equals `value`
This argument can be joined and repeated like this `@namespace1 @namespace2 ~my-pod-name stage~dev`
## Actions on PODs
The script `pod.py` can list pods, images, execute commands or print logs from PODs.
```
usage: pod.py [-h] [--cmd CMD] [--batch-size BATCH_SIZE] [--follow]
[--lines LINES]
{delete-broken,exec,images,ls,tail} [filters [filters ...]]
Execute actions on pods
positional arguments:
{delete-broken,exec,images,ls,tail}
command to execute
filters @namespace, ~name, label-name~value
optional arguments:
-h, --help show this help message and exit
Option for `exec` command::
--cmd CMD command to execute
--batch-size BATCH_SIZE
batch size
Option for `tail` command::
--follow follow logs
--lines LINES show the last lines
```
### list pods
```
# all pods from all namespaces
pod.py ls
# pods from "my-namespace"
pod.py ls @my-namespace
# pods with name like "dns"
pod.py ls ~dns
# pods with label team=bears
pod.py ls team~bears
```
Example output:
```
NAMESPACE PODS VERSION STATUS CONDITIONS NODE
kube-system event-exporter-v0.1.9-5cfff98cdb-9ksr6 v0.1.9;v0.2.2 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-j0vb
kube-system fluentd-gcp-v2.0.17-cffq6 2.0.17;v0.2.2 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-j0vb
kube-system fluentd-gcp-v2.0.17-ltfff 2.0.17;v0.2.2 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-mnpm
kube-system heapster-v1.5.2-56fb496f65-ffffs v1.5.2;v0.2.2;1.8.1 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-j0vb
kube-system kube-dns-56dc69f5bd-mmffw 1.14.10;1.14.10;v0.2.3;1.14.10 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-mnpm
kube-system kube-dns-autoscaler-7db4ffb9b7-f5hbx 1.1.2-r2 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-j0vb
kube-system kube-proxy-cluster-1-default-pool-b4ff0116-mfxf v1.9.7-gke.5 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-mmx0
kube-system kubernetes-dashboard-85c74f8997-kbfwf v1.8.3 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-mmx0
kube-system metrics-server-v0.2.1-7f8dd98c8f-ftkfs v0.2.1;1.8.1 Running Initialized+PodScheduled+Ready cluster-1-default-pool-b43b0116-mnpm
```
Notice: VERSION contains version of images of all containers within POD.
### list used images
```
pod.py images @default
```
Example output:
```
IMAGE NAMESACE POD-STATUS
gcr.io/google-samples/hello-app:1.0 default Running
quay.io/coreos/configmap-reload:v0.0.1 default Running
quay.io/coreos/prometheus-config-reloader:v0.22.1 default Running
quay.io/coreos/prometheus-operator:v0.22.1 default Running
quay.io/prometheus/prometheus:v2.3.1 default Running
tpimages/airly-exporter:latest default Running
```
### send exec command to multiple pods
```
# exec command "date" on all pods from namespace "default" (in the same time)
pod.py exec @default --cmd date
# exec command in batch mode (eg. 2 pods at a time)
pod.py exec @default --cmd date --batch-size 2
# you will be asked about command
pod.py exec @default
```
### tail logs from multiple pods
```
# print out last 10 lines from all pods with the name like "kube-dns"
pod.py tail ~kube-dns --lines 10
# follow new logs
pod.py tail ~kube-dns --follow
```
### delete "broken" pods
```
# delete pods which are not in ready state and running (eg. failed, evicted, completed jobs)
pod.py delete-broken
```
## Searching Kubernetes' objects
Script `search.py` searches Kubernetes objects.
```
usage: search.py [-h] query [filters [filters ...]]
Search objects
positional arguments:
query regexp pattern
filters @namespace, ~name, label-name~value
optional arguments:
-h, --help show this help message and exit
```
Example:
```
# list objects which contains phrase "prometheus" in defintion
search.py prometheus
# list objects which have defined port=8080
search.py "port.*?8080"
```
Output:
```
NAMESPACE TYPE OBJECT RESULT
default pod prometheus-operator-6dd95b9d7b-gghrf 'ports': [{'container_port': 8080,
kube-system endpoints default-http-backend 'ports': [{'name': 'http', 'port': 8080, 'protoco
kube-system pod l7-default-backend-6497bcdb4d-bvwhq 'port': 8080,
kube-system service default-http-backend ,"spec":{"ports":[{"name":"http","port":80,"protocol":"TCP","targetPort":8080}],"select
```
NOTICE: `RESULT` contains this part of object's definition where searched phrase was found
## Recently created objects
The script `just.py` lists newly created objects.
```
usage: just.py [-h] [--age AGE] [filters [filters ...]]
List objects created about 5 minutes ago
positional arguments:
filters @namespace, ~name, label-name~value
optional arguments:
-h, --help show this help message and exit
--age AGE
```
Example:
```
# list objects created about 1h ago
just.py --age 3600
```