Computer >> 컴퓨터 >  >> 프로그래밍 >> Redis

Azure Kubernetes Service에 애플리케이션 배포:2부 – 고급 구성

소개

이 글에서는 무엇을 다룰까요?

  • 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  

Azure Kubernetes Service에 애플리케이션 배포:2부 – 고급 구성

3단계. 동일한 명령을 사용하여 이 ConfigMap을 설명할 수 있습니다.

kubectl describe configmap/example-redis-config  

출력은 아래 스크린샷과 같습니다.

Azure Kubernetes Service에 애플리케이션 배포:2부 – 고급 구성

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  

Azure Kubernetes Service에 애플리케이션 배포:2부 – 고급 구성

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부에서는 엔드투엔드 애플리케이션을 배포할 예정입니다.