Added my k3s commands.

This commit is contained in:
James Downie 2025-06-04 22:00:20 +10:00
parent d56b6dc3fb
commit cdd967c48d
5 changed files with 205 additions and 0 deletions

68
jdownie/k3s/ka Executable file
View File

@ -0,0 +1,68 @@
#!/usr/bin/env bash
T="`mktemp`"
if [ "$1" = "-r" ]; then
find . -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T"
find . -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T"
else
find . -maxdepth 1 -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T"
find . -maxdepth 1 -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T"
fi
for f in $( sort "$T" ); do
if [ -d "$f" ]; then
if [[ "`basename $f`" =~ ^[0-9][0-9]-ConfigMap-.*$ ]]; then
NAME=""
NAMESPACE=""
if [ ! -f "$f/config.json" ]; then
echo "Warning: Missing $f/vars"
else
CFG="$f/config.json"
NAME="`jq -r .name "$CFG"`"
NAMESPACE="`jq -r .namespace "$CFG"`"
fi
FOUT="`mktemp`"
cat <<EOF > $FOUT
apiVersion: v1
kind: ConfigMap
metadata:
name: $NAME
namespace: $NAMESPACE
data:
EOF
FILES="`mktemp`"
find "$f" -type f > "$FILES"
for FILE in $(cat "$FILES"); do
BASENAME="`basename "$FILE"`"
if [ "$BASENAME" != "config.json" ]; then
jq -e ".base64[] | select(. == \"$BASENAME\")" "$CFG" > /dev/null
if [ $? -eq 0 ]; then
echo " $BASENAME.base64: |" >> "$FOUT"
base64 "$FILE" | tr -d '\n' | sed "s/^/ /" >> "$FOUT"
echo "" >> "$FOUT"
else
echo " $BASENAME: |" >> "$FOUT"
sed "s/^/ /" "$FILE" >> "$FOUT"
fi
fi
done
rm "$FILES"
kubectl apply -f "$FOUT"
rm "$FOUT"
else
echo "Dunno: $f"
fi
else
D="`dirname "$f"`"
if [ -f "$D/env" ]; then
source "$D/env"
fi
EXT="`echo "$f" | tr '.' '\n' | tail -n 1`"
if [ "$EXT" = "url" ]; then
url=$(head -n 1 "$f" | tr -d '\n')
kubectl apply -f "$url"
else
envsubst < "$f" | kubectl apply -f -
fi
fi
done
rm "$T"

46
jdownie/k3s/kd Executable file
View File

@ -0,0 +1,46 @@
#!/usr/bin/env bash
T="`mktemp`"
if [ "$1" = "-r" ]; then
find . -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T"
find . -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T"
else
find . -maxdepth 1 -type f -regex ".*\/[0-9][0-9]\-.*\.\(yaml\|url\)$" > "$T"
find . -maxdepth 1 -type d -regex ".*\/[0-9][0-9]\-ConfigMap\-.*$" >> "$T"
fi
for f in $( sort -r "$T" ); do
if [ -d "$f" ]; then
if [[ "`basename $f`" =~ ^[0-9][0-9]-ConfigMap-.*$ ]]; then
NAME=""
NAMESPACE=""
if [ ! -f "$f/config.json" ]; then
echo "Warning: Missing $f/vars"
else
CFG="$f/config.json"
NAME="`jq -r .name "$CFG"`"
NAMESPACE="`jq -r .namespace "$CFG"`"
fi
FOUT="`mktemp`"
cat <<EOF > $FOUT
apiVersion: v1
kind: ConfigMap
metadata:
name: $NAME
namespace: $NAMESPACE
EOF
kubectl delete -f "$FOUT"
rm "$FOUT"
fi
else
EXT="`echo "$f" | tr '.' '\n' | tail -n 1`"
if [ "$EXT" = "url" ]; then
url=$(head -n 1 "$f" | tr -d '\n')
echo "$url"
kubectl delete -f "$url"
else
kubectl delete -f "$f"
fi
fi
done
rm "$T"

