Kubernetes Run 명령어

KubernetesBeginner
지금 연습하기

소개

kubectl run 명령어는 Kubernetes에서 Pod를 생성하는 가장 간단한 방법입니다. 최신 Kubernetes 버전에서는 kubectl run을 사용하여 Deployment나 Job을 생성하지 않으므로, 이 실습에서는 kubectl run과 각 리소스에 특화된 전용 명령어들을 함께 다룹니다. 이 실습을 통해 초보자가 각 워크로드 유형에 맞는 올바른 명령어를 선택하는 방법을 익힐 수 있습니다.

실습을 마치면 다음을 수행할 수 있게 됩니다:

  1. Minikube 클러스터를 시작하고 확인합니다.
  2. kubectl run을 사용하여 Pod를 생성합니다.
  3. 여러 개의 복제본(replica)을 가진 Deployment를 생성합니다.
  4. 배치 처리를 위한 Job을 생성하고 확인합니다.
  5. 클러스터 유지를 위해 리소스를 정리합니다.

Minikube 클러스터 시작하기

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube는 로컬 머신에서 실행되는 경량 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다:

    cd /home/labex/project
    
  2. Minikube 시작:

    Minikube를 시작하여 Kubernetes 클러스터를 초기화합니다:

    minikube start
    
    • 이 명령어는 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • 시스템 성능에 따라 Minikube가 시작되는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 실행 상태 확인:

    Minikube 클러스터의 상태를 확인합니다:

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 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를 생성해 보겠습니다.

  1. Pod 생성:

    다음 명령어를 실행하여 nginx-pod라는 이름의 Pod를 생성합니다:

    kubectl run nginx-pod --image=nginx
    
    • --image 옵션은 사용할 컨테이너 이미지를 지정합니다. 여기서는 공식 Nginx 이미지를 사용합니다.
  2. Pod 확인:

    Pod가 실행 중인지 확인합니다:

    kubectl get pods
    
    • 출력에서 nginx-pod를 찾습니다.
    • Pod가 준비되면 STATUS 열에 Running이 표시되어야 합니다.

Pod 상태가 Pending으로 표시된다면, Kubernetes가 컨테이너 이미지를 다운로드 중일 수 있습니다. 잠시 기다린 후 kubectl get pods를 다시 실행하세요.

Deployment 생성 및 복제본 확장

Deployment는 Pod 세트를 관리하고 원하는 상태로 실행되도록 보장합니다. 애플리케이션을 확장하거나 업데이트할 때 유용합니다.

  1. Deployment 생성:

    다음 명령어를 실행하여 nginx-deployment라는 이름의 Deployment를 생성합니다:

    kubectl create deployment nginx-deployment --image=nginx
    
    • --image 옵션은 사용할 컨테이너 이미지를 지정합니다.
  2. Deployment를 3개의 복제본으로 확장:

    --replicas 플래그는 더 이상 사용되지 않으므로, kubectl scale을 사용하여 Deployment를 확장합니다.

    kubectl scale 명령어를 사용하여 복제본 수를 조정합니다:

    kubectl scale deployment nginx-deployment --replicas=3
    
    • 이를 통해 3개의 Pod가 Deployment의 일부로 실행되도록 보장합니다.
  3. Deployment 및 복제본 확인:

    Deployment와 Pod의 상태를 확인합니다:

    kubectl get deployments
    kubectl get pods
    
    • Deployment의 READY 열 아래에 3개의 복제본이 표시되는지 확인합니다.
    • kubectl get pods 출력에 3개의 Pod가 나열되는지 확인합니다.

Pod가 Running 상태가 아니라면 클러스터 리소스 부족 때문일 수 있습니다. 다음 명령어로 Pod 이벤트를 확인하세요:

kubectl describe pod <pod-name>

Job 생성하기

이번 단계에서는 짧은 배치 작업을 실행하기 위한 Kubernetes Job을 생성합니다. Job은 성공적인 완료를 추적하므로, 장기 실행 Pod와 달리 명령이 실행되고 종료되어야 할 때 적합한 리소스입니다.

  1. Job 생성

다음 명령어를 실행하여 busybox-job이라는 이름의 Job을 생성합니다:

kubectl create job busybox-job --image=busybox -- echo "Hello from Kubernetes"
  • kubectl create job은 독립형 Pod 대신 Job 리소스를 생성합니다.
  • echo 명령어는 Job이 실행할 작업을 정의합니다.
  1. Job 상태 확인

다음 명령어를 실행하여 Job을 확인합니다:

kubectl get jobs

예상 출력:

NAME          COMPLETIONS   DURATION   AGE
busybox-job   1/1           5s         10s
  • COMPLETIONS: Job이 한 번 성공적으로 완료되었음을 나타냅니다 (1/1).
  • 아직 Job이 나열되지 않으면 몇 초 기다린 후 kubectl get jobs를 다시 실행하세요.
  1. 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가 성공적으로 완료되었음을 의미합니다.
  1. Job 출력 확인

Job의 로그를 확인하여 출력을 검증합니다:

kubectl logs job/busybox-job

예상 출력:

Hello from Kubernetes

이로써 Job이 성공적으로 실행되었음을 확인할 수 있습니다.

정리

클러스터를 깨끗하게 유지하기 위해 실습 중에 생성한 리소스를 삭제합니다.

  1. 리소스 삭제:

    다음 명령어를 실행합니다:

    kubectl delete pod nginx-pod
    kubectl delete deployment nginx-deployment
    kubectl delete job busybox-job
    
  2. 정리 확인:

    리소스가 남아 있지 않은지 확인합니다:

    kubectl get pods
    kubectl get deployments
    
    • 생성한 리소스가 출력에 나타나지 않는지 확인합니다.

요약

이번 실습에서는 다음 내용을 배웠습니다:

  1. Minikube 클러스터를 시작하고 확인하는 방법.
  2. kubectl run을 사용하여 Pod를 생성하고, 전용 명령어를 사용하여 Deployment와 Job을 생성하는 방법.
  3. 클러스터를 정리하기 위해 리소스를 삭제하는 방법.

또한 Kubernetes가 워크로드 유형에 따라 서로 다른 명령어를 사용하는 방식도 확인했습니다. 이러한 단계를 연습함으로써 더 고급 Kubernetes 워크플로우를 위한 탄탄한 기초를 다질 수 있습니다.