Skip to content

Instantly share code, notes, and snippets.

@ddgenome
Last active July 5, 2019 08:00
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ddgenome/6346adf6bb97f172e88a8dc60368a5c1 to your computer and use it in GitHub Desktop.
Save ddgenome/6346adf6bb97f172e88a8dc60368a5c1 to your computer and use it in GitHub Desktop.
Kubernetes bash functions
# bash kubernetes functions
# kubectl with kubeconfig
function k () {
kubectl --kubeconfig=kubeconfig "$@"
}
# exec shell in pod
function k8sh () {
local p="$1"
shift
k exec -it "$p" -- env COLUMNS=$(tput cols) LINES=$(tput lines) TERM=$TERM /bin/sh "$@"
}
# list pods
function kp () {
k get -o wide pods "$@"
}
# list services
function ks () {
k get -o wide svc "$@"
}
# logs for pod
function kl () {
local r="$1" p
[[ $PAGER ]] || PAGER=more
# match full pod name, pod in replica, or pod in deployment
for p in $(k get pods | awk "\$1 == \"$r\" || \$1 ~ /^$r-[a-z0-9]{5}$/ || \$1 ~ /^$r-[0-9]{1,10}-[a-z0-9]{5}$/ { print \$1 }"); do
echo "===> $p <==="
k logs "$p" | $PAGER
done
}
# ssh into each host
function kssh () {
local conf="ssh_config"
local h
for h in $(awk '/^Host / { print $2 }' "$conf"); do
echo "$h"
ssh -F "$conf" "$h" "$@"
done
}
# run command in each k8 cluster
function vk () {
local d
for d in *; do
if [[ -f $d/kubeconfig ]]; then
echo "======> $d <======"
(cd "$d" && "$@")
fi
done
}
# tail follow logs for pod
function vtf () {
local r="$1" d p
local -a js
for d in *; do
if [[ -f $d/kubeconfig ]]; then
cd "$d"
for p in $(k get pods | awk "\$1 == \"$r\" || \$1 ~ /^$r-[a-z0-9]{5}$/ || \$1 ~ /^$r-[0-9]{1,10}-[a-z0-9]{5}$/ { print \$1 }"); do
kubectl --kubeconfig=kubeconfig logs -f "$p" &
js+=("$!")
done
cd ..
fi
done
trap 'kill ${js[@]}' INT EXIT
wait "${js[@]}"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment