애플리케이션 업데이트
새로운 리소 스가 생성되거나 업데이트되면, 애플리케이션 구성은 이러한 새로운 리소스를 활용하기 위해 조정되어야 합니다. Kubernetes에서 환경 변수는 구성을 저장하는 데 널리 사용되는 방법이며, Deployment를 생성할 때 container spec의 env 필드를 통해 컨테이너에 전달할 수 있습니다.
이를 달성하는 두 가지 주요 방법이 있습니다:
-
ConfigMap: Kubernetes의 핵심 리소스로, 환경 변수, 텍스트 필드 및 기타 항목과 같은 구성 요소를 key-value 형식으로 전달하여 Pod spec에서 사용할 수 있게 합니다.
-
Secret: ConfigMap과 유사하지만 민감한 정보를 위한 것입니다. Kubernetes에서 Secret은 기본적으로 암호화되지 않는다는 점에 유의해야 합니다.
ACK FieldExport custom resource는 ACK 리소스의 제어 평면 관리와 해당 리소스의 _속성_을 애플리케이션에서 사용하는 것 사이의 격차를 해소하도록 설계되었습니다. 이는 ACK 컨트롤러가 ACK 리소스의 모든 spec 또는 status 필드를 Kubernetes ConfigMap 또는 Secret으로 내보내도록 구성합니다. 이러한 필드는 필드 값이 변경될 때 자동으로 업데이트되므로, ConfigMap 또는 Secret을 환경 변수로 Kubernetes Pod에 마운트할 수 있습니다.
이 실습에서는 carts 컴포넌트의 ConfigMap을 직접 업데이트하겠습니다. 로컬 DynamoDB를 가리키는 구성을 제거하고 ACK에서 생성한 DynamoDB 테이블의 이름을 사용하겠습니다:
- Kustomize Patch
- ConfigMap/carts
- Diff
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../../../../base-application/carts
patches:
- path: carts-serviceAccount.yaml
configMapGenerator:
- name: carts
namespace: carts
env: config.properties
behavior: replace
options:
disableNameSuffixHash: true
apiVersion: v1
data:
RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: ${EKS_CLUSTER_NAME}-carts-ack
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
namespace: carts
apiVersion: v1
data:
- AWS_ACCESS_KEY_ID: key
- AWS_SECRET_ACCESS_KEY: secret
- RETAIL_CART_PERSISTENCE_DYNAMODB_CREATE_TABLE: "true"
- RETAIL_CART_PERSISTENCE_DYNAMODB_ENDPOINT: http://carts-dynamodb:8000
- RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: Items
+ RETAIL_CART_PERSISTENCE_DYNAMODB_TABLE_NAME: ${EKS_CLUSTER_NAME}-carts-ack
RETAIL_CART_PERSISTENCE_PROVIDER: dynamodb
kind: ConfigMap
metadata:
name: carts
또한 carts Pod에 DynamoDB 서비스에 액세스할 수 있는 적절한 IAM 권한을 제공해야 합니다. IAM 역할이 이미 생성되어 있으며, IAM Roles for Service Accounts (IRSA)를 사용하여 이를 carts Pod에 적용하겠습니다:
- Kustomize Patch
- ServiceAccount/carts
- Diff
apiVersion: v1
kind: ServiceAccount
metadata:
name: carts
namespace: carts
annotations:
eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
name: carts
namespace: carts
apiVersion: v1
kind: ServiceAccount
metadata:
+ annotations:
+ eks.amazonaws.com/role-arn: ${CARTS_IAM_ROLE}
name: carts
namespace: carts
IRSA가 작동하는 방식에 대해 자세히 알아보려면 여기를 참조하세요.
이 새로운 구성을 적용해 보겠습니다:
이제 새로운 ConfigMap 내용을 적용하기 위해 carts Pod를 재시작해야 합니다:
deployment.apps/carts restarted
Waiting for deployment "carts" rollout to finish: 1 old replicas are pending termination...
deployment "carts" successfully rolled out
애플리케이션이 새로운 DynamoDB 테 이블과 함께 작동하는지 확인하기 위해 브라우저를 통해 상호 작용할 수 있습니다. 샘플 애플리케이션을 테스트하기 위해 NLB가 생성되었습니다:
http://k8s-ui-uinlb-647e781087-6717c5049aa96bd9.elb.us-west-2.amazonaws.com
이 명령을 실행할 때 새로운 Network Load Balancer 엔드포인트가 프로비저닝되므로 실제 엔드포인트는 다를 수 있습니다.
로드 밸런서 프로비저닝이 완료될 때까지 기다리려면 다음 명령을 실행할 수 있습니다:
로드 밸런서가 프로비저닝되면 웹 브라우저에 URL을 붙여넣어 액세스할 수 있습니다. 웹 스토어의 UI가 표시되며 사용자로서 사이트를 탐색할 수 있습니다.

Carts 모듈이 방금 프로비저닝한 DynamoDB 테이블을 실제로 사용하고 있는지 확인하려면 장바구니에 몇 가지 항목을 추가해 보세요.
이러한 항목이 DynamoDB 테이블에도 있는지 확인하려면 다음을 실행하세요:
축하합니다! Kubernetes API를 벗어나지 않고 AWS 리소스를 성공적으로 생성했습니다!