안녕하세요, 쯀리입니다.
오늘은 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
'IT 잡지식 > DevOps' 카테고리의 다른 글
[CKA] KodeKloud -Node Affinity (0) | 2024.06.08 |
---|---|
[CKA] KodeKloud -Taints and Tolerations (0) | 2024.06.08 |
[CKA] KodeKloud - Manual Scheduling (0) | 2024.06.03 |
[CKA] KodeKloud - CoreConcept Deployments와 Namespaces (0) | 2024.05.27 |
[CKA] KodeKloud - CoreConcept PODs와 ReplicaSets (0) | 2024.05.23 |