소개
이 랩에서는 Kubernetes Pod 에서 컨테이너를 실행하는 방법을 배우게 됩니다. Pod 는 Kubernetes 에서 가장 작고 단순한 단위이며, 하나 이상의 컨테이너를 포함할 수 있습니다. Pod 에서 컨테이너를 실행하면 더 나은 리소스 활용, 쉬운 확장, 그리고 더 효율적인 배포 등 많은 이점을 얻을 수 있습니다.
이 랩에서는 Kubernetes Pod 에서 컨테이너를 실행하는 방법을 배우게 됩니다. Pod 는 Kubernetes 에서 가장 작고 단순한 단위이며, 하나 이상의 컨테이너를 포함할 수 있습니다. Pod 에서 컨테이너를 실행하면 더 나은 리소스 활용, 쉬운 확장, 그리고 더 효율적인 배포 등 많은 이점을 얻을 수 있습니다.
리소스를 생성하기 전에, 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.
작업 디렉토리로 이동:
터미널을 열고 기본 프로젝트 폴더로 이동합니다:
cd /home/labex/project
Minikube 시작:
Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다:
minikube start
Minikube 가 실행 중인지 확인:
Minikube 클러스터의 상태를 확인합니다:
minikube status
kubelet 및 apiserver와 같은 구성 요소가 Running으로 표시되는지 확인합니다.minikube start를 다시 실행합니다.Minikube 를 시작하는 데 문제가 발생하면, 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.
첫 번째 단계는 단일 컨테이너를 가진 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 를 생성하는 것입니다. 이를 위해 이전 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 를 생성하는 것입니다. 이를 위해 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 은 애플리케이션 코드와 별도로 구성 데이터 (환경 변수, 구성 파일 등) 를 저장할 수 있게 해주는 Kubernetes 리소스입니다. 이러한 분리를 통해 컨테이너를 다시 빌드하지 않고도 구성을 쉽게 변경할 수 있습니다.
간단한 단계로 나누어 보겠습니다:
먼저, ConfigMap 을 생성합니다:
kubectl create configmap my-config --from-literal=MY_ENV_VAR=labex
이 명령어는 단일 키 - 값 쌍을 저장하는 my-config라는 ConfigMap 을 생성합니다:
ConfigMap 이 생성되었는지 확인하고 내용을 보려면 다음을 사용합니다:
kubectl get configmap my-config -o yaml
다음으로, 이 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 (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 를 생성하는 방법도 배웠습니다. 이는 더 탄력적이고 확장 가능한 애플리케이션을 구축하는 데 도움이 되는 강력한 개념입니다.