plugins: # Opens a shell to k3d container as root k3d-root-shell: shortCut: Shift-S confirm: false dangerous: true description: "Root Shell" scopes: - containers command: bash background: false args: - -c - | # Check dependencies command -v jq >/dev/null || { echo -e "jq is not installed (https://stedolan.github.io/jq/)\nPress 'q' to close" | less; exit 1; } # Extract node name and container ID POD_DATA="$(kubectl get pod/$POD -o json --namespace $NAMESPACE --context $CONTEXT)" # ${...} is used to prevent variable substitution by k9s (e.g. $POD_DATA) NODE_NAME=$(echo "${POD_DATA}" | jq -r '.spec.nodeName') CONTAINER_ID=$(echo "${POD_DATA}" | jq -r '.status.containerStatuses[] | select(.name == "$COL-NAME") | .containerID ' | grep -oP '(?<=containerd://).*') echo "<> Pod: $NAMESPACE/$POD | Container: $COL-NAME (${NODE_NAME}/${CONTAINER_ID})" # Credits for this approach to https://gist.github.com/mamiu/4944e10305bc1c3af84946b33237b0e9 docker exec -it $NODE_NAME sh -c "runc --root /run/containerd/runc/k8s.io/ exec -t -u 0 ${CONTAINER_ID} sh"