├── kubesort └── README.md /kubesort: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 4 | # Creator and Maintainer: AATHITH_RAJENDRAN 5 | # Project: https://github.com/AATHITH/kubernetes/kubesort 6 | # version: 0.3.0 7 | # 8 | #uncomment next line for debugging 9 | # set -x 10 | 11 | cmd=$4 12 | option3=$4 13 | [ -z "$cmd" ] && cmd="help"; 14 | 15 | pod () { 16 | declare -A arg 17 | arg[name]=".metadata.name" 18 | arg[status]=".status.phase" 19 | arg[restarts]=".status.containerStatuses[0].restartCount" 20 | arg[age]=".status.startTime" 21 | arg[ip]=".status.podIP" 22 | arg[node]=".spec.nodeName" 23 | option1="pod" 24 | option2=${arg[$cmd]} 25 | } 26 | deployment () { 27 | declare -A arg 28 | arg[name]=".metadata.name" 29 | arg[uptodate]=".status.updatedReplicas" 30 | arg[available]=".metadata.availableReplicas" 31 | arg[age]=".metadata.creationTimestamp" 32 | arg[containers]=".spec.template.spec.containers[*].name" 33 | arg[images]=".spec.template.spec.containers[*].image" 34 | option1="deployment" 35 | option2=${arg[$cmd]} 36 | } 37 | service () { 38 | declare -A arg 39 | arg[name]=".metadata.name" 40 | arg[type]=".spec.type" 41 | arg[clusterip]=".spec.clusterIP" 42 | arg[port]=".spec.ports[*].port" 43 | arg[age]=".metadata.creationTimestamp" 44 | option1="service" 45 | option2=${arg[$cmd]} 46 | } 47 | help () { 48 | cat << EOF 49 | Missing something? need Help? 50 | kubesort kubectl get option1 option2 option3 51 | 52 | Available options are 53 | option1: 54 | (po/pod/pods), (deployments/deployment/deploy), (svc/service/services) 55 | 56 | option2(po/pod/pods): 57 | name, status, restarts, age, ip, node 58 | 59 | option2(deployments/deployment/deploy): 60 | name, uptodate, available, age, containers, images 61 | 62 | option2(svc/service/services): 63 | name, type, clusterIP, externalIP, ports, age 64 | 65 | option3: namespace-name or all 66 | EOF 67 | exit 68 | } 69 | 70 | if [[ "$1" = "kubectl" && "$2" = "get" ]]; 71 | then 72 | case "$3" in 73 | pod|pods|po) 74 | pod 75 | ;; 76 | deploy|deployments|deployment) 77 | deployment 78 | ;; 79 | svc|service|services) 80 | service 81 | ;; 82 | *) 83 | help 84 | ;; 85 | esac 86 | 87 | case "$#" in 88 | 4) 89 | option3=default 90 | kubectl get $option1 --sort-by=$option2 -n $option3 -o wide 91 | ;; 92 | 5) 93 | if [ $5 = "all" ]; 94 | then 95 | option3="--all-namespaces" 96 | kubectl get $option1 --sort-by=$option2 $option3 -o wide 97 | else 98 | option3=$5 99 | kubectl get $option1 --sort-by=$option2 -n $option3 -o wide 100 | fi 101 | ;; 102 | *) 103 | help 104 | ;; 105 | esac 106 | else 107 | help 108 | fi 109 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## What is this KUBESORT? 2 | 3 | This a Bash Script that will help you forget the kubectl's default, difficult to remember, sorting feature by making it simpler.
4 | `kubectl` has its own `--sort-by=json-path` feature for sorting but **kubesort** will makes the sorting easier. 5 | 6 | ## Why you need KUBESORT? 7 | 8 | 1) It's simple and beginner-friendly. 9 | 2) Helps you sort the results from `kubectl` easily. 10 | 3) You don't have to type the long command `kubectl --sort-by=.status.containerStatuses[0].restartcount get po` to sort the pod by their `RESTART` count, just type `kubesort` in front of your `kubectl get` cmd like this `kubesort kubectl get po restart`, that's it. 11 | 12 | 13 | ## 2 Step Installation: 14 | Linux: 15 | Since kubesort is written in Bash, KUBESORT is expected to run on any POSIX environment that has Bash installed. 16 | 17 | 1) Download the kubesort scripts:
18 | `git clone https://github.com/aathith/kubesort /usr/local/bin/kubesort` 19 | 2) Make the script executable:
20 | `chmod +x /usr/local/bin/kubesort` 21 | 22 | 23 | ## Usage: 24 | ``` 25 | SYNTAX: kubesort kubectl get option1 option2 option3 26 | AVAILABLE OPTIONS: 27 | option1: 28 | (po/pod/pods), (deployments/deployment/deploy), (svc/service/services) 29 | 30 | option2(po/pod/pods): 31 | name, status, restarts, age, ip, node 32 | 33 | option2(deployments/deployment/deploy): 34 | name, uptodate, available, age, containers, images 35 | 36 | option2(svc/service/services): 37 | name, type, clusterIP, externalIP, ports, age 38 | 39 | option3: namespace-name or all 40 | ``` 41 | ## Samples 42 | 43 |
Sorting Pod 44 |

