소개
이 글에서는 무엇을 다룰까요?
- ConfigMap이란 무엇인가요?
- ConfigMap이 있는 Redis 마스터
- 파일에서 ConfigMap 만들기
- YAML 파일에서 ConfigMap 만들기
- ConfigMap을 사용하여 구성 데이터 읽기
전제조건
- AKS에 애플리케이션 배포 | 파트 – 1
AKS 1부의 애플리케이션 배포에 대한 이전 문서에서는 자신이 만든 Redis 마스터 배포를 검사했습니다. 배포가 ReplicaSet과 어떻게 관련되는지, ReplicaSet가 Pod와 어떻게 관련되는지 확인했습니다. 이 2부에서는 ConfigMap을 통해 제공되는 환경별 구성을 사용하여 이 Redis 마스터를 다시 생성합니다. 하지만 먼저 ConfigMap이 무엇인지부터 살펴보겠습니다.
ConfigMap이란 무엇인가요?
또한 ConfigMap을 사용하여 구성 세부 정보를 제공하도록 샘플 애플리케이션을 편집합니다. ConfigMap은 Pod에 구성 세부정보를 제공하는 데 사용되는 객체입니다. 이를 통해 실제 컨테이너 외부에 구성 설정을 유지할 수 있습니다. 그런 다음 ConfigMap을 배포에 연결하여 이러한 구성 세부 정보를 애플리케이션에 제공할 수 있습니다.
ConfigMap이 있는 Redis 마스터
이전 배포에는 아무런 문제가 없었습니다. 실제 사용 사례에서는 일부 구성 설정 없이 애플리케이션을 시작하는 경우가 거의 없습니다. 이 경우 ConfigMap을 사용하여 redis-master에 대한 구성 설정을 지정하겠습니다. ConfigMap은 각 구성에 대한 특수 이미지 없이 컨테이너를 구성하는 이식 가능한 방법입니다. 컨테이너에 설정해야 하는 데이터에 대한 키-값 쌍이 있습니다. ConfigMap은 비밀이 아닌 구성에 사용됩니다. Kubernetes에는 Secret이라는 별도의 객체가 있습니다. 비밀은 비밀번호와 같은 중요한 데이터가 포함된 구성에 사용됩니다.
이 예에서는 ConfigMap을 생성하겠습니다. 이 ConfigMap에서는 redis-config를 키로 구성하고 값은 다음과 같습니다.
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
이제 이 ConfigMap을 만들어 보겠습니다. ConfigMap을 생성하는 방법에는 두 가지가 있습니다.
- 파일에서 ConfigMap 만들기
- YAML 파일에서 ConfigMap 만들기
각 항목을 자세히 살펴보겠습니다.
파일에서 ConfigMap 생성
다음 단계는 파일에서 ConfigMap을 만드는 데 도움이 됩니다:
1단계. 터미널에 redis-config 코드를 입력하여 Azure Cloud Shell 코드 편집기를 엽니다. 다음 두 줄을 복사하여 붙여넣고 redis-config로 저장하세요.
maxmemory: "2mb"
maxmemory-policy: "allkeys-lru"
2단계. 이제 다음 코드를 사용하여 ConfigMap을 생성할 수 있습니다.
kubectl create configmap example-redis-config --from-file=redis-config
아래와 같이 출력되어야 합니다
configmap/example-redis-config created
3단계. 동일한 명령을 사용하여 이 ConfigMap을 설명할 수 있습니다.
kubectl describe configmap/example-redis-config 출력은 아래 스크린샷과 같습니다.
YAML 파일에서 ConfigMap 생성
이 섹션에서는 YAML 파일을 사용하여 이전 섹션의 ConfigMap을 다시 생성합니다.
1단계. 시작하려면 이전에 생성된 ConfigMap을 삭제하세요.
kubectl delete configmap/example-redis-config
2단계. 다음 줄을 복사하여 example-redis-config.yaml이라는 파일에 붙여넣은 후 파일을 저장합니다.
apiVersion: v1
data:
redis-config: |-
maxmemory 2mb
maxmemory-policy allkeys-lru
kind: ConfigMap
metadata:
name: example-redis-config
namespace: default
3단계. 이제 다음 명령을 통해 ConfigMap을 다시 만들 수 있습니다.
kubectl create -f example-redis-config.yaml 아래와 같이 출력되어야 합니다.
configmap/example-redis-config created
5단계. 이 명령은 이전 명령과 동일한 출력을 반환합니다.
보시다시피 YAML 파일을 사용하여 동일한 ConfigMap을 생성할 수 있었습니다.
참고. kubectl get에는 YAML 또는 JSON으로 객체의 출력을 가져오는 데 사용할 수 있는 유용한 옵션 -o가 있습니다. 이는 시스템을 수동으로 변경하고 결과 개체를 YAML 형식으로 확인하려는 경우에 매우 유용합니다. 다음 명령을 사용하여 YAML에서 현재 ConfigMap을 가져올 수 있습니다.
kubectl get -o yaml configmap/example-redis-config
이제 ConfigMap을 정의했으니 사용해 보겠습니다.
ConfigMap을 사용하여 구성 데이터 읽기
이 섹션에서는 ConfgMap에서 구성을 읽도록 redis-master 배포를 재구성합니다.
1단계. 시작하려면 다음과 같이 ConfigMap을 사용하도록 redis-master-deployment.yaml을 수정합니다. 변경해야 할 사항은 소스 코드 뒤에 설명되어 있습니다.
참고. GitHub에서 소스 코드를 다운로드한 경우 배포 폴더에 redis-master-deployment_Modified.yaml이라는 AKS의 애플리케이션 배포 파일이 있으며 여기에는 필요한 변경 사항이 적용되어 있습니다.
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: redis-master
labels:
app: redis
spec:
selector:
matchLabels:
app: redis
role: master
tier: backend
replicas: 1
template:
metadata:
labels:
app: redis
role: master
tier: backend
spec:
containers:
- name: master
image: k8s.gcr.io/redis:e2e
command:
- redis-server
- "/redis-master/redis.conf"
env:
- name: MASTER
value: "true"
volumeMounts:
- mountPath: /redis-master
name: config
resources:
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
volumes:
- name: config
configMap:
name: example-redis-config
items:
- key: redis-config
path: redis.conf
다양한 섹션을 이해하기 위해 코드를 더 자세히 살펴보겠습니다.
24-26행
이 줄은 Pod가 시작될 때 실행될 명령어를 소개합니다. 이 경우 특정 구성 파일을 가리키는 redis-server가 시작됩니다.
command:
- redis-server
- "/redis-master/redis.conf" 27-29행
실행 중인 컨테이너에 구성 데이터를 전달하는 방법을 보여줍니다. 이 방법은 환경 변수를 사용합니다. Docker 형식에서는 docker run -e "MASTER=true"와 동일합니다. --name 마스터 -p 6379:6379 -m 100M -c 100m -d Kubernetes /redis:v1. 그러면 환경 변수 MASTER가 true로 설정됩니다. 귀하의 애플리케이션은 해당 구성에 대한 환경 변수 설정을 읽을 수 있습니다.
env:
- name: MASTER
value: "true" 30-32행
이 라인은 실행 중인 컨테이너의 /redis-master 경로에 config라는 볼륨(이 볼륨은 라인 39-45에 정의되어 있음)을 마운트합니다. 원래 컨테이너의 /redis-master에 존재하는 모든 것을 숨깁니다. Docker 용어로 말하면 docker run -v config:/redis-master와 동일합니다. -e "MASTER=TRUE" --name 마스터 -p 6379:6379 -m 100M -c 100m -d Kubernetes / redis:v1.
volumeMounts:
- mountPath: /redis-master
name: config
40행
볼륨에 config라는 이름을 부여합니다. 이 이름은 이 Pod의 컨텍스트 내에서 사용됩니다.
name: config 41-42행
example-redis config ConfigMap에서 이 볼륨을 로드해야 한다고 선언합니다. 이 ConfigMap은 시스템에 이미 존재해야 합니다. 이미 정의했으므로 괜찮습니다.
configMap:
name: example-redis-config 43-45행
여기에서는 redis-config 키 값(두 줄의 maxmemory 설정)을 redis.conf 파일로 로드합니다.
items:
- key: redis-config
path: redis.conf
2단계. 업데이트된 배포를 만들어 보겠습니다.
kubectl create -f redis-master-deployment_Modified.yml
그러면 다음이 출력됩니다.
deployment.apps/redis-master created
3단계. 이제 구성이 성공적으로 적용되었는지 확인해 보겠습니다. 먼저 포드의 이름을 알아보세요.
kubectl get pods
4단계. 그런 다음 Pod를 실행하고 설정이 적용되었는지 확인하세요.
kubectl exec -it redis-master-<pod-id> redis-cli
127.0.0.1:6379> CONFIG GET maxmemory
1) "maxmemory"
2) "2097152"
127.0.0.1:6379> CONFIG GET maxmemory-policy
"maxmemory-policy"
"allkeys-lru"
127.0.0.1:6379> exit
요약하자면, 클라우드 네이티브 애플리케이션 구성의 중요하고 까다로운 부분을 수행했습니다. 또한 구성을 동적으로 읽도록 앱을 구성해야 한다는 점도 알아차렸을 것입니다. 구성을 사용하여 앱을 설정한 후 실행 중인 컨테이너에 액세스하여 실행 중인 구성을 확인했습니다.
이 2부에서는 ConfigMap에서 구성 데이터를 로드하도록 Redis 마스터를 구성했습니다. 다음 마지막 3부에서는 엔드투엔드 애플리케이션을 배포할 예정입니다.