Pod 에서 컨테이너 실행하기

KubernetesBeginner
지금 연습하기

소개

이 랩에서는 Kubernetes Pod 에서 컨테이너를 실행하는 방법을 배우게 됩니다. Pod 는 Kubernetes 에서 가장 작고 단순한 단위이며, 하나 이상의 컨테이너를 포함할 수 있습니다. Pod 에서 컨테이너를 실행하면 더 나은 리소스 활용, 쉬운 확장, 그리고 더 효율적인 배포 등 많은 이점을 얻을 수 있습니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 93%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

Minikube 클러스터 시작

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

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

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

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

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

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

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

    minikube status
    • kubeletapiserver와 같은 구성 요소가 Running으로 표시되는지 확인합니다.
    • 클러스터가 실행 중이지 않으면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면, 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

단일 컨테이너 Pod 생성

첫 번째 단계는 단일 컨테이너를 가진 Pod 를 생성하는 것입니다. 이를 위해 Pod 와 해당 컨테이너를 정의하는 YAML 파일을 생성합니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-1
spec:
  containers:
    - name: my-container
      image: nginx

위 코드를 /home/labex/project/pod-single-container.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:

kubectl apply -f /home/labex/project/pod-single-container.yaml

이 명령어는 Nginx 이미지를 실행하는 my-container라는 단일 컨테이너를 가진 my-pod-1이라는 Pod 를 생성합니다.

다중 컨테이너 Pod 생성

두 번째 단계는 여러 컨테이너를 가진 Pod 를 생성하는 것입니다. 이를 위해 이전 YAML 파일을 수정하여 다른 컨테이너를 추가합니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-2
spec:
  containers:
    - name: my-container
      image: nginx
    - name: my-sidecar
      image: busybox
      command: ["sh", "-c", "echo Hello from the sidecar! && sleep 3600"]

위 코드를 /home/labex/project/pod-multiple-containers.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:

kubectl apply -f /home/labex/project/pod-multiple-containers.yaml

이 명령어는 두 개의 컨테이너를 가진 my-pod-2라는 Pod 를 생성합니다. 첫 번째 컨테이너는 Nginx 이미지를 실행하고, 두 번째 컨테이너는 BusyBox 이미지를 실행하며 콘솔에 메시지를 출력합니다.

환경 변수를 사용한 Pod 생성

세 번째 단계는 환경 변수를 가진 Pod 를 생성하는 것입니다. 이를 위해 YAML 파일을 수정하여 Nginx 컨테이너에 환경 변수를 추가합니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-3
spec:
  containers:
    - name: my-container
      image: nginx
      env:
        - name: MY_ENV_VAR
          value: "Hello World!"

위 코드를 /home/labex/project/pod-env-vars.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:

kubectl apply -f /home/labex/project/pod-env-vars.yaml

이 명령어는 Nginx 이미지를 실행하고 MY_ENV_VAR라는 환경 변수를 "Hello World!" 값으로 갖는 my-container라는 단일 컨테이너를 가진 my-pod-3라는 Pod 를 생성합니다.

Configmap 을 사용한 Pod 생성

네 번째 단계는 ConfigMap 을 가진 Pod 를 생성하는 것입니다. ConfigMap 은 애플리케이션 코드와 별도로 구성 데이터 (환경 변수, 구성 파일 등) 를 저장할 수 있게 해주는 Kubernetes 리소스입니다. 이러한 분리를 통해 컨테이너를 다시 빌드하지 않고도 구성을 쉽게 변경할 수 있습니다.

간단한 단계로 나누어 보겠습니다:

  1. 먼저, ConfigMap 을 생성합니다:

    kubectl create configmap my-config --from-literal=MY_ENV_VAR=labex

    이 명령어는 단일 키 - 값 쌍을 저장하는 my-config라는 ConfigMap 을 생성합니다:

    • 키: MY_ENV_VAR
    • 값: labex

    ConfigMap 이 생성되었는지 확인하고 내용을 보려면 다음을 사용합니다:

    kubectl get configmap my-config -o yaml
  2. 다음으로, 이 ConfigMap 을 사용하는 Pod 를 생성합니다:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-4
    spec:
      containers:
        - name: my-container
          image: nginx
          envFrom:
            - configMapRef:
                name: my-config

    이 YAML 을 /home/labex/project/pod-configmap.yaml에 저장하고 적용합니다:

    kubectl apply -f /home/labex/project/pod-configmap.yaml

    이렇게 하면 ConfigMap 에 저장한 구성 값에 접근할 수 있는 Pod 가 생성됩니다. 값은 컨테이너 내부에서 환경 변수로 사용할 수 있습니다. 다음을 실행하여 이를 확인할 수 있습니다:

    kubectl exec -it my-pod-4 -- env | grep MY_ENV_VAR

Persistent Volume 을 사용한 Pod 생성

다섯 번째 단계는 Persistent Volume (PV) 과 Persistent Volume Claim (PVC) 을 가진 Pod 를 생성하는 것입니다. PV 와 PVC 는 Pod 재시작 시에도 데이터를 지속적으로 저장하고 접근하는 데 사용됩니다.

이를 위해 먼저 PV 를 생성합니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"

위 코드를 /home/labex/project/pv.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:

kubectl apply -f /home/labex/project/pv.yaml

이 명령어는 1Gi 의 용량과 /mnt/data의 호스트 경로를 가진 my-pv라는 PV 를 생성합니다.

다음으로, PV 에서 1Gi 의 스토리지를 요청하는 PVC 를 생성합니다.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

위 코드를 /home/labex/project/pvc.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:

kubectl apply -f /home/labex/project/pvc.yaml

이 명령어는 1Gi 의 스토리지를 요청하는 my-pvc라는 PVC 를 생성합니다.

마지막으로, YAML 파일을 수정하여 Nginx 컨테이너에 볼륨과 볼륨 마운트를 추가합니다.

apiVersion: v1
kind: Pod
metadata:
  name: my-pod-5
spec:
  containers:
    - name: my-container
      image: nginx
      volumeMounts:
        - name: my-volume
          mountPath: /mnt/data
  volumes:
    - name: my-volume
      persistentVolumeClaim:
        claimName: my-pvc

위 코드를 /home/labex/project/pod-pv.yaml이라는 파일에 저장하고 다음 명령을 실행합니다:

kubectl apply -f /home/labex/project/pod-pv.yaml

이 명령어는 Nginx 이미지를 실행하고 my-pvc라는 PVC 로 지원되는 /mnt/data에 볼륨 마운트가 있는 my-container라는 단일 컨테이너를 가진 my-pod-5라는 Pod 를 생성합니다.

요약

축하합니다! 이 랩을 완료하고 Kubernetes Pod 에서 컨테이너를 실행하는 방법을 배웠습니다. 또한 여러 컨테이너, 환경 변수, ConfigMap 및 Persistent Volume 을 사용하여 Pod 를 생성하는 방법도 배웠습니다. 이는 더 탄력적이고 확장 가능한 애플리케이션을 구축하는 데 도움이 되는 강력한 개념입니다.