일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- React Native
- pod
- Configmap
- kubectl명령어
- aws cli ec2
- kubectl
- sql 공유
- jenkins parameter
- SecurityContextHolder
- statefulset
- 서버간 파일전송
- docker myql
- cli ec2
- describe-instances
- yaml예시
- linux 파일복사
- amazon ebs종류
- private repostiroy
- k8s
- amazon ebs
- EC2
- ELB
- Ansible
- 명령어
- nexus proxy
- docker
- aws cli
- 쿠버네티스교과서
- 쿠버네티스
- amazon ebs활용
- Today
- Total
게으름을 위한 부지런한 게으름뱅리' 블로그
[K8S] 쿠버네티스 Configmap과 yaml 예시 본문
쿠버네티스에서 ConfigMap은 애플리케이션 설정 정보를 저장하고 관리하는 리소스입니다. 주로 환경 변수, 설정 파일 등의 텍스트 데이터를 저장하는 데 사용됩니다. ConfigMap은 다음과 같은 특징을 가집니다:
- 텍스트 데이터 저장: 주로 텍스트 기반의 설정 정보를 저장합니다. 예를 들어, 데이터베이스 주소, 포트 번호, API 키, 환경 변수 등을 저장할 수 있습니다.
- 애플리케이션 설정 외부화: ConfigMap을 사용하여 애플리케이션의 설정을 컨테이너 이미지에서 분리할 수 있습니다. 이는 설정을 변경할 때 컨테이너를 다시 빌드하지 않고도 설정 값을 업데이트할 수 있게 합니다.
- 파드에서 볼륨 마운트: ConfigMap을 파드 내부에 볼륨으로 마운트하여 애플리케이션에 설정 값을 제공할 수 있습니다. 이를 통해 애플리케이션은 파일 시스템 경로를 통해 설정 값을 읽어들일 수 있습니다.
- 환경 변수로 주입: ConfigMap의 데이터를 환경 변수로 직접 주입하여 애플리케이션에서 활용할 수도 있습니다.
- 다양한 데이터 포맷 지원: ConfigMap은 텍스트 데이터뿐만 아니라 JSON, XML 등 다양한 데이터 형식을 저장할 수 있습니다.
ConfigMap은 일반적으로 YAML 파일을 사용하여 정의하거나 kubectl create configmap 명령어를 통해 생성할 수 있습니다. 애플리케이션의 설정 관리를 위해 중요한 쿠버네티스 리소스 중 하나입니다.
ConfigMap을 사용할 수 있는 주요 리소스
- 파드 (Pods):
- 파드 내에서 ConfigMap을 환경 변수로 주입하거나 볼륨으로 마운트하여 애플리케이션에 설정 값을 제공할 수 있습니다.
- 레플리카셋 (ReplicaSet):
- 레플리카셋을 통해 관리되는 파드들도 ConfigMap을 환경 변수로 주입하거나 볼륨으로 마운트하여 설정 값을 공유할 수 있습니다.
- 디플로이먼트 (Deployment):
- 디플로이먼트 역시 ConfigMap을 사용하여 파드에 설정 값을 제공할 수 있습니다. 디플로이먼트는 레플리카셋을 기반으로 하므로 레플리카셋과 동일하게 ConfigMap을 사용할 수 있습니다.
- 스테이트풀셋 (StatefulSet):
- 스테이트풀셋 역시 파드를 관리하는 리소스이며, ConfigMap을 환경 변수로 주입하거나 볼륨으로 마운트하여 설정 값을 전달할 수 있습니다.
- 데몬셋 (DaemonSet):
- 모든 노드에 하나씩 파드를 실행하는 데몬셋에서도 ConfigMap을 사용하여 설정 값을 제공할 수 있습니다.
- 잡 (Job) 및 크론잡 (CronJob):
- 일시적으로 실행되는 작업을 정의하는 잡 및 주기적으로 실행되는 작업을 정의하는 크론잡에서도 ConfigMap을 환경 변수로 주입하거나 볼륨으로 마운트하여 설정 값을 사용할 수 있습니다.
♬ YAML파일 설정 예시
다음은 ConfigMap을 사용하여 YAML 파일에서 설정을 정의하는 예시입니다
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config # ConfigMap의 이름
data:
# 텍스트 데이터를 key-value 쌍으로 정의
database-url: "mysql://db.example.com:3306/mydatabase"
api-key: "abc123xyz456"
app.properties: |
# 여러 줄의 설정 파일 예시
key1=value1
key2=value2
key3=value3
- apiVersion: 사용할 Kubernetes API 버전을 지정합니다. 여기서는 v1을 사용하고 있습니다.
- kind: 리소스의 종류를 지정합니다. 여기서는 ConfigMap을 정의하고 있습니다.
- metadata: ConfigMap의 메타데이터 정보를 지정합니다. 여기서는 ConfigMap의 이름을 app-config로 지정하고 있습니다.
- data: 실제로 저장할 데이터를 지정하는 부분입니다. 각각의 항목은 key-value 쌍으로 되어 있습니다.
- database-url: 데이터베이스 연결 URL을 설정하고 있습니다.
- api-key: 애플리케이션에서 사용할 API 키를 설정하고 있습니다.
- app.properties: 설정 파일 형태로 여러 줄의 데이터를 저장하고 있습니다. | 기호를 사용하여 다중 줄 문자열로 정의하였습니다.
이렇게 정의된 ConfigMap을 사용하면 파드나 다른 Kubernetes 리소스에서 이 설정 값을 활용할 수 있습니다. 예를 들어, 파드에서 ConfigMap을 환경 변수로 주입하거나 볼륨으로 마운트하여 설정 값을 사용할 수 있습니다.
♪ 파드에서 yaml 파일 Configmap 적용하기
♬ 환경 변수로 주입하는 예시
파드에서 ConfigMap을 환경 변수로 주입하는 방법은 env 필드를 사용하여 ConfigMap의 데이터를 환경 변수로 설정하는 것입니다.
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: 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
restartPolicy: Never
위 예시에서는 env 필드를 사용하여 ConfigMap의 database-url과 api-key를 각각 DATABASE_URL과 API_KEY 환경 변수로 주입하고 있습니다. 파드 내의 app-container에서는 이 환경 변수들을 사용하여 설정 값을 읽어들일 수 있습니다.
♬ 볼륨으로 마운트하는 예시
파드에서 ConfigMap을 볼륨으로 마운트하여 파일 시스템 경로를 통해 설정 값을 사용하는 방법은 volumes 및 volumeMounts 필드를 사용하여 구성합니다.
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app-container
image: my-app-image
volumeMounts:
- name: config-volume # 볼륨 이름
mountPath: /etc/config # 마운트될 경로
volumes:
- name: config-volume
configMap:
name: app-config # ConfigMap의 이름
restartPolicy: Never
위 예시에서는 volumes 필드에 ConfigMap을 지정하여 config-volume이라는 이름의 볼륨을 생성하고 있습니다. 그리고 volumeMounts 필드를 사용하여 app-container 내에서 /etc/config 경로에 이 볼륨을 마운트하고 있습니다. 이제 파드 내에서 /etc/config 경로를 통해 ConfigMap의 데이터에 접근할 수 있습니다.
이렇게 하면 파드에서 ConfigMap을 환경 변수로 주입하거나 볼륨으로 마운트하여 설정 값을 효과적으로 활용할 수 있습니다.
ConfigMap을 파드에서 환경 변수로 주입하거나 볼륨으로 마운트하는 작업은 YAML 파일 외에도 kubectl 명령어를 사용하여 직접 구성할 수 있습니다. 아래에서 각각의 방법에 대해 kubectl 명령어 예시를 보여드리겠습니다.
♪ kubectl로 적용하기
ConfigMap을 파드에서 환경 변수로 주입하거나 볼륨으로 마운트하는 작업은 YAML 파일 외에도 kubectl 명령어를 사용하여 직접 구성할 수 있습니다. 아래에서 각각의 방법에 대해 kubectl 명령어 예시를 보여드리겠습니다.
♬ 환경 변수로 주입하는 경우
환경 변수로 ConfigMap을 주입하기 위해서는 kubectl 명령어에서 env 옵션을 사용하여 각 환경 변수를 설정할 수 있습니다.
kubectl run app-pod --image=my-app-image --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}')" --restart=Never
위 명령어에서:
- kubectl run: 파드를 생성하는 명령어입니다.
- --env: 환경 변수를 설정하는 옵션입니다. 여기서는 kubectl get configmap 명령어를 사용하여 app-config ConfigMap에서 database-url과 api-key 값을 가져와 환경 변수로 설정하고 있습니다.
- --restart=Never: 파드의 재시작 정책을 설정하는 옵션입니다. 필요에 따라 조정할 수 있습니다.
♬ 볼륨으로 마운트하는 경우
볼륨으로 ConfigMap을 파드에 마운트하는 경우에는 kubectl 명령어에서 volume 및 volume-mount 옵션을 사용하여 설정합니다.
kubectl run app-pod --image=my-app-image --restart=Never --overrides='
{
"spec": {
"containers": [
{
"name": "app-container",
"volumeMounts": [
{
"name": "config-volume",
"mountPath": "/etc/config"
}
]
}
],
"volumes": [
{
"name": "config-volume",
"configMap": {
"name": "app-config"
}
}
]
}
}'
위 명령어에서:
- kubectl run: 파드를 생성하는 명령어입니다.
- --overrides: JSON 형식으로 파드의 스펙을 직접 설정할 수 있는 옵션입니다. 여기서는 spec.containers.volumeMounts 및 spec.volumes를 사용하여 ConfigMap을 config-volume이라는 이름의 볼륨으로 설정하고, 이를 /etc/config 경로에 마운트하고 있습니다.
- "name": "app-config": ConfigMap의 이름을 지정하고 있습니다.
이렇게 kubectl 명령어를 사용하여도 YAML 파일을 사용하는 것과 유사하게 ConfigMap을 환경 변수로 주입하거나 볼륨으로 마운트할 수 있습니다.
'IT > K8S' 카테고리의 다른 글
[K8S] K8S에서 공용 Data 사용하기 (StatefulSet yaml 예시 ) (0) | 2024.07.01 |
---|---|
[K8S] K8S에서 공용 Data 사용하기 (PV와 PVC yaml 예시) (0) | 2024.07.01 |
[쿠버네티스 교과서] 6,7,8,9,10,11장 정리 (0) | 2024.01.28 |
[K8S] kubectl pod, deployment, service 명령어 정리 (1) | 2023.12.10 |
[쿠버네티스 교과서] 파드, 디플로이먼트, 서비스 정리 & 문제 (0) | 2023.12.10 |