소개
kubectl run 명령어는 Kubernetes에서 Pod를 생성하는 가장 간단한 방법입니다. 최신 Kubernetes 버전에서는 kubectl run을 사용하여 Deployment나 Job을 생성하지 않으므로, 이 실습에서는 kubectl run과 각 리소스에 특화된 전용 명령어들을 함께 다룹니다. 이 실습을 통해 초보자가 각 워크로드 유형에 맞는 올바른 명령어를 선택하는 방법을 익힐 수 있습니다.
실습을 마치면 다음을 수행할 수 있게 됩니다:
- Minikube 클러스터를 시작하고 확인합니다.
kubectl run을 사용하여 Pod를 생성합니다.- 여러 개의 복제본(replica)을 가진 Deployment를 생성합니다.
- 배치 처리를 위한 Job을 생성하고 확인합니다.
- 클러스터 유지를 위해 리소스를 정리합니다.
Minikube 클러스터 시작하기
리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube는 로컬 머신에서 실행되는 경량 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다:
cd /home/labex/projectMinikube 시작:
Minikube를 시작하여 Kubernetes 클러스터를 초기화합니다:
minikube start- 이 명령어는 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
- 시스템 성능에 따라 Minikube가 시작되는 데 몇 분 정도 걸릴 수 있습니다.
Minikube 실행 상태 확인:
Minikube 클러스터의 상태를 확인합니다:
minikube statuskubelet및apiserver와 같은 구성 요소가Running상태인지 확인합니다.- 클러스터가 실행 중이 아니라면
minikube start를 다시 실행하세요.
Minikube 시작 중 문제가 발생하면 minikube delete를 사용하여 환경을 초기화할 수 있습니다.
kubectl run 명령어 살펴보기
kubectl run 명령어는 특정 이미지를 Pod 내에서 생성하고 실행하는 데 사용됩니다. Pod의 동작, 환경 및 사양을 사용자 정의할 수 있는 다양한 옵션을 제공합니다.
다음 명령어를 실행하여 kubectl run에서 사용할 수 있는 옵션을 확인하세요:
kubectl run -h
다음과 같은 출력 내용을 확인할 수 있습니다:
Create and run a particular image in a pod.
Examples:
## Start a nginx pod
kubectl run nginx --image=nginx
## Start a hazelcast pod and let the container expose port 5701
kubectl run hazelcast --image=hazelcast/hazelcast --port=5701
## Start a hazelcast pod and set environment variables "DNS_DOMAIN=cluster" and "POD_NAMESPACE=default" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --env="DNS_DOMAIN=cluster" --env="POD_NAMESPACE=default"
## Start a hazelcast pod and set labels "app=hazelcast" and "env=prod" in the container
kubectl run hazelcast --image=hazelcast/hazelcast --labels="app=hazelcast,env=prod"
## Dry run; print the corresponding API objects without creating them
kubectl run nginx --image=nginx --dry-run=client
## Start a nginx pod, but overload the spec with a partial set of values parsed from JSON
kubectl run nginx --image=nginx --overrides='{ "apiVersion": "v1", "spec": { ... } }'
## Start a busybox pod and keep it in the foreground, don't restart it if it exits
kubectl run -i -t busybox --image=busybox --restart=Never
## Start the nginx pod using the default command, but use custom arguments (arg1 .. argN) for that command
kubectl run nginx --image=nginx -- <arg1> <arg2> ... <argN>
## Start the nginx pod using a different command and custom arguments
kubectl run nginx --image=nginx --command -- <cmd> <arg1> ... <argN>
Pod 생성하기
Pod는 Kubernetes에서 배포 가능한 가장 작은 단위이며, 함께 실행되는 하나 이상의 컨테이너를 나타냅니다. 이번 단계에서는 Nginx 웹 서버를 실행하는 Pod를 생성해 보겠습니다.
Pod 생성:
다음 명령어를 실행하여
nginx-pod라는 이름의 Pod를 생성합니다:kubectl run nginx-pod --image=nginx--image옵션은 사용할 컨테이너 이미지를 지정합니다. 여기서는 공식 Nginx 이미지를 사용합니다.
Pod 확인:
Pod가 실행 중인지 확인합니다:
kubectl get pods- 출력에서
nginx-pod를 찾습니다. - Pod가 준비되면
STATUS열에Running이 표시되어야 합니다.
- 출력에서
Pod 상태가 Pending으로 표시된다면, Kubernetes가 컨테이너 이미지를 다운로드 중일 수 있습니다. 잠시 기다린 후 kubectl get pods를 다시 실행하세요.
Deployment 생성 및 복제본 확장
Deployment는 Pod 세트를 관리하고 원하는 상태로 실행되도록 보장합니다. 애플리케이션을 확장하거나 업데이트할 때 유용합니다.
Deployment 생성:
다음 명령어를 실행하여
nginx-deployment라는 이름의 Deployment를 생성합니다:kubectl create deployment nginx-deployment --image=nginx--image옵션은 사용할 컨테이너 이미지를 지정합니다.
Deployment를 3개의 복제본으로 확장:
--replicas플래그는 더 이상 사용되지 않으므로,kubectl scale을 사용하여 Deployment를 확장합니다.kubectl scale명령어를 사용하여 복제본 수를 조정합니다:kubectl scale deployment nginx-deployment --replicas=3- 이를 통해 3개의 Pod가 Deployment의 일부로 실행되도록 보장합니다.
Deployment 및 복제본 확인:
Deployment와 Pod의 상태를 확인합니다:
kubectl get deployments kubectl get pods- Deployment의
READY열 아래에 3개의 복제본이 표시되는지 확인합니다. kubectl get pods출력에 3개의 Pod가 나열되는지 확인합니다.
- Deployment의
Pod가 Running 상태가 아니라면 클러스터 리소스 부족 때문일 수 있습니다. 다음 명령어로 Pod 이벤트를 확인하세요:
kubectl describe pod <pod-name>
Job 생성하기
이번 단계에서는 짧은 배치 작업을 실행하기 위한 Kubernetes Job을 생성합니다. Job은 성공적인 완료를 추적하므로, 장기 실행 Pod와 달리 명령이 실행되고 종료되어야 할 때 적합한 리소스입니다.
- Job 생성
다음 명령어를 실행하여 busybox-job이라는 이름의 Job을 생성합니다:
kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
kubectl create job은 독립형 Pod 대신 Job 리소스를 생성합니다.echo명령어는 Job이 실행할 작업을 정의합니다.
- Job 상태 확인
다음 명령어를 실행하여 Job을 확인합니다:
kubectl get jobs
예상 출력:
NAME COMPLETIONS DURATION AGE
busybox-job 1/1 5s 10s
COMPLETIONS: Job이 한 번 성공적으로 완료되었음을 나타냅니다 (1/1).- 아직 Job이 나열되지 않으면 몇 초 기다린 후
kubectl get jobs를 다시 실행하세요.
- Job의 Pod 확인
Job은 Pod 내부에서 실행되므로, 다음 명령어를 사용하여 Pod를 확인합니다:
kubectl get pods
예상 출력:
NAME READY STATUS RESTARTS AGE
busybox-job-abcde 0/1 Completed 0 30s
- Pod 이름에는 Job에 의해 생성되었음을 나타내는 접미사가 포함됩니다.
STATUS필드에Completed가 표시되어야 하며, 이는 Job의 Pod가 성공적으로 완료되었음을 의미합니다.
- Job 출력 확인
Job의 로그를 확인하여 출력을 검증합니다:
kubectl logs job/busybox-job
예상 출력:
Hello from Kubernetes
이로써 Job이 성공적으로 실행되었음을 확인할 수 있습니다.
정리
클러스터를 깨끗하게 유지하기 위해 실습 중에 생성한 리소스를 삭제합니다.
리소스 삭제:
다음 명령어를 실행합니다:
kubectl delete pod nginx-pod kubectl delete deployment nginx-deployment kubectl delete job busybox-job정리 확인:
리소스가 남아 있지 않은지 확인합니다:
kubectl get pods kubectl get deployments- 생성한 리소스가 출력에 나타나지 않는지 확인합니다.
요약
이번 실습에서는 다음 내용을 배웠습니다:
- Minikube 클러스터를 시작하고 확인하는 방법.
kubectl run을 사용하여 Pod를 생성하고, 전용 명령어를 사용하여 Deployment와 Job을 생성하는 방법.- 클러스터를 정리하기 위해 리소스를 삭제하는 방법.
또한 Kubernetes가 워크로드 유형에 따라 서로 다른 명령어를 사용하는 방식도 확인했습니다. 이러한 단계를 연습함으로써 더 고급 Kubernetes 워크플로우를 위한 탄탄한 기초를 다질 수 있습니다.


