Skip to content

Commit 3cdc4b3

Browse files
committed
Merge pull request #11 from EarSEO/feat/springHelmEnv/#10
[#10] 스프링 헬름 패키지 환경변수 활용 변경
2 parents 32bc3cc + 10a99c3 commit 3cdc4b3

File tree

19 files changed

+366
-26
lines changed

19 files changed

+366
-26
lines changed

helm/spring/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ apiVersion: v2
22
name: spring
33
description: A Helm chart for EarSEO Spring
44
type: application
5-
version: 0.1.0
5+
version: 0.1.2
66
appVersion: "1.16.0"

helm/spring/templates/configmap.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ metadata:
55
labels:
66
app: {{ .Values.name }}
77
data:
8-
application-config.yaml: |
9-
{{ .Values.config | nindent 4 }}
8+
{{- toYaml .Values.env | nindent 2 }}
109
---

helm/spring/templates/deployment.yaml

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,29 @@ spec:
3333
env:
3434
- name: SPRING_PROFILES_ACTIVE
3535
value: {{ .Values.profile }}
36+
- name: NODE_IP
37+
valueFrom:
38+
fieldRef:
39+
fieldPath: status.hostIP
40+
{{- if .Values.kafkaUser.enabled }}
41+
- name: SPRING_KAFKA_PROPERTIES_SASL_JAAS_CONFIG
42+
valueFrom:
43+
secretKeyRef:
44+
{{- if .Values.kafkaUser.secretName }}
45+
name: {{ .Values.kafkaUser.secretName }}
46+
{{- else }}
47+
name: {{ .Values.name }}-kafka-user
48+
{{- end }}
49+
key: sasl.jaas.config
50+
{{- end }}
51+
envFrom:
52+
- configMapRef:
53+
name: {{ .Values.name }}-config
3654
ports:
3755
- containerPort: 8080
3856
protocol: TCP
3957
name: http
4058
volumeMounts:
41-
- mountPath: /etc/config
42-
name: configmap
43-
readOnly: true
4459
- mountPath: /etc/secret
4560
name: secret
4661
readOnly: true
@@ -61,12 +76,6 @@ spec:
6176
timeoutSeconds: 3
6277
failureThreshold: 3
6378
volumes:
64-
- name: configmap
65-
configMap:
66-
name: {{ .Values.name }}-config
67-
items:
68-
- key: application-config.yaml
69-
path: application-config.yaml
7079
- name: secret
7180
secret:
7281
secretName: {{ .Values.name }}-secret

helm/spring/templates/service.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ spec:
88
type: {{ .Values.service.type }}
99
ports:
1010
- port: {{ .Values.service.port }}
11+
{{- if .Values.service.nodePort }}
12+
nodePort: {{ .Values.service.nodePort }}
13+
{{- end }}
1114
targetPort: 8080
1215
protocol: TCP
1316
name: http

helm/spring/values.yaml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ resources:
2727
service:
2828
type: ClusterIP
2929
port: 8080
30+
# nodePort: 8080
3031

3132
# Autoscaling
3233
autoscaling:
@@ -53,10 +54,15 @@ monitor:
5354
service:
5455
interval: 10s
5556

56-
# Configmap
57-
config: |
58-
server:
59-
port: 8080
57+
# Configmap (환경변수)
58+
env:
59+
EXAMPLE_ENV: empty_value
6060

61+
# Secret (yaml 마운트)
6162
secret: |
6263
secret: i-am-secret
64+
65+
# KafkaUser
66+
kafkaUser:
67+
enabled: false
68+
secretName: "" # 필요시 오버라이드
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Kafka Topic 생성
2+
apiVersion: kafka.strimzi.io/v1beta2
3+
kind: KafkaTopic
4+
metadata:
5+
name: member-level
6+
namespace: kafka
7+
annotations:
8+
argocd.argoproj.io/sync-wave: "2"
9+
labels:
10+
strimzi.io/cluster: kafka-earseo-cluster
11+
spec:
12+
# 파티션 설정
13+
partitions: 1
14+
# 레플리카 설정 (1 master, 2 slave)
15+
replicas: 3
16+
config:
17+
# 메시지 보관 기간 (1 day)
18+
retention.ms: 86400000
19+
# 세그먼트 파일 크기 100MB
20+
segment.bytes: 104857600
21+
# 2개 이상의 레플리카에 저장되어야 저장 성공
22+
min.insync.replicas: 2
23+
# Zstandard 압축
24+
compression.type: zstd
25+
# 오래된 메시지 삭제 정책
26+
cleanup.policy: delete
27+
---
28+
apiVersion: kafka.strimzi.io/v1beta2
29+
kind: KafkaTopic
30+
metadata:
31+
name: story-test
32+
namespace: kafka
33+
annotations:
34+
argocd.argoproj.io/sync-wave: "2"
35+
labels:
36+
strimzi.io/cluster: kafka-earseo-cluster
37+
spec:
38+
# 파티션 설정
39+
partitions: 1
40+
# 레플리카 설정 (1 master, 2 slave)
41+
replicas: 3
42+
config:
43+
# 메시지 보관 기간 (1 day)
44+
retention.ms: 86400000
45+
# 세그먼트 파일 크기 100MB
46+
segment.bytes: 104857600
47+
# 2개 이상의 레플리카에 저장되어야 저장 성공
48+
min.insync.replicas: 2
49+
# Zstandard 압축
50+
compression.type: zstd
51+
# 오래된 메시지 삭제 정책
52+
cleanup.policy: delete
53+
---
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
apiVersion: v1
2+
kind: ServiceAccount
3+
metadata:
4+
name: kafka-user-secret-syncer
5+
namespace: backend
6+
annotations:
7+
argocd.argoproj.io/sync-wave: "-1"
8+
---
9+
apiVersion: rbac.authorization.k8s.io/v1
10+
kind: ClusterRole
11+
metadata:
12+
name: kafka-user-secret-syncer-role
13+
annotations:
14+
argocd.argoproj.io/sync-wave: "-1"
15+
rules:
16+
- verbs:
17+
- get
18+
- list
19+
- create
20+
- update
21+
- patch
22+
apiGroups: [""]
23+
resources: ["secrets"]
24+
---
25+
apiVersion: rbac.authorization.k8s.io/v1
26+
kind: ClusterRoleBinding
27+
metadata:
28+
name: kafka-user-secret-syncer-backend
29+
annotations:
30+
argocd.argoproj.io/sync-wave: "-1"
31+
subjects:
32+
- kind: ServiceAccount
33+
name: kafka-user-secret-syncer
34+
namespace: backend
35+
roleRef:
36+
apiGroup: rbac.authorization.k8s.io
37+
kind: ClusterRole
38+
name: kafka-user-secret-syncer-role
39+
---
40+
# Kafka User Secret backend 네임스페이스로 이동
41+
apiVersion: batch/v1
42+
kind: CronJob
43+
metadata:
44+
name: sync-kafka-user-secret
45+
namespace: backend
46+
annotations:
47+
argocd.argoproj.io/hook: PostSync
48+
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
49+
spec:
50+
schedule: "*/10 * * * *"
51+
concurrencyPolicy: Forbid
52+
jobTemplate:
53+
spec:
54+
backoffLimit: 10
55+
template:
56+
spec:
57+
serviceAccountName: kafka-user-secret-syncer
58+
restartPolicy: OnFailure
59+
containers:
60+
- name: cluster-init
61+
image: bitnami/kubectl:latest
62+
command:
63+
- /bin/sh
64+
- -c
65+
- |
66+
set -e
67+
68+
# KafkaUser 등록으로 같이 생성된 KafkaUser Secret
69+
SECRETS=(
70+
"backend-core-kafka-user:kafka:backend"
71+
"backend-story-kafka-user:kafka:backend"
72+
)
73+
74+
for secret_info in "${SECRETS[@]}"; do
75+
IFS=':' read -r secret_name src_ns dst_ns <<< "$secret_info"
76+
77+
echo "Syncing $secret_name from $src_ns to $dst_ns..."
78+
79+
kubectl get secret "$secret_name" -n "$src_ns" -o json \
80+
| jq 'del(.metadata.namespace, .metadata.resourceVersion, .metadata.uid, .metadata.creationTimestamp, .metadata.selfLink, .metadata.ownerReferences)' \
81+
| kubectl apply -n "$dst_ns" -f -
82+
done
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Kafka User 생성 (SASL_PLAINTEXT 인증)
2+
# KafkaUser의 이름은 ${서비스 레포지토리명}-kafka-user 패턴이어야함
3+
apiVersion: kafka.strimzi.io/v1beta2
4+
kind: KafkaUser
5+
metadata:
6+
name: backend-core-kafka-user
7+
namespace: kafka
8+
annotations:
9+
argocd.argoproj.io/sync-wave: "2"
10+
labels:
11+
strimzi.io/cluster: kafka-earseo-cluster
12+
spec:
13+
authentication:
14+
type: scram-sha-512
15+
authorization:
16+
type: simple
17+
acls:
18+
# core 토픽 읽기 권한
19+
- resource:
20+
type: topic
21+
name: "core-"
22+
patternType: prefix
23+
operations:
24+
- Read
25+
- Write
26+
- Describe
27+
- DescribeConfigs
28+
# sight 토픽 쓰기권한
29+
- resource:
30+
type: topic
31+
name: "sight-"
32+
patternType: prefix
33+
operations:
34+
- Write
35+
- Describe
36+
- DescribeConfigs
37+
# backend-core 컨슈머 그룹 읽기권한
38+
- resource:
39+
type: group
40+
name: "backend-core-consumer-group"
41+
patternType: literal
42+
operations:
43+
- Read
44+
- Describe
45+
---
46+
apiVersion: kafka.strimzi.io/v1beta2
47+
kind: KafkaUser
48+
metadata:
49+
name: backend-story-kafka-user
50+
namespace: kafka
51+
annotations:
52+
argocd.argoproj.io/sync-wave: "2"
53+
labels:
54+
strimzi.io/cluster: kafka-earseo-cluster
55+
spec:
56+
authentication:
57+
type: scram-sha-512
58+
authorization:
59+
type: simple
60+
acls:
61+
# story 토픽 읽기 권한
62+
- resource:
63+
type: topic
64+
name: "story-"
65+
patternType: prefix
66+
operations:
67+
- Read
68+
- Write
69+
- Describe
70+
- DescribeConfigs
71+
# member 토픽 쓰기권한
72+
- resource:
73+
type: topic
74+
name: "member-"
75+
patternType: prefix
76+
operations:
77+
- Write
78+
- Describe
79+
- DescribeConfigs
80+
# backend-story 컨슈머 그룹 읽기권한
81+
- resource:
82+
type: group
83+
name: "backend-story-consumer-group"
84+
patternType: literal
85+
operations:
86+
- Read
87+
- Describe
88+
---

k8s-manifests/middleware/postgres/postgres-manifests.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ data:
4141
apiVersion: v1
4242
kind: Service
4343
metadata:
44-
name: postgres
44+
name: postgres-svc
4545
namespace: postgres
4646
annotations:
4747
argocd.argoproj.io/sync-wave: "0"
@@ -64,7 +64,7 @@ metadata:
6464
annotations:
6565
argocd.argoproj.io/sync-wave: "1"
6666
spec:
67-
serviceName: postgres
67+
serviceName: postgres-svc
6868
replicas: 1
6969
selector:
7070
matchLabels:

k8s-manifests/monitoring/otel-collector.yaml

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ mode: daemonset
33
image:
44
repository: otel/opentelemetry-collector-contrib
55
tag: 0.134.1
6-
6+
hostNetwork: true
7+
dnsPolicy: ClusterFirstWithHostNet
78
clusterRole:
89
create: true
910
rules:
@@ -46,10 +47,16 @@ config:
4647
jaeger: null
4748
prometheus: null
4849
zipkin: null
50+
otlp:
51+
protocols:
52+
grpc:
53+
endpoint: 0.0.0.0:4317
54+
http:
55+
endpoint: 0.0.0.0:4318
4956
processors: # {}
50-
batch: {}
51-
# send_batch_size: 100
52-
# timeout: 50ms
57+
batch:
58+
send_batch_size: 1024
59+
timeout: 5s
5360
# send_batch_max_size: 500
5461

5562
exporters:

0 commit comments

Comments
 (0)