본문 바로가기
IT 잡지식/DevOps

[CKA] KodeKloud - Labels and Selectors

by 쯀리♥️ 2024. 6. 3.

 

 

안녕하세요, 쯀리입니다.

오늘은 Kubernetes 클러스터 내의 리소스를 더 효율적으로 관리하고 원하는 대로 조직화 할 수 있는 방법으로 
Label과 Selector를 쓰는데 이것에 대해 알아볼게요




 

Label과 Selector란?

Label:

Label은 Kubernetes 오브젝트에 붙이는 키-값 쌍입니다. Label을 사용하면 특정 속성을 가진 오브젝트들을 그룹화하거나 필터링할 수 있습니다. Label은 리소스를 식별, 구성, 관리하는 데 유용합니다.

 

Selector: 

Selector는 특정 Label을 기준으로 리소스를 선택하는 방법입니다. Selector는 주로 Deployment, Service, ReplicaSet 등에서 사용되어, 특정 Label을 가진 리소스를 타겟으로 작업을 수행합니다.

 


Label and Selector

1. We have deployed a number of PODs. They are labelled with tier, env and bu. How many PODs exist in the dev environment (env)?

kubectl get pods -l env=dev  --no-headers | wc -l
kubectl get pods --selector env=dev --no-headers | wc -l

  -l, --selector='':
        Selector (label query) to filter on, supports '=', '==', and '!='.(e.g. -l
        key1=value1,key2=value2). Matching objects must satisfy all of the specified label
        constraints.

 --no-headers : 헤더를 제외한 줄의 갯수

env라는 라벨중에 dev라는 값을 가진 pod를 찾으라는 뜻입니다. 

2. How many PODs are in the finance business unit (bu)?

controlplane ~ ➜  k get pods -l bu=finance
NAME          READY   STATUS    RESTARTS   AGE
app-1-mgc8l   1/1     Running   0          8m3s
app-1-q7d2f   1/1     Running   0          8m3s
app-1-zw8zq   1/1     Running   0          8m3s
auth          1/1     Running   0          8m2s
app-1-zzxdf   1/1     Running   0          8m2s
db-2-f4v8b    1/1     Running   0          8m2s

controlplane ~ ➜  k get pods -l bu=finance --no-headers | wc -l
6

 

 

3. How many objects are in the prod environment including PODs, ReplicaSets and any other objects?

controlplane ~ ✖ k get all -l env=prod
NAME              READY   STATUS    RESTARTS   AGE
pod/auth          1/1     Running   0          10m
pod/app-1-zzxdf   1/1     Running   0          10m
pod/db-2-f4v8b    1/1     Running   0          10m
pod/app-2-h769w   1/1     Running   0          10m

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/app-1   ClusterIP   10.43.187.131   <none>        3306/TCP   10m

NAME                    DESIRED   CURRENT   READY   AGE
replicaset.apps/db-2    1         1         1       10m
replicaset.apps/app-2   1         1         1       10m

controlplane ~ ➜  k get all -l env=prod --no-headers | wc -l
7

kubectl get all 꼭 알아둡시다

4. Identify the POD which is part of the prod environment, the finance BU and of frontend tier?
3개가 모두 포함된 POD를 보고싶다면 

kubectl get all -l env=prod,bu=finance,tier=frontend

pod/app-1-zzxdf 로 나오는군요 

5. A ReplicaSet definition file is given replicaset-definition-1.yaml. Attempt to create the replicaset; you will encounter an issue with the file. Try to fix it.

Once you fix the issue, create the replicaset from the definition file.

ReplicaSet: replicaset-1
Replicas: 2
apiVersion: apps/v1
kind: ReplicaSet
metadata:
   name: replicaset-1
spec:
   replicas: 2
   selector:
      matchLabels:
        tier: front-end
   template:
     metadata:
       labels:
        tier: nginx
     spec:
       containers:
       - name: nginx
         image: nginx

 

Label과 Selector의 이름이 맞지 않아서 selector가 label을 가져올수 없다는 에러를 출력하네요.
둘중 하나는 고쳐야겠어요

apiVersion: apps/v1
kind: ReplicaSet
metadata:
   name: replicaset-1
spec:
   replicas: 2
   selector:
      matchLabels:
        tier: nginx
   template:
     metadata:
       labels:
        tier: nginx
     spec:
       containers:
       - name: nginx
         image: nginx

 

 


오늘 이렇게 Label과 Selector를 알아보았습니다. 
다음엔 Taints 와 Tolerations를 이용해 노드와 Pod 간의 제약 조건을 설정하여 특정 노드에 특정 Pod가 스케줄링되지 않도록 하거나, 반대로 특정 Pod만 스케줄링되도록 하는방법을 알아볼게요.

 


참조

 Udemy Labs - Certified Kubernetes Administrator with Practice Tests