Stick pod to AWS region

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

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Design a site like this with WordPress.com
Get started