45 | 46 | 47 | 48 | ``` 49 | root@k8-master-01:~/kubesort# kubesort kubectl get po restarts kube-system 50 | NAME READY STATUS RESTARTS AGE 51 | etcd-k8-master-01 1/1 Running 0 58d 52 | tiller-deploy-688ddc6c9-h6424 1/1 Running 0 26d 53 | kube-apiserver-k8-master-01 1/1 Running 0 58d 54 | kube-controller-manager-k8-master-01 1/1 Running 1 58d 55 | kube-scheduler-k8-master-01 1/1 Running 1 58d 56 | kube-proxy-sclt9 1/1 Running 2 56d 57 | kube-flannel-ds-amd64-l579g 1/1 Running 2 56d 58 | kube-proxy-l592g 1/1 Running 7 93d 59 | coredns-5c98db65d4-tw75g 1/1 Running 8 60d 60 | kube-flannel-ds-amd64-8krvm 1/1 Running 9 93d 61 | metricbeat-5rcb4 1/1 Running 13 88d 62 | kube-proxy-mlnrc 1/1 Running 13 93d 63 | kube-flannel-ds-amd64-lbxbr 1/1 Running 14 93d 64 | filebeat-9hh95 1/1 Running 55 23d 65 | 66 | root@k8-master-01:~/kubesort# kubesort kubectl get po restart kubernetes-dashboard 67 | NAME READY STATUS RESTARTS AGE 68 | dashboard-metrics-scraper-6c554969c6-8x2fc 1/1 Running 0 40d 69 | kubernetes-dashboard-56c5f95c6b-8c89b 1/1 Running 3 40d 70 | 71 | root@k8-master-01:~/kubesort# kubesort kubectl get po age all 72 | NAMESPACE NAME READY STATUS RESTARTS AGE 73 | kube-system kube-proxy-l592g 1/1 Running 7 93d 74 | kube-system metricbeat-5rcb4 1/1 Running 13 88d 75 | kube-system etcd-k8-master-01 1/1 Running 0 58d 76 | kube-system coredns-5c98db65d4-tw75g 1/1 Running 8 60d 77 | kubernetes-dashboard kubernetes-dashboard-56c5f95c6b-8c89b 1/1 Running 3 40d 78 | kubernetes-dashboard dashboard-metrics-scraper-6c554969c6-8x2fc 1/1 Running 0 40d 79 | my-prometheus prometheus-operator-5bcd9f9d5c-9kwvg 1/1 Running 0 35d 80 | kube-system filebeat-7wg6k 1/1 Running 55 23d 81 | default prometheus-784586f976-fq6q8 1/1 Running 0 9d 82 | dev hello-app-5f9d7479bd-kc4kr 1/1 Running 0 2d6h 83 | olm catalog-operator-5bdf7fc7b-52qhw 1/1 Running 0 5h21m 84 | 85 | root@k8-master-01:~/kubesort# kubesort kubectl get po name dev 86 | NAME READY STATUS RESTARTS AGE 87 | hello-app-5f9d7479bd-5mzmc 1/1 Running 0 2d6h 88 | hello-app-5f9d7479bd-db9s2 1/1 Running 0 2d6h 89 | hello-app-5f9d7479bd-kc4kr 1/1 Running 0 2d6h 90 | ``` 91 |