21
jdownie/k3s/ke Executable file
View File

@ -0,0 +1,21 @@
#!/bin/bash
NS="$1"
PODS="`mktemp`"
kubectl -n "$NS" --output=json get pods \
| jq -r .items[].metadata.name \
> "$PODS"
for POD in $(cat "$PODS"); do
CONTAINERS="`mktemp`"
kubectl -n "$NS" --output=json get pod "$POD" \
| jq -r .spec.containers[].name \
> "$CONTAINERS"
for CONTAINER in $(cat "$CONTAINERS"); do
# echo -e "$POD:\t$CONTAINER"
if [ "$CONTAINER" = "$2" ]; then
kubectl -n "$NS" exec -ti "$POD" -c "$CONTAINER" -- "$3"
fi
done
rm "$CONTAINERS"
done
rm "$PODS"

25
jdownie/k3s/kl Executable file
View File

@ -0,0 +1,25 @@
#!/bin/bash
NS="$1"
PODS="`mktemp`"
kubectl -n "$NS" --output=json get pods \
| jq -r .items[].metadata.name \
> "$PODS"
for POD in $(cat "$PODS"); do
CONTAINERS="`mktemp`"
kubectl -n "$NS" --output=json get pod "$POD" \
| jq -r .spec.containers[].name \
> "$CONTAINERS"
for CONTAINER in $(cat "$CONTAINERS"); do
# echo -e "$POD:\t$CONTAINER"
if [ "$CONTAINER" = "$2" ]; then
if [ "$3" = "-f" ]; then
kubectl -n "$NS" logs -f "$POD" -c "$CONTAINER"
else
kubectl -n "$NS" logs "$POD" -c "$CONTAINER"
fi
fi
done
rm "$CONTAINERS"
done
rm "$PODS"

45
jdownie/k3s/ks Executable file
View File

@ -0,0 +1,45 @@
#!/bin/bash
function ks {
NAMESPACES="`mktemp`"
kubectl get namespaces --output=json \
| jq -r .items[].metadata.name \
| grep -v "^kube-system$" \
| grep -v "^kube-public$" \
| grep -v "^kube-node-lease$" \
> "$NAMESPACES"
for NAMESPACE in $(cat "$NAMESPACES"); do
DEPLOYMENTS="`mktemp`"
DEPLOYMENT_PODS="`mktemp`"
kubectl -n "$NAMESPACE" get deployments --output=json \
| jq -r .items[].metadata.name \
> "$DEPLOYMENTS"
for DEPLOYMENT in $(cat "$DEPLOYMENTS"); do
PODS="`mktemp`"
kubectl -n "$NAMESPACE" --selector "app=$DEPLOYMENT" get pods --output=json \
| jq -r .items[].metadata.name \
> "$PODS"
cat "$PODS" >> "$DEPLOYMENT_PODS"
for POD in $(cat "$PODS"); do
STATUS="`kubectl -n "$NAMESPACE" --selector="app=$DEPLOYMENT" get pods --output=json | jq -r ".items[] | select(.metadata.name==\\\"$POD\\\") | .status.phase"`"
echo -e "$NAMESPACE\t$DEPLOYMENT\t$POD\t$STATUS"
done
rm "$PODS"
done
PODS="`mktemp`"
kubectl -n "$NAMESPACE" get pods --output=json \
| jq -r .items[].metadata.name \
| grep -v -f "$DEPLOYMENT_PODS" \
> "$PODS"
for POD in $(cat "$PODS"); do
STATUS="`kubectl -n "$NAMESPACE" get pods --output=json | jq -r ".items[] | select(.metadata.name==\\\"$POD\\\") | .status.phase"`"
echo -e "$NAMESPACE\t_\t$POD\t$STATUS"
done
rm "$PODS"
rm "$DEPLOYMENT_PODS"
rm "$DEPLOYMENTS"
done
rm "$NAMESPACES"
}
ks | column -t | sort