실제로 여러 마이크로 서비스를 운영하다 보면, 우리팀에서 운영해야 하는 서비스가 많지만 대부분의 설정이 중복된다는 사실을 발견하게 된다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: payment-app-deployment
namespace: payment-app
spec:
replicas: 3
selector:
matchLabels:
app: payment-app
template:
metadata:
labels:
app: payment-app
spec:
containers:
- name: monitoring-agent
image: registry.spartacodingclub.kr/common-monitoring-agent:1.4.1
- name: nginx
image: registry.spartacodingclub.kr/common-nginx:1.27.0
ports:
- containerPort: 80
- name: redis
image: registry.spartacodingclub.kr/common-redis:7.2.4
ports:
- containerPort: 6379
- name: api
image: registry.spartacodingclub.kr/payment-app:1.0.0
ports:
- containerPort: 8080apiVersion: apps/v1
kind: Deployment
metadata:
name: user-app-deployment
namespace: user-app
spec:
replicas: 5
selector:
matchLabels:
app: user-app
template:
metadata:
labels:
app: user-app
spec:
containers:
- name: monitoring-agent
image: registry.spartacodingclub.kr/common-monitoring-agent:1.4.1
- name: nginx
image: registry.spartacodingclub.kr/common-nginx:1.27.0
ports:
- containerPort: 80
- name: redis
image: registry.spartacodingclub.kr/common-redis:7.2.4
ports:
- containerPort: 6379
- name: api
image: registry.spartacodingclub.kr/user-app:1.1.0
ports:
- containerPort: 8080위의 Deploymnet 오브젝트 사례를 보면 알겠지만 일부를 제외하면 거의 모든 부분의 설정을 공통으로 사용한다는 것을 알 수 있다.
-> 아래와 같이 중복되지 않는 부분을 변수화 시켜서 치환해버리면 어떨까? 하는 아이디어가 나오게 된다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.appName }}-deployment
namespace: {{ .Values.appName }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
app: {{ .Values.appName }}
template:
metadata:
labels:
app: {{ .Values.appName }}
spec:
containers:
- name: monitoring-agent
image: registry.spartacodingclub.kr/common-monitoring-agent:1.4.1
- name: nginx
image: registry.spartacodingclub.kr/common-nginx:1.27.0
ports:
- containerPort: 80
- name: redis
image: registry.spartacodingclub.kr/common-redis:7.2.4
ports:
- containerPort: 6379
- name: api
image: {{ .Values.appApiImage }}
ports:
- containerPort: 8080