92 |
93 |
Sorting Deployments 94 |

95 | 96 | ``` 97 | root@k8-master-01:~# kubesort kubectl get deployment name 98 | NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR 99 | alert-checker 1/1 1 1 155d alert-checker aathith/testing:alert-checker app=alert-checker 100 | prom-trail 1/1 1 1 113d prom-trail aathith/testing:prometheus-url-annotation app=prom-trail 101 | prometheus 1/1 1 1 115d prometheus prom/prometheus app=prometheus-server 102 | 103 | root@k8-master-01:~# kubesort kubectl get deployment name all 104 | NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR 105 | default alert-checker 1/1 1 1 155d alert-checker aathith/testing:alert-checker app=alert-checker 106 | kube-system coredns 2/2 2 2 169d coredns k8s.gcr.io/coredns:1.6.5 k8s-app=kube-dns 107 | kubernetes-dashboard dashboard-metrics-scraper 1/1 1 1 57d dashboard-metrics-scraper kubernetesui/metrics-scraper:v1.0.1 k8s-app=dashboard-metrics-scraper 108 | kube-system digitalocean-cloud-controller-manager 1/1 1 1 168d digitalocean-cloud-controller-manager digitalocean/digitalocean-cloud-controller-manager:v0.1.6 app=digitalocean-cloud-controller-manager 109 | kubernetes-dashboard kubernetes-dashboard 1/1 1 1 57d kubernetes-dashboard kubernetesui/dashboard:v2.0.0-beta5 k8s-app=kubernetes-dashboard 110 | kube-system metrics-server 1/1 1 1 151d metrics-server k8s.gcr.io/metrics-server-amd64:v0.3.6 k8s-app=metrics-server 111 | nginx-ingress nginx-ingress 1/1 1 1 57d nginx-ingress nginx/nginx-ingress:1.6.3 app=nginx-ingress 112 | default prom-trail 1/1 1 1 113d prom-trail aathith/testing:prometheus-url-annotation app=prom-trail 113 | default prometheus 1/1 1 1 115d prometheus prom/prometheus app=prometheus-server 114 | 115 | root@k8-master-01:~# kubesort kubectl get deployment containers all 116 | NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR 117 | default alert-checker 1/1 1 1 155d alert-checker aathith/testing:alert-checker app=alert-checker 118 | kube-system coredns 2/2 2 2 169d coredns k8s.gcr.io/coredns:1.6.5 k8s-app=kube-dns 119 | kubernetes-dashboard dashboard-metrics-scraper 1/1 1 1 57d dashboard-metrics-scraper kubernetesui/metrics-scraper:v1.0.1 k8s-app=dashboard-metrics-scraper 120 | kube-system digitalocean-cloud-controller-manager 1/1 1 1 168d digitalocean-cloud-controller-manager digitalocean/digitalocean-cloud-controller-manager:v0.1.6 app=digitalocean-cloud-controller-manager 121 | kubernetes-dashboard kubernetes-dashboard 1/1 1 1 57d kubernetes-dashboard kubernetesui/dashboard:v2.0.0-beta5 k8s-app=kubernetes-dashboard 122 | kube-system metrics-server 1/1 1 1 151d metrics-server k8s.gcr.io/metrics-server-amd64:v0.3.6 k8s-app=metrics-server 123 | nginx-ingress nginx-ingress 1/1 1 1 57d nginx-ingress nginx/nginx-ingress:1.6.3 app=nginx-ingress 124 | default prom-trail 1/1 1 1 113d prom-trail aathith/testing:prometheus-url-annotation app=prom-trail 125 | default prometheus 1/1 1 1 115d prometheus prom/prometheus app=prometheus-server 126 | 127 | root@k8-master-01:~# kubesort kubectl get deployment age kube-system 128 | NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR 129 | coredns 2/2 2 2 169d coredns k8s.gcr.io/coredns:1.6.5 k8s-app=kube-dns 130 | digitalocean-cloud-controller-manager 1/1 1 1 168d digitalocean-cloud-controller-manager digitalocean/digitalocean-cloud-controller-manager:v0.1.6 app=digitalocean-cloud-controller-manager 131 | metrics-server 1/1 1 1 151d metrics-server k8s.gcr.io/metrics-server-amd64:v0.3.6 k8s-app=metrics-server 132 | 133 | ``` 134 |

