소개
이 랩에서는 간단한 배포를 생성하는 것으로 시작하여 노드 선택기 (Node Selector) 를 할당합니다. 그런 다음, 특정 노드에 파드를 스케줄링하기 위해 다양한 선택기를 사용하는 더 복잡한 시나리오로 이동합니다.
Minikube 클러스터 시작
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다.
cd /home/labex/projectMinikube 시작:
Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.
minikube start- 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
- Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다.
minikube statuskubelet및apiserver와 같은 구성 요소가Running으로 나열되어 있는지 확인합니다.- 클러스터가 실행 중이 아니면
minikube start를 다시 실행합니다.
Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.
간단한 배포 생성
이 단계에서는 단일 파드를 가진 간단한 배포를 생성합니다.
simple-deployment.yaml이라는 파일을 다음 내용으로 생성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: simple-deployment
spec:
replicas: 1
selector:
matchLabels:
app: simple-app
template:
metadata:
labels:
app: simple-app
spec:
containers:
- name: simple-container
image: nginx:latest
kubectl을 사용하여 배포를 생성합니다.
kubectl apply -f simple-deployment.yaml
- 배포가 생성되었는지 확인합니다.
kubectl get deployments
배포에 노드 선택자 할당
이 단계에서는 1 단계에서 생성한 배포에 노드 선택기 (Node Selector) 를 할당합니다.
- 레이블 (label) 로 노드를 생성합니다.
kubectl label nodes minikube disk=ssd
node-selector-deployment.yaml파일을 편집하고spec.template.spec섹션 아래에nodeSelector필드를 추가합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: selector-deployment
spec:
replicas: 1
selector:
matchLabels:
app: selector-app
template:
metadata:
labels:
app: selector-app
spec:
nodeSelector:
disk: ssd
containers:
- name: selector-container
image: nginx:latest
kubectl을 사용하여 변경 사항을 적용합니다.
kubectl apply -f node-selector-deployment.yaml
- 파드가
disk=ssd레이블이 있는 노드에 스케줄되었는지 확인합니다.
kubectl get pods -o wide | grep selector-deployment
다양한 노드 선택자 사용
이 단계에서는 서로 다른 노드 선택기 (Node Selector) 를 사용하여 해당 노드에 할당된 레이블 (label) 을 기반으로 특정 노드에 파드를 스케줄링합니다.
- 서로 다른 레이블로 세 개의 노드를 생성합니다.
kubectl label nodes minikube resigon=labex
kubectl label nodes minikube gpu=true
multi-selector-deployment.yaml이라는 파일을 다음 내용으로 생성합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: multi-selector-deployment
spec:
replicas: 3
selector:
matchLabels:
app: multi-selector-app
template:
metadata:
labels:
app: multi-selector-app
spec:
containers:
- name: multi-selector-container
image: nginx:latest
nodeSelector:
resigon: labex
gpu: "true"
- 변경 사항을 적용합니다.
kubectl apply -f multi-selector-deployment.yaml
- 파드가 적절한 레이블이 있는 노드에 스케줄되었는지 확인합니다.
kubectl get pods -o wide | grep multi-selector-deployment
요약
이 랩에서는 노드 선택기 (Node Selector) 와 노드 어피니티 (Node Affinity) 를 사용하여 특정 노드에 파드를 스케줄링하는 방법을 배웠습니다. 간단한 배포로 시작하여, 노드에 할당된 레이블을 기반으로 특정 노드에 파드를 스케줄링하기 위해 다양한 선택기와 어피니티 규칙을 사용하는 더 복잡한 시나리오로 이동했습니다.
축하합니다! 이 랩을 성공적으로 완료했습니다.


