The primary objective of my team is to empower other engineering teams in our company to take ownership of their services. Like many companies we chose Kubernetes as the platform to help us achieve our goals.
For our architecture it was clear that the benefits of Kubernetes far outweigh the complexity overhead—an easy justification for a team of devops pros.
I mean seriously, it does so many things. But there are some pain points. With the understanding that there are numerous approaches to using Kubernetes and that your workflow is not the same as my workflow I would like to introduce a small CLI tool which has helped alleviate some of the pain points encountered when using Kubernetes everyday.
ckube is a small utility to simplify and streamline working with Kubernetes from the cli.
kubectl is extremely powerful but I find that I generally use a very small subset of its features, namely
exec. Let's use my-app as an example.
my-app is a very cool web application (not really, it is actually just nginx).
Getting logs for my-app is easy enough with
$ kubectl logs my-app-775df4f94b-l2kqc
The problem is that I don't think of my-app as a pod but rather a service. Even more concerning, my-app is super popular so I have scaled up my deployment to 5 replicas. In reality when I want to see the logs for my-app I want to see the logs for all 5 of these pods.
$ kubectl get pods NAME READY STATUS RESTARTS AGE my-app-775df4f94b-52ls4 1/1 Running 0 4h my-app-775df4f94b-l2kqc 1/1 Running 0 4h my-app-775df4f94b-srzwv 1/1 Running 0 4h my-app-775df4f94b-tq9kl 1/1 Running 0 4h my-app-775df4f94b-x866k 1/1 Running 0 4h
ckube was created to run common
kubectl commands concurrently against multiple pods. Using
ckube should feel familiar if you have used
kubectl. Here is
ckube in action.
ckube logs also accepts the
-f flag to follow the logs in all of the containers.
Similar functionality exists for
exec. If I need an interactive prompt to poke around in a single pod
ckube will choose one for me.
Non interactive commands can easily be run against all my-app pods with
ckube also supports more complex commands just like
ckube on github