Running an adhoc pod in Kubernetes
I found myself needing to run an adhoc pod in Kubernetes on a specific node with a taint. Here's how.
I was running in to some networking problems in Kubernetes with a specific node and wanted to run a pod that had all of the networking tools installed. Primarily because I could not get to the network to install them on a base image. Basically, I was looking for a swiss army knife for Kubernetes networking that ran on Arm64.
I found this little gem on docker hub, svil/swiss-army-knife
. Thanks svil
.
Based on the manifest from Docker Hub it had everything a DevOps engineer could possibly want. Now, I needed to run it on my problematic node. That node has a taint and a label I can use to schedule it with.
I used kubectl run
to start my pod. That was easy. Scheduling it was hard.
To schedule on a specific node, you use the --overrides
argument and pass in the nodeSelector
. In my case, I also needed the tolerations
. It requires a json
format.
The end result of the command I used was:
kubectl run swissarmy4 --image=svil/swiss-army-knife -it --rm --overrides='
{
"spec":
{
"nodeSelector": { "openhab": "yes" },
"tolerations": [
{
"key": "dedicated",
"operator": "Exists",
"effect": "NoSchedule"
}
]
}
}' -- /bin/bash
Conclusion
I am putting this on my blog so I have it for future reference, hopefully it will help someone else out as well.