ConfigMap 으로 앱 구성하기

KubernetesBeginner
지금 연습하기

소개

이 랩에서는 Kubernetes 에서 ConfigMap 을 사용하여 애플리케이션을 구성하는 방법을 배우게 됩니다. ConfigMap 은 애플리케이션 코드에서 구성 데이터를 분리하여 애플리케이션 자체를 수정하지 않고도 애플리케이션 구성을 쉽게 관리하고 업데이트할 수 있는 방법을 제공합니다.

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를 사용하여 환경을 재설정하십시오.

Configmap 생성

이 단계에서는 애플리케이션의 구성 데이터를 포함하는 ConfigMap 을 생성합니다.

/home/labex/project/ 디렉토리에 다음 내용으로 configmap.yaml이라는 파일을 생성합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  DATABASE_URL: postgres://user:password@host:port/dbname

이 ConfigMap 은 DATABASE_URL을 키로 하고 PostgreSQL 데이터베이스 연결 문자열을 값으로 하는 단일 키 - 값 쌍을 포함합니다.

ConfigMap 을 생성하려면 다음 명령을 실행합니다.

kubectl apply -f configmap.yaml

애플리케이션에서 Configmap 사용하기

이 단계에서는 애플리케이션에서 ConfigMap 을 사용합니다.

/home/labex/project/ 디렉토리에 다음 내용으로 deployment.yaml이라는 파일을 생성합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app
          image: nginx:latest
          env:
            - name: DATABASE_URL
              valueFrom:
                configMapKeyRef:
                  name: my-config
                  key: DATABASE_URL

이 배포는 PostgreSQL 데이터베이스에 연결하기 위해 DATABASE_URL 환경 변수를 사용하는 애플리케이션을 실행하는 단일 컨테이너를 지정합니다. DATABASE_URL의 값은 my-config ConfigMap 에서 가져옵니다.

배포를 생성하려면 다음 명령을 실행합니다.

kubectl apply -f deployment.yaml

설정 확인

이 단계에서는 구성이 애플리케이션에 적용되었는지 확인합니다.

먼저, 다음 명령을 실행하여 애플리케이션을 실행하는 파드의 이름을 찾습니다.

kubectl get pods -l app=my-app

애플리케이션을 실행하는 단일 파드가 표시됩니다. 파드의 이름을 기록해 둡니다.

다음으로, 다음 명령을 실행하여 애플리케이션을 실행하는 컨테이너에서 셸 세션을 엽니다.

kubectl exec -it pod-name -- /bin/sh

<pod-name>을 앞에서 기록한 파드의 이름으로 바꿉니다.

셸 세션에 들어가면 다음 명령을 실행하여 DATABASE_URL 환경 변수의 값을 출력합니다.

echo $DATABASE_URL

ConfigMap 에서 설정한 데이터베이스 연결 문자열이 표시됩니다.

Configmap 업데이트

이 단계에서는 ConfigMap 을 업데이트하고 애플리케이션에 미치는 영향을 확인합니다.

configmap.yaml 파일을 DATABASE_URL 키의 새 값으로 업데이트합니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  DATABASE_URL: postgres://newuser:newpassword@newhost:newport/newdbname

이렇게 하면 DATABASE_URL 키가 새 값으로 업데이트됩니다.

ConfigMap 을 업데이트하려면 다음 명령을 실행합니다.

kubectl apply -f configmap.yaml

업데이트 확인

이 단계에서는 ConfigMap 에 대한 업데이트가 애플리케이션에 적용되었는지 확인합니다.

먼저, 다음 명령을 실행하여 애플리케이션을 실행하는 파드의 이름을 찾습니다.

kubectl get pods -l app=my-app

애플리케이션을 실행하는 단일 파드가 표시됩니다. 파드의 이름을 기록해 둡니다.

다음으로, 다음 명령을 실행하여 애플리케이션을 실행하는 컨테이너에서 셸 세션을 엽니다.

kubectl exec -it pod-name -- /bin/sh

<pod-name>을 앞에서 기록한 파드의 이름으로 바꿉니다.

셸 세션에 들어가면 다음 명령을 실행하여 DATABASE_URL 환경 변수의 값을 출력합니다.

echo $DATABASE_URL

구성 변경 사항이 적용되지 않았고, 이전과 동일한 데이터임을 확인할 수 있습니다. 다음 명령을 사용하여 Deployment 를 다시 시작해야 합니다.

kubectl rollout restart deployment my-app

재부팅이 완료되면 다시 컨테이너 내부로 들어가 위의 명령을 사용하여 구성을 확인합니다.

업데이트된 데이터베이스 연결 문자열을 확인할 수 있습니다.

요약

이 랩에서는 애플리케이션을 구성하기 위해 Kubernetes 에서 ConfigMap 을 사용하는 방법을 배웠습니다. 구성 데이터를 포함하는 ConfigMap 을 생성하고, 애플리케이션에서 ConfigMap 을 사용했으며, 애플리케이션에 미치는 영향을 확인하기 위해 ConfigMap 을 업데이트했습니다. 또한 구성이 애플리케이션에 적용되었는지 확인하고 랩에서 생성된 리소스를 정리하는 방법도 배웠습니다.