168 lines
4.5 KiB
Plaintext
168 lines
4.5 KiB
Plaintext
|
alias k='kubectl '
|
|||
|
alias kshell='kubectl run -it shell --image bash --restart Never --rm -- sh'
|
|||
|
|
|||
|
kiam () {
|
|||
|
kubectl run -it shell --image docker-tiocoreeng-apps-virtual.bts.artifactory.tio.systems/aws-cli:latest --env=AWS_DEFAULT_REGION=eu-west-1 --overrides="{ \"metadata\": { \"annotations\": { \"iam.amazonaws.com/role\": \"$1\" } } }" --command bash --restart Never --rm
|
|||
|
}
|
|||
|
|
|||
|
kube-ssh() {
|
|||
|
sh -c "$(curl -sSL https://raw.githubusercontent.com/AverageMarcus/kube-ssh/master/ssh.sh)"
|
|||
|
}
|
|||
|
|
|||
|
kube-forward() {
|
|||
|
if [ -n "$ZSH_VERSION" ]; then
|
|||
|
setopt LOCAL_OPTIONS NO_NOTIFY NO_MONITOR
|
|||
|
fi
|
|||
|
IFS=$'\n'
|
|||
|
SERVICES=( $(kubectl get service --no-headers -o json | jq '[.items[] | select(.metadata.annotations."kube-forward" != "false")] | (.[] | .metadata.name + "\t" + ([.spec.ports[].port] | join(",")))' -r | column -t) )
|
|||
|
unset IFS
|
|||
|
|
|||
|
TO_KILL=()
|
|||
|
|
|||
|
cleanup() {
|
|||
|
echo "\nClosing connections..."
|
|||
|
for pid in "${TO_KILL[@]}"
|
|||
|
do
|
|||
|
(kill -2 $pid) &> /dev/null
|
|||
|
done
|
|||
|
|
|||
|
trap - INT TERM
|
|||
|
}
|
|||
|
trap 'cleanup' INT TERM
|
|||
|
|
|||
|
HOST_PORT=9001
|
|||
|
|
|||
|
echo "Forwarding..."
|
|||
|
|
|||
|
for s in "${SERVICES[@]}"
|
|||
|
do
|
|||
|
SERVICE=( $(echo $s) )
|
|||
|
if [ -n "$ZSH_VERSION" ]; then
|
|||
|
NAME=${SERVICE[1]}
|
|||
|
PORT=${SERVICE[2]}
|
|||
|
else
|
|||
|
NAME=${SERVICE[0]}
|
|||
|
PORT=${SERVICE[1]}
|
|||
|
fi
|
|||
|
PORTS=($(echo $PORT | tr "," "\n"))
|
|||
|
for PORT in "${PORTS[@]}"
|
|||
|
do
|
|||
|
(kubectl port-forward svc/$NAME $HOST_PORT:$PORT > /dev/null 2>&1) &
|
|||
|
BG_PID=$!
|
|||
|
|
|||
|
if `curl -s -o /dev/null --retry 5 --retry-delay 0 --retry-connrefused -m 3 http://localhost:$HOST_PORT`
|
|||
|
then
|
|||
|
echo "\e[1m$NAME:$PORT\e[0m ➡ \e[34mhttp://localhost:$HOST_PORT\e[0m"
|
|||
|
TO_KILL+=($BG_PID)
|
|||
|
((HOST_PORT=HOST_PORT+1))
|
|||
|
else
|
|||
|
(kill -2 $BG_PID) &> /dev/null
|
|||
|
fi
|
|||
|
done
|
|||
|
done
|
|||
|
|
|||
|
echo "\n\e[2m(Use [Ctl + C] to exit)"
|
|||
|
cat
|
|||
|
if [ -n "$BASH_VERSION" ]; then
|
|||
|
cleanup
|
|||
|
fi
|
|||
|
}
|
|||
|
|
|||
|
source <(kubectl completion zsh)
|
|||
|
|
|||
|
## Merge multiple kubeconfigs
|
|||
|
function join_by { local d=$1; shift; echo -n "$1"; shift; printf "%s" "${@/#/$d}"; }
|
|||
|
KUBECONFIG="$HOME/.kube/config"
|
|||
|
OTHER_CLUSTERS="$(join_by :$HOME/.kube/clusters/ $(echo $HOME/.kube/clusters/$(ls $HOME/.kube/clusters)))"
|
|||
|
export KUBECONFIG=$KUBECONFIG:$OTHER_CLUSTERS
|
|||
|
|
|||
|
## Kubectl exec
|
|||
|
kx () {
|
|||
|
local pod=($(kubectl get pods --all-namespaces -owide | fzf | awk '{print $1, $2}'))
|
|||
|
local cmd=${@:-"sh"}
|
|||
|
|
|||
|
echo kubectl exec -it --namespace $pod[1] $pod[2] $cmd
|
|||
|
kubectl exec -it --namespace $pod[1] $pod[2] $cmd
|
|||
|
}
|
|||
|
|
|||
|
## Kubectl logs
|
|||
|
kl () {
|
|||
|
local pod=($(kubectl get pods --all-namespaces -owide | fzf | awk '{print $1, $2}'))
|
|||
|
local attr=${@:-""}
|
|||
|
|
|||
|
echo kubectl logs -f $attr --namespace $pod[1] $pod[2]
|
|||
|
kubectl logs -f $attr --namespace $pod[1] $pod[2]
|
|||
|
}
|
|||
|
|
|||
|
## Display everything
|
|||
|
kall () {
|
|||
|
kubectl get all --all-namespaces
|
|||
|
}
|
|||
|
|
|||
|
kctx () {
|
|||
|
KUBECONFIG="$HOME/.kube/config"
|
|||
|
OTHER_CLUSTERS="$(join_by :$HOME/.kube/clusters/ $(echo $HOME/.kube/clusters/$(ls $HOME/.kube/clusters)))"
|
|||
|
export KUBECONFIG=$KUBECONFIG:$OTHER_CLUSTERS
|
|||
|
kubectx $@
|
|||
|
}
|
|||
|
|
|||
|
k-version-test() {
|
|||
|
VERSION=""
|
|||
|
FILES=""
|
|||
|
while test $# -gt 0; do
|
|||
|
case "$1" in
|
|||
|
-v|--version)
|
|||
|
shift
|
|||
|
VERSION=$1
|
|||
|
shift
|
|||
|
;;
|
|||
|
-f|--files)
|
|||
|
shift
|
|||
|
FILES=$1
|
|||
|
shift
|
|||
|
;;
|
|||
|
-h|--help)
|
|||
|
echo "k-version-test - test Kubernetes manifest files against different versions of Kubernetes"
|
|||
|
echo " "
|
|||
|
echo "k-version-test [options]"
|
|||
|
echo " "
|
|||
|
echo "Options:"
|
|||
|
echo "-h, --help show this help text"
|
|||
|
echo "-v, --version the version of kubernetes to test against"
|
|||
|
echo "-f, --files the manifest file(s) to test against"
|
|||
|
return 0
|
|||
|
;;
|
|||
|
*)
|
|||
|
break
|
|||
|
;;
|
|||
|
esac
|
|||
|
done
|
|||
|
|
|||
|
which kind &> /dev/null || (echo "'kind' not installed. Follow install instructions here: https://github.com/kubernetes-sigs/kind/"; return 1)
|
|||
|
|
|||
|
if [ ! -z $VERSION ];
|
|||
|
then
|
|||
|
TAG=$(curl -s 'https://registry.hub.docker.com/v2/repositories/kindest/node/tags/' | jq '."results" | map(.name | select(startswith("v'$VERSION'"))) | .[0]' | xargs)
|
|||
|
kind create cluster --image kindest/node:$TAG
|
|||
|
else
|
|||
|
kind create cluster
|
|||
|
fi
|
|||
|
|
|||
|
echo
|
|||
|
|
|||
|
if kubectl apply --dry-run -f $FILES ; then
|
|||
|
echo "\n☸️ Kubernetes $VERSION. Result: ✅\n"
|
|||
|
else
|
|||
|
echo "\n☸️ Kubernetes $VERSION. Result: ❌\n"
|
|||
|
fi
|
|||
|
|
|||
|
kind delete cluster
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
fix-broken-replicasets() {
|
|||
|
kubectl get replicasets --all-namespaces -o jsonpath='{range .items[?(@.status.replicas==0)]}--namespace {@.metadata.namespace} {@.metadata.name};{end}' | tr ";" "\n" | xargs -I {} sh -c "kubectl delete rs {}"
|
|||
|
}
|
|||
|
|
|||
|
source <(tkn completion zsh)
|