EBS 볼륨을 사용하는 StatefulSet
이제 StatefulSet과 동적 볼륨 프로비저닝을 이해했으니, Catalog 마이크로서비스의 MySQL DB를 변경하여 데이터베이스 파일을 영구적으로 저장할 새로운 EBS 볼륨을 프로비저닝하도록 하겠습니다.

Kustomize를 활용하여 다음 두 가지 작업을 수행하겠습니다:
- EBS 볼륨을 사용하는 catalog 컴포넌트용 MySQL 데이터베이스의 새로운 StatefulSet 생성
- 이 새로운 버전의 데이터베이스를 사용하도록
catalog컴포넌트 업데이트
정보
기존 StatefulSet을 업데이트하지 않는 이유는 무엇인가요? 업데이트해야 하는 필드가 불변(immutable)이어서 변경할 수 없기 때문입니다.
새로운 catalog 데이터베이스 StatefulSet은 다음과 같습니다:
~/environment/eks-workshop/modules/fundamentals/storage/ebs/statefulset-mysql.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: catalog-mysql-ebs
namespace: catalog
labels:
app.kubernetes.io/created-by: eks-workshop
app.kubernetes.io/team: database
spec:
replicas: 1
serviceName: catalog-mysql-ebs
selector:
matchLabels:
app.kubernetes.io/name: catalog
app.kubernetes.io/instance: catalog
app.kubernetes.io/component: mysql-ebs
template:
metadata:
labels:
app.kubernetes.io/name: catalog
app.kubernetes.io/instance: catalog
app.kubernetes.io/component: mysql-ebs
app.kubernetes.io/created-by: eks-workshop
app.kubernetes.io/team: database
spec:
containers:
- name: mysql
image: "public.ecr.aws/docker/library/mysql:8.0"
imagePullPolicy: IfNotPresent
env:
- name: MYSQL_ROOT_PASSWORD
value: my-secret-pw
- name: MYSQL_DATABASE
value: catalog
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: catalog-db
key: RETAIL_CATALOG_PERSISTENCE_USER
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: catalog-db
key: RETAIL_CATALOG_PERSISTENCE_PASSWORD
volumeMounts:
- name: data
mountPath: /var/lib/mysql
ports:
- name: mysql
containerPort: 3306
protocol: TCP
volumes:
- name: data
emptyDir: {}
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: ebs-csi-default-sc
resources:
requests:
storage: 30Gi
A
volumeClaimTemplates 필드는 Kubernetes에게 동적 볼륨 프로비저닝을 활용하여 새로운 EBS 볼륨, PersistentVolume (PV) 및 PersistentVolumeClaim (PVC)를 모두 자동으로 생성하도록 지시합니다.
B
storageClassName을 기본 storage class의 이름인 ebs-csi-default-sc로 지정합니다.
C
30GB EBS 볼륨을 요청합니다.
다음은 새로운 StatefulSet을 사용하도록 catalog 컴포넌트 자체를 재구성하는 방법입니다:
- Kustomize Patch
- ConfigMap/catalog
- Diff
~/environment/eks-workshop/modules/fundamentals/storage/ebs/configMap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: catalog
data:
RETAIL_CATALOG_PERSISTENCE_ENDPOINT: catalog-mysql-ebs:3306
apiVersion: v1
data:
RETAIL_CATALOG_PERSISTENCE_DB_NAME: catalog
RETAIL_CATALOG_PERSISTENCE_ENDPOINT: catalog-mysql-ebs:3306
RETAIL_CATALOG_PERSISTENCE_PROVIDER: mysql
kind: ConfigMap
metadata:
name: catalog
namespace: catalog
apiVersion: v1
data:
RETAIL_CATALOG_PERSISTENCE_DB_NAME: catalog
- RETAIL_CATALOG_PERSISTENCE_ENDPOINT: catalog-mysql:3306
+ RETAIL_CATALOG_PERSISTENCE_ENDPOINT: catalog-mysql-ebs:3306
RETAIL_CATALOG_PERSISTENCE_PROVIDER: mysql
kind: ConfigMap
metadata:
name: catalog