135 |
136 |
Sorting Service 137 |

138 | 139 | ``` 140 | root@k8-master-01:~# kubesort kubectl get svc type 141 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR 142 | kubernetes ClusterIP 10.96.0.1 443/TCP 169d 143 | alert-checker NodePort 10.110.87.73 8080:31080/TCP 155d app=alert-checker 144 | prom-trail NodePort 10.97.208.221 8080:32445/TCP,1234:32446/TCP 115d app=prom-trail 145 | prometheus NodePort 10.98.222.241 9090:31976/TCP 117d app=prometheus-server 146 | 147 | root@k8-master-01:~# kubesort kubectl gett svc age kube-system 148 | NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR 149 | kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 169d k8s-app=kube-dns 150 | tiller-deploy ClusterIP 10.108.104.169 44134/TCP 165d app=helm,name=tiller 151 | metrics-server ClusterIP 10.98.220.21 443/TCP 162d k8s-app=metrics-server 152 | kubelet ClusterIP None 10250/TCP 117d 153 | 154 | root@k8-master-01:~# kubesort kubectl get svc clusterip all 155 | NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR 156 | default kubernetes ClusterIP 10.96.0.1 443/TCP 169d 157 | kube-system kube-dns ClusterIP 10.96.0.10 53/UDP,53/TCP,9153/TCP 169d k8s-app=kube-dns 158 | default prom-trail NodePort 10.97.208.221 8080:32445/TCP,1234:32446/TCP 115d app=prom-trail 159 | kubernetes-dashboard kubernetes-dashboard NodePort 10.98.9.79 443:30402/TCP 57d k8s-app=kubernetes-dashboard 160 | kube-system metrics-server ClusterIP 10.98.220.21 443/TCP 162d k8s-app=metrics-server 161 | default prometheus NodePort 10.98.222.241 9090:31976/TCP 117d app=prometheus-server 162 | kube-system tiller-deploy ClusterIP 10.108.104.169 44134/TCP 165d app=helm,name=tiller 163 | kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.108.179.217 8000/TCP 57d k8s-app=dashboard-metrics-scraper 164 | default alert-checker NodePort 10.110.87.73 8080:31080/TCP 155d app=alert-checker 165 | nginx-ingress nginx-ingress NodePort 10.110.160.112 80:31372/TCP,443:31289/TCP 57d app=nginx-ingress 166 | kube-system kubelet ClusterIP None 10250/TCP 117d 167 | ``` 168 |

169 |
170 | 171 | 172 | ### Roadmap: 173 | - [ ] Sort for resource pv, pvc, replicasets, replication controllers, ingress resources, nodes, namespaces will be included. 174 | - [ ] More options to install KUBESORT. 175 | - [ ] Video instruction on how to use KUBESORT. 176 | 177 | 178 | ### Tried and Tested in: 179 | k8s: v1.18.1
180 | kubectl: v1.18.1
181 | bash: v4.4.20
182 | 183 | 184 | ## Contributions are welcomed here. 185 | #### What can you contribute? 186 | 1) Reduce the no. of lines of the code or simplify the code. 187 | 2) Add things to match up with the Roadmap. 188 | #### Who can contribute? 189 | ANYONE WITH INTEREST. 190 | 191 | 192 | **[Release notes](https://github.com/AATHITH/kubesort/releases/tag/v0.3.0)** 193 | 194 | 195 | ## *** If KUBESORT interests you, Do Give this Project a Star *** 196 | --------------------------------------------------------------------------------