- Initial thoughts
- Prerequisites
- The alias list
-
Use cases explained
- 1. Write basic commands faster
- 2. Get sorted and filtered events
- 3. Display every resources (really)
- 4. Display nodes resources requests and limits
- 5. Start a swiss-army-knife debug pod
- 6. Get pod's containers list
- 7. Ping a service
- 8. Get a runnable manifest of an deployed resource
- 9. Delete failed (and evicted) pods
- Wrapping up
- Further reading
Initial thoughts
Managing Kubernetes clusters and performing administrative tasks can be complex and time-consuming. However, with the right set of kubectl aliases, you can streamline your Kubernetes administration and make your tasks more efficient. In this article, we will explore a collection of useful kubectl aliases that can help you perform common tasks faster and with greater ease. From retrieving resource information to troubleshooting pods and managing nodes, these aliases will become invaluable tools in your Kubernetes toolkit. So, let's dive in and discover the kubectl aliases you need to simplify your Kubernetes administration!
Prerequisites
Before you can start using these helpful kubectl aliases, make sure you have the following prerequisites on your workstation:
- Kubectl
- Krew plugins manager
- Kubectl-neat Krew plugin
- a
~/.kube
folder
The alias list
Here is a list of useful kubectl aliases that you can add to your shell configuration:
# autocomplete kubectl & helm
source <(kubectl completion zsh)
source <(helm completion zsh)
alias k=kubectl
# when using below aliases, print kubectl command and then execute it
function kctl() { echo "+ kubectl $@" && command kubectl $@ }
# add aliases collection like 'kgpo' for 'kubectl get pods` from https://github.com/ahmetb/kubectl-aliases
[ ! -f ~/.kube/aliases.sh ] && curl -fsSL "https://raw.githubusercontent.com/ahmetb/kubectl-aliases/master/.kubectl_aliases" > ~/.kube/aliases.sh && sed -i -e 's/kubectl/kctl/g' ~/.kube/aliases.sh
source ~/.kube/aliases.sh
# set default namespace
alias kn='kctl config set-context --current --namespace'
# get events sorted by last timestamp
alias kgel='kctl get events --sort-by=.lastTimestamp'
# get events sorted by creation timestamp
alias kgec='kctl get events --sort-by=.metadata.creationTimestamp'
# get pod's descending events
function kger() { kctl get events --sort-by=.lastTimestamp --field-selector involvedObject.name="$@" }
# get 'real' all
alias kgworld='kctl get $(kubectl api-resources --verbs=list --namespaced -o name | paste -sd ",")'
# display all nodes resources request and limits
alias kgnr="k get nodes --no-headers | awk '{print \$1}' | xargs -I {} sh -c 'echo {} ; kubectl describe node {} | grep Allocated -A 5 | grep -ve Event -ve Allocated -ve percent -ve -- ; echo '"
# start a debug pod (including lots of troubleshooting tools)
alias kdebug="kctl -n default run debug-$USER --rm -it --tty --image leodotcloud/swiss-army-knife:v0.12 --image-pull-policy=IfNotPresent -- bash"
# get pod's containers list
function kgpc() { kctl get pod -o jsonpath="{.spec.containers[*].name}" "$@" && echo "" }
# ping a service, ex: 'kping whoami:8080'
alias kping='kctl run httping -it --image bretfisher/httping --image-pull-policy=IfNotPresent --rm=true --'
# get existing pod's yaml without forbidden fields, ex: 'kyaml pod whoami'
function kyaml() { kubectl get "$@" -o yaml | kubectl-neat }
# display and delete failed pods in current namespace
alias krmfailed='kctl delete pods --field-selector=status.phase=Failed'
Use cases explained
Let's dive into some of the use cases and explanations for these aliases.
1. Write basic commands faster
The kubectl-aliases Github repo contains a script that generates hundreds of basic aliases, included in the above list.
Some of the 800 generated aliases are:
alias k='kubectl'
alias kg='kubectl get'
alias kgpo='kubectl get pod'
alias ksysgpo='kubectl --namespace=kube-system get pod'
alias krm='kubectl delete'
alias krmf='kubectl delete -f'
alias krming='kubectl delete ingress'
alias krmingl='kubectl delete ingress -l'
alias krmingall='kubectl delete ingress --all-namespaces'
alias kgsvcoyaml='kubectl get service -o=yaml'
alias kgsvcwn='kubectl get service --watch --namespace'
alias kgsvcslwn='kubectl get service --show-labels --watch --namespace'
alias kgwf='kubectl get --watch -f'
...
However, it can be challenging to recall what a command is for:
$> kgcmslwn main
# NAME DATA AGE LABELS
# kube-root-ca.crt 1 144d <none>
# logstash-config 1 100d app=logstash,chart=logstash,heritage=Helm,release=ls
# logstash-pipeline 1 100d app=logstash,chart=logstash,heritage=Helm,release=ls
# ls-finance-config 1 61d app=ls-finance,chart=logstash,heritage=Helm,release=ls-finance
# ls-finance-pipeline 1 61d app=ls-finance,chart=logstash,heritage=Helm,release=ls-finance
To address this, we added a function that displays the full command before executing it. This provides clarity and helps you understand what the command does:
$> kgcmslwn main
+ kubectl get configmap --show-labels --watch --namespace main
# NAME DATA AGE LABELS
# kube-root-ca.crt 1 144d <none>
# logstash-config 1 100d app=logstash,chart=logstash,heritage=Helm,release=ls
# logstash-pipeline 1 100d app=logstash,chart=logstash,heritage=Helm,release=ls
# ls-finance-config 1 61d app=ls-finance,chart=logstash,heritage=Helm,release=ls-finance
# ls-finance-pipeline 1 61d app=ls-finance,chart=logstash,heritage=Helm,release=ls-finance
2. Get sorted and filtered events
Sorting events in a Kubernetes cluster can be challenging. We added aliases to sort events by last seen date and creation timestamp.
$> kgel -A
+ kubectl get events --sort-by=.lastTimestamp -A
# NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE
# illu-for-designers 22m Warning Unhealthy pod/auth-server-67c944c549-7qmmj Startup probe failed: Get "http://10.0.8.148:8080/auth-server/actuator/health/liveness": dial tcp 10.0.8.148:8080: connect: connection refused
# fix-analytics-env 3m23s Warning BackOff pod/marketplace-test-6b9955d469-9zq2n Back-off restarting failed container
# elk 2m44s Normal WaitForFirstConsumer persistentvolumeclaim/ls-logstash-ls-logstash-0 waiting for first consumer to be created before binding
# illu-for-designers 2m4s Warning BackOff pod/backoffice-5c88b6d84-mv88z Back-off restarting failed container
$> kgec -A
+ kubectl get events --sort-by=.metadata.creationTimestamp -A
# NAMESPACE LAST SEEN TYPE REASON OBJECT MESSAGE
# elk 4m4s Normal WaitForFirstConsumer persistentvolumeclaim/ls-logstash-ls-logstash-0 waiting for first consumer to be created before binding
# fix-analytics-env 4m43s Warning BackOff pod/marketplace-test-6b9955d469-9zq2n Back-off restarting failed container
# illu-for-designers 3m20s Warning BackOff pod/bff-66b6b7bc4b-l8s82 Back-off restarting failed container
# illu-for-designers 23m Warning Unhealthy pod/auth-server-67c944c549-7qmmj Startup probe failed: Get "http://10.0.8.148:8080/auth-server/actuator/health/liveness": dial tcp 10.0.8.148:8080: connect: connection refused
Additionally, you can filter events for a specific resource using the kger
alias:
$> kger auth-server-67c944c549-7qmmj
+ kubectl get events --sort-by=.lastTimestamp --field-selector involvedObject.name=auth-server-67c944c549-7qmmj
# LAST SEEN TYPE REASON OBJECT MESSAGE
# 26m Warning Unhealthy pod/auth-server-67c944c549-7qmmj Startup probe failed: Get "http://10.0.8.148:8080/auth-server/actuator/health/liveness": dial tcp 10.0.8.148:8080: connect: connection refused
# 99s Warning BackOff pod/auth-server-67c944c549-7qmmj Back-off restarting failed container
3. Display every resources (really)
The kubectl get all
command does not actually display all resources. To overcome this limitation, we created the kgworld
alias. This alias retrieves all resources using kubectl get $(kubectl api-resources --verbs=list --namespaced -o name | paste -sd ",")
.
4. Display nodes resources requests and limits
To view the resource requests and limits for nodes in your cluster, you can use the kgnr
alias. This alias provides a clear overview of CPU and memory allocations for each node.
$> kgnr
# ip-10-0-17-119.eu-west-1.compute.internal
# Resource Requests Limits
# cpu 935m (23%) 6300m (160%)
# memory 11952Mi (80%) 10948Mi (73%)
# ip-10-0-31-235.eu-west-1.compute.internal
# Resource Requests Limits
# cpu 1415m (36%) 8900m (227%)
# memory 14259Mi (96%) 15326Mi (103%)
5. Start a swiss-army-knife debug pod
Debugging pods can be challenging when they lack the necessary troubleshooting tools.
The kdebug
alias solves this problem by starting a debug pod with all the essential tools pre-installed: arping, arptables, bridge-utils, ca-certificates, conntrack, curl, docker, dnsutils, ethtool, iperf, iperf3, iproute2, ipsec-tools, ipset, iptables, iputils-ping, jq, kmod, kubectl, ldap-utils, less, libpcap-dev, man, manpages-posix, mtr, net-tools, netcat, netcat-openbsd, openssl, openssh-client, psmisc, socat, tcpdump, telnet, tmux, traceroute, tcptraceroute, tree, ngrep, vim, wget, yq.
6. Get pod's containers list
To retrieve a list of containers within a pod, you can use the kgpc
alias. This is useful when you need to work with specific containers within a pod:
$> kgpc ebs-csi-controller-b77c4f786-dxv4g -n kube-system
+ kubectl get pod -o jsonpath={.spec.containers[*].name} ebs-csi-controller-b77c4f786-dxv4g -n kube-system
# ebs-plugin csi-provisioner csi-attacher csi-snapshotter csi-resizer liveness-probe
7. Ping a service
Testing the availability of a Kubernetes service can be challenging. The kping
alias uses the HTTP Ping Docker image to ping a service and check its availability:
$> kgsvc
+ kubectl get service
# NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
# api ClusterIP 172.20.251.151 <none> 80/TCP 12d
# auth-server ClusterIP 172.20.241.45 <none> 80/TCP 144d
# backend ClusterIP 172.20.89.116 <none> 80/TCP 144d
# webapp ClusterIP 172.20.68.65 <none> 80/TCP 144d
$> kping auth-server:80
+ kubectl run httping -it --image bretfisher/httping --image-pull-policy=IfNotPresent --rm=true -- auth-server:80
# If you don't see a command prompt, try pressing enter.
# connected to 172.20.241.45:80 (159 bytes), seq=1 time= 4.63 ms
# connected to 172.20.241.45:80 (159 bytes), seq=2 time= 2.07 ms
# connected to 172.20.241.45:80 (159 bytes), seq=3 time= 1.90 ms
# connected to 172.20.241.45:80 (159 bytes), seq=4 time= 2.30 ms
8. Get a runnable manifest of an deployed resource
When retrieving the YAML of a deployed resource using kubectl get pod -o=yaml
, certain fields are unnecessary and can cause issues when redeploying the YAML. The kyaml
alias solves this problem by providing a runnable manifest that excludes unnecessary fields.
It depends on kubectl-neat mentioned in pre-requisites.
9. Delete failed (and evicted) pods
Failed pods can clutter your cluster and affect performance. The krmfailed
alias allows you to easily delete failed pods in the current namespace.
Wrapping up
These kubectl aliases provide a convenient way to streamline your Kubernetes administration tasks. By using these aliases, you can save time and effort when working with kubectl commands. Whether you need to retrieve specific information, troubleshoot pods, or manage resources, these aliases have got you covered.
So go ahead, give these a try, and enjoy a more efficient Kubernetes administration experience!
Some useful aliases are missing ? please advise in the comments 🤓
Illustrations generated locally by Automatic1111 using MajicMixFantasy model
Further reading
☸️ Kubernetes: A Convenient Variable Substitution Mechanism for Kustomize
Benoit COUETIL 💫 for Zenika ・ Aug 4
☸️ Why Managed Kubernetes is a Viable Solution for Even Modest but Actively Developed Applications
Benoit COUETIL 💫 for Zenika ・ Jun 5
☸️ Kubernetes: From Your Docker-Compose File to a Cluster with Kompose
Benoit COUETIL 💫 for Zenika ・ Mar 9
☸️ Web Application on Kubernetes: A Tutorial to Observability with the Elastic Stack
Benoit COUETIL 💫 for Zenika ・ Nov 27 '23
☸️ Kubernetes NGINX Ingress Controller: 10+ Complementary Configurations for Web Applications
Benoit COUETIL 💫 for Zenika ・ Oct 16 '23
☸️ Kubernetes: Awesome Maintained Links You Will Keep Using Next Year
Benoit COUETIL 💫 for Zenika ・ Sep 4 '23
☸️ Managed Kubernetes: Our Dev is on AWS, Our Prod is on OVHCloud
Benoit COUETIL 💫 for Zenika ・ Jul 1 '23
☸️ How to Deploy a Secured OVHCloud Managed Kubernetes Cluster Using Terraform in 2023
Benoit COUETIL 💫 for Zenika ・ May 5 '23
☸️ How to Deploy a Cost-Efficient AWS/EKS Kubernetes Cluster Using Terraform in 2023
Benoit COUETIL 💫 for Zenika ・ Jun 3 '23
☸️ FinOps EKS: 10 Tips to Reduce the Bill up to 90% on AWS Managed Kubernetes Clusters
Benoit COUETIL 💫 for Zenika ・ Apr 20 '21
This article was enhanced with the assistance of an AI language model to ensure clarity and accuracy in the content, as English is not my native language.