본문 바로가기
IT 기술/k8s

[cka] Node Affinity

by Geunny 2024. 6. 8.
반응형

 

Node Affinity란?

 

파드를 특정 노드나 노드 그룹에 스케줄링하는 방법을 제공합니다.

이는 스케줄링 제약 조건을 정의하는 데 사용되며, Node Affinity는 nodeSelector, requiredDuringSchedulingIgnoredDuringExecution, 및 preferredDuringSchedulingIgnoredDuringExecution과 같은 다양한 방법을 통해 설정할 수 있습니다.

 

1. How many Labels exist on node node01?

$ controlplane ~ ✖ k describe nodes node01
Name:               node01
Roles:              <none>
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/os=linux
                    kubernetes.io/arch=amd64
                    kubernetes.io/hostname=node01
                    kubernetes.io/os=linux
Annotations:        flannel.alpha.coreos.com/backend-data: {"VNI":1,"VtepMAC":"2e:55:e7:36:8e:8a"}
                    flannel.alpha.coreos.com/backend-type: vxlan
                    flannel.alpha.coreos.com/kube-subnet-manager: true
                    flannel.alpha.coreos.com/public-ip: 192.24.223.3
                    kubeadm.alpha.kubernetes.io/cri-socket: unix:///var/run/containerd/containerd.sock
                    node.alpha.kubernetes.io/ttl: 0
                    volumes.kubernetes.io/controller-managed-attach-detach: true


answer : 5

2.  What is the value set to the label key beta.kubernetes.io/arch on node01?

answer : amd64

3. Apply a label color=blue to node node01

 

$ controlplane ~ ➜  k label node node01 color=blue
node/node01 labeled

 

4.  Create a new deployment named blue with the nginx image and 3 replicas.

$ controlplane ~ ➜  k create deployment blue --image nginx --replicas=3
deployment.apps/blue created

 

5. Which nodes can the pods for the blue deployment be placed on?
Make sure to check taints on both nodes!

$ controlplane ~ ➜  k get pods -o wide
NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE           NOMINATED NODE   READINESS GATES
blue-747bd9c977-6gqdm   1/1     Running   0          43s   10.244.0.4   controlplane   <none>           <none>
blue-747bd9c977-jhfwz   1/1     Running   0          43s   10.244.1.2   node01         <none>           <none>
blue-747bd9c977-p6gsx   1/1     Running   0          43s   10.244.1.3   node01         <none>           <none>


answer : controlplane and node01

 

6.  Set Node Affinity to the deployment to place the pods on node01 only.

https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity

 

Assigning Pods to Nodes

You can constrain a Pod so that it is restricted to run on particular node(s), or to prefer to run on particular nodes. There are several ways to do this and the recommended approaches all use label selectors to facilitate the selection. Often, you do not

kubernetes.io

 

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: blue
  name: blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: blue
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: blue
    spec:
      containers:
      - image: nginx
        name: nginx
        resources: {}
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: color
                operator: In
                values:
                  - blue

 

7. Which nodes are the pods placed on now?

 

$ controlplane ~ ➜  k get pods -o wide
NAME                   READY   STATUS    RESTARTS   AGE    IP           NODE     NOMINATED NODE   READINESS GATES
blue-8b4fdbcb5-64f5g   1/1     Running   0          104s   10.244.1.5   node01   <none>           <none>
blue-8b4fdbcb5-lxx5k   1/1     Running   0          102s   10.244.1.6   node01   <none>           <none>
blue-8b4fdbcb5-pvzph   1/1     Running   0          106s   10.244.1.4   node01   <none>           <none>

 

answer : node01

 

8. Create a new deployment named red with the nginx image and 2 replicas, and ensure it gets placed on the controlplane node only.
Use the label key - node-role.kubernetes.io/control-plane - which is already set on the controlplane node.

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: red
  name: red
spec:
  replicas: 2
  selector:
    matchLabels:
      app: red
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: red
    spec:
      containers:
      - image: nginx
        name: nginx
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: node-role.kubernetes.io/control-plane
                operator: Exists
status: {}

'IT 기술 > k8s' 카테고리의 다른 글

[cka] Multiple Schedulers  (0) 2024.06.23
[cka] Resource Limits  (0) 2024.06.22
[cka] Taints and Tolerations  (0) 2024.06.08
[cka] Labels and Selectors  (0) 2024.06.08
[cka] Manual Scheduling  (0) 2024.06.08

댓글