게으름을 위한 부지런한 게으름뱅리' 블로그

[K8S] 레플리카셋(ReplicaSet)에서 ConfigMap 적용(yaml, kubectl) 본문

카테고리 없음

[K8S] 레플리카셋(ReplicaSet)에서 ConfigMap 적용(yaml, kubectl)

LazismLee 2024. 6. 30. 16:09
반응형

 

레플리카셋(ReplicaSet)에서 ConfigMap을 사용하여 파드에 설정 값을 제공하는 방법을 YAML 파일과 kubectl 명령어를 사용하여 설명하겠습니다.

 

YAML 파일을 사용한 예시

1. ConfigMap을 사용하여 ReplicaSet을 정의하는 방법입니다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-image
          env:
            # ConfigMap의 데이터를 환경 변수로 주입
            - name: DATABASE_URL
              valueFrom:
                configMapKeyRef:
                  name: app-config   # ConfigMap의 이름
                  key: database-url  # ConfigMap에서 사용할 key
            - name: API_KEY
              valueFrom:
                configMapKeyRef:
                  name: app-config   # ConfigMap의 이름
                  key: api-key       # ConfigMap에서 사용할 key

 

2. ReplicaSet을 사용하여 ConfigMap을 볼륨으로 마운트하는 방법입니다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      volumes:
        - name: config-volume
          configMap:
            name: app-config   # ConfigMap의 이름
      containers:
        - name: my-app-container
          image: my-app-image
          volumeMounts:
            - name: config-volume
              mountPath: /etc/config   # 볼륨이 마운트될 경로
              readOnly: true   # 읽기 전용으로 마운트

 

ReplicaSet의 파드에 ConfigMap을 볼륨으로 마운트하고 있습니다. 이를 통해 /etc/config 경로에 ConfigMap의 데이터를 읽기 전용으로 마운트하여 애플리케이션에서 설정 값을 사용할 수 있습니다.

 

3. ConfigMap을 사용한 다중 파일 설정입니다.

apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config   # ConfigMap의 이름
data:
  database.properties: |
    # database.properties 파일의 내용
    database.url=mysql://db.example.com:3306/mydatabase
    database.user=admin
    database.password=secretpassword
  app.properties: |
    # app.properties 파일의 내용
    app.environment=production
    app.log.level=info
---
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      volumes:
        - name: config-volume
          configMap:
            name: app-config   # ConfigMap의 이름
      containers:
        - name: my-app-container
          image: my-app-image
          volumeMounts:
            - name: config-volume
              mountPath: /etc/config   # 볼륨이 마운트될 경로
              readOnly: true   # 읽기 전용으로 마운트

 

ConfigMap을 사용하여 여러 파일의 설정을 파드에 제공하는 방법을 보여줍니다. database.properties와 app.properties라는 두 개의 파일을 ConfigMap에 포함시키고, ReplicaSet의 파드에서 이를 볼륨으로 마운트하여 각각의 파일에 대한 설정 값을 애플리케이션에서 사용할 수 있습니다. 

이렇게 설정하면 ReplicaSet을 통해 여러 개의 파드를 관리하면서 각 파드에 동일한 ConfigMap을 환경 변수로 주입할 수 있습니다. ConfigMap을 사용함으로써 애플리케이션의 설정을 중앙에서 관리하고, 필요할 때 동적으로 설정 값을 변경할 수 있는 장점을 가집니다.

kubectl 명령어를 사용한 예시

1. ConfigMap을 ReplicaSet에 적용하는 방법입니다.

kubectl create configmap app-config --from-literal=database-url=mysql://db.example.com:3306/mydatabase --from-literal=api-key=abc123xyz456

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
        - name: my-app-container
          image: my-app-image
          env:
            - name: DATABASE_URL
              valueFrom:
                configMapKeyRef:
                  name: app-config
                  key: database-url
            - name: API_KEY
              valueFrom:
                configMapKeyRef:
                  name: app-config
                  key: api-key
EOF

 

  • ConfigMap 생성: 먼저 kubectl create configmap 명령어를 사용하여 ConfigMap을 생성합니다. 여기서는 app-config라는 이름으로 database-url과 api-key를 포함한 ConfigMap을 생성하고 있습니다.
  • ReplicaSet 정의: ReplicaSet의 YAML 파일에서는 spec.template.spec.containers 아래의 env 필드를 사용하여 각 환경 변수에 ConfigMap을 연결합니다.
    • configMapKeyRef를 사용하여 ConfigMap의 이름과 특정 key를 참조하여 환경 변수로 주입합니다.

2. kubectl 명령어를 사용하여 ReplicaSet을 생성하고, ConfigMap을 환경 변수로 주입하는 방법입니다.

# ConfigMap 생성
kubectl create configmap app-config --from-literal=database-url=mysql://db.example.com:3306/mydatabase --from-literal=api-key=abc123xyz456

# ReplicaSet 생성
kubectl create replicaset my-replicaset --image=my-app-image --replicas=3 --env="DATABASE_URL=$(kubectl get configmap app-config -o=jsonpath='{.data.database-url}')" --env="API_KEY=$(kubectl get configmap app-config -o=jsonpath='{.data.api-key}')"

kubectl create configmap 명령어로 ConfigMap을 생성하고, 이후에 kubectl create replicaset 명령어를 사용하여 ReplicaSet을 생성합니다. ReplicaSet을 생성할 때 --env 옵션을 사용하여 ConfigMap의 데이터를 환경 변수로 주입하고 있습니다.

 

3. ReplicaSet을 생성하고, ConfigMap을 볼륨으로 마운트하는 방법을 보여줍니다.

# ConfigMap 생성
kubectl create configmap app-config --from-literal=database-url=mysql://db.example.com:3306/mydatabase --from-literal=api-key=abc123xyz456

# ReplicaSet 생성
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      volumes:
        - name: config-volume
          configMap:
            name: app-config   # ConfigMap의 이름
      containers:
        - name: my-app-container
          image: my-app-image
          volumeMounts:
            - name: config-volume
              mountPath: /etc/config   # 볼륨이 마운트될 경로
              readOnly: true   # 읽기 전용으로 마운트
EOF

ConfigMap을 생성한 후에 kubectl apply 명령어와 리다이렉션(<<EOF)을 사용하여 ReplicaSet의 YAML을 인라인으로 정의하고 있습니다. 이를 통해 ReplicaSet을 생성하면서 ConfigMap을 볼륨으로 마운트하여 설정 값을 파드에 제공하고 있습니다.

 

반응형
Comments