#!/bin/bash all_services=( coredns local-path-provisioner metrics-server traefik ) export NUM_SERVERS=1 export NUM_AGENTS=1 export WAIT_SERVICES="${all_services[@]}" export SERVER_ARGS="--node-taint=CriticalAddonsOnly=true:NoExecute" # --- cluster-pre-hook() { export SERVER_ARGS="${SERVER_ARGS} --snapshotter=stargz " export AGENT_ARGS="${AGENT_ARGS} --snapshotter=stargz " } export -f cluster-pre-hook # --- start-test() { local REMOTE_SNAPSHOT_LABEL="containerd.io/snapshot/remote" local TEST_IMAGE="ghcr.io/stargz-containers/k3s-test-ubuntu:20.04-esgz" local TEST_POD_NAME=testpod-$(head /dev/urandom | tr -dc a-z0-9 | head -c 10) local TEST_CONTAINER_NAME=testcontainer-$(head /dev/urandom | tr -dc a-z0-9 | head -c 10) # Create the target Pod cat < 100" return 1 fi ((LAYERSNUM+=1)) LABEL=$(docker exec -i "${NODE}" ctr --namespace="k8s.io" snapshots --snapshotter=stargz info "${LAYER}" \ | jq -r ".Labels.\"${REMOTE_SNAPSHOT_LABEL}\"") echo "Checking layer ${LAYER} : ${LABEL}" if [ "${LABEL}" == "null" ] ; then echo "layer ${LAYER} isn't remote snapshot" return 1 fi done if [ ${LAYERSNUM} -eq 0 ] ; then echo "cannot get layers" return 1 fi return 0 } export -f start-test wait-for-pod() { local POD_NAME="${1}" if [ "${POD_NAME}" == "" ] ; then return 1 fi IDX=0 DEADLINE=120 for (( ; ; )) ; do STATUS=$(kubectl get pods "${POD_NAME}" -o 'jsonpath={..status.containerStatuses[0].state.running.startedAt}${..status.containerStatuses[0].state.waiting.reason}') echo "Status: ${STATUS}" STARTEDAT=$(echo "${STATUS}" | cut -f 1 -d '$') if [ "${STARTEDAT}" != "" ] ; then echo "Pod created" break elif [ ${IDX} -gt ${DEADLINE} ] ; then echo "Deadline exeeded to wait for pod creation" return 1 fi ((IDX+=1)) sleep 1 done return 0 } export -f wait-for-pod get-topmost-layer() { local NODE="${1}" local CONTAINER="${2}" local TARGET_CONTAINER= if [ "${NODE}" == "" ] || [ "${CONTAINER}" == "" ] ; then return 1 fi for (( RETRY=1; RETRY<=50; RETRY++ )) ; do TARGET_CONTAINER=$(docker exec -i "${NODE}" ctr --namespace="k8s.io" c ls -q labels."io.kubernetes.container.name"=="${CONTAINER}" | sed -n 1p) if [ "${TARGET_CONTAINER}" != "" ] ; then break fi sleep 3 done if [ "${TARGET_CONTAINER}" == "" ] ; then return 1 fi LAYER=$(docker exec -i "${NODE}" ctr --namespace="k8s.io" c info "${TARGET_CONTAINER}" | jq -r '.SnapshotKey') echo "${LAYER}" } export -f get-topmost-layer # --- create a basic cluster and check for lazy pulling LABEL=LAZYPULL run-test cleanup-test-env