110 lines
2.4 KiB
Bash
110 lines
2.4 KiB
Bash
#!/usr/bin/env bash
|
|
#
|
|
set -euo pipefail
|
|
IFS=$'\n\t'
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
|
|
############## Setup #########################
|
|
|
|
function cleanup {
|
|
for f in "${pods[@]}"; do
|
|
log "Deleting $f"
|
|
kubectl delete pod --force=true --grace-period=0 --namespace homepage "$f"
|
|
done
|
|
}
|
|
pods=()
|
|
for sig in EXIT INT QUIT HUP TERM; do
|
|
trap "set +e; cleanup" "$sig"
|
|
done
|
|
|
|
function die {
|
|
local status_code="$1"
|
|
shift
|
|
(>&2 echo "${@}")
|
|
exit "$status_code"
|
|
}
|
|
|
|
function log {
|
|
(>&2 echo "${@}")
|
|
}
|
|
|
|
############## Program #########################
|
|
|
|
function main {
|
|
local pod_name="tom-$(uuidgen | cut -d '-' -f 1)"
|
|
pods+=("$pod_name")
|
|
create_pod "$pod_name"
|
|
kubectl wait pods -n homepage "$pod_name" --for condition=Ready --timeout=90s
|
|
kubectl exec -i -t --namespace homepage "$pod_name" -- "${@}"
|
|
}
|
|
|
|
function create_pod {
|
|
local pod_name="$1"
|
|
kubectl apply -f - <<EOF
|
|
apiVersion: v1
|
|
kind: Pod
|
|
metadata:
|
|
labels:
|
|
run: $pod_name
|
|
name: $pod_name
|
|
namespace: homepage
|
|
spec:
|
|
imagePullSecrets:
|
|
- name: registry-credentials
|
|
containers:
|
|
- args:
|
|
- /bin/sleep
|
|
- infinity
|
|
image: harbor.fizz.buzz/dockerhub/library/alpine:3.18
|
|
imagePullPolicy: IfNotPresent
|
|
name: $pod_name
|
|
stdin: true
|
|
stdinOnce: true
|
|
terminationMessagePath: /dev/termination-log
|
|
terminationMessagePolicy: File
|
|
tty: true
|
|
volumeMounts:
|
|
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
|
|
name: kube-api-access-hskj7
|
|
readOnly: true
|
|
# serviceAccount: default
|
|
# serviceAccountName: default
|
|
terminationGracePeriodSeconds: 30
|
|
tolerations:
|
|
- effect: NoExecute
|
|
key: node.kubernetes.io/not-ready
|
|
operator: Exists
|
|
tolerationSeconds: 300
|
|
- effect: NoExecute
|
|
key: node.kubernetes.io/unreachable
|
|
operator: Exists
|
|
tolerationSeconds: 300
|
|
volumes:
|
|
- name: kube-api-access-hskj7
|
|
projected:
|
|
defaultMode: 420
|
|
sources:
|
|
- serviceAccountToken:
|
|
expirationSeconds: 3607
|
|
path: token
|
|
- configMap:
|
|
items:
|
|
- key: ca.crt
|
|
path: ca.crt
|
|
name: kube-root-ca.crt
|
|
- downwardAPI:
|
|
items:
|
|
- fieldRef:
|
|
apiVersion: v1
|
|
fieldPath: metadata.namespace
|
|
path: namespace
|
|
EOF
|
|
}
|
|
|
|
function delete_pod {
|
|
local pod_name="$1"
|
|
kubectl delete pod --force=true --grace-period=0 --namespace homepage "$pod_name"
|
|
}
|
|
|
|
main "$@"
|