If we need to run 1 pod exactly in specific region (because of ebs for example) we need to mark appropriate node by specific label.
kubectl label node ip-10-0-1-249.ec2.internal region=us-east-1a
kubectl label node ip-10-0-2-27.ec2.internal region=us-east-1b
kubectl label node ip-10-0-3-244.ec2.internal region=us-east-1c
Let’s check what labels nodes have
kubectl get nodes --show-labels
We should see something like this:
ip-10-0-3-244.ec2.internal Ready <none> 30d v1.21.2-eks-55daa9d beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=t3.medium,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=us-east-1,failure-domain.beta.kubernetes.io/zone=us-east-1c,kubernetes.io/arch=amd64,kubernetes.io/hostname=ip-10-0-3-244.ec2.internal,kubernetes.io/os=linux,node.kubernetes.io/instance-type=t3.medium,region=us-east-1c,topology.kubernetes.io/region=us-east-1,topology.kubernetes.io/zone=us-east-1c
Now need to add nodeSelector to deployment or pod definition
spec:
replicas: 1
selector:
matchLabels:
app: specificapp
template:
metadata:
labels:
app: specificapp
spec:
containers:
-
image: "specificapp:1.0"
name: specificapp
ports:
-
containerPort: 80
nodeSelector:
region: us-east-1
That’s all