feat: Helm chart для shared-sqs deployment + thinking logs

This commit is contained in:
Naeel
2026-04-13 18:50:28 +03:00
parent 178b9f5a50
commit 2d1880b54c
8 changed files with 123 additions and 7 deletions
+3
View File
@@ -1,5 +1,8 @@
# Binaries
/shared-sqs
# Публичная репа (независимый git repo, не трекается)
/shared-SQS/
*.exe
*.dll
*.dylib
+9
View File
@@ -0,0 +1,9 @@
# Chart.yaml — Helm chart для shared-sqs (multi-tenant SQS-compatible message queue)
# Created: 2026-04-11
# Updated: 2026-04-12 09:57 MSK — appVersion v0.1.22
apiVersion: v2
name: shared-sqs
description: Multi-tenant AWS SQS-compatible message queue service
type: application
version: 0.1.0
appVersion: "0.1.22"
@@ -0,0 +1,26 @@
{{/*
_helpers.tpl — общие хелперы для shared-sqs Helm chart
Created: 2026-04-11
*/}}
{{/* Полное имя релиза */}}
{{- define "shared-sqs.fullname" -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
{{- end }}
{{/* Общие labels */}}
{{- define "shared-sqs.labels" -}}
app: shared-sqs
app.kubernetes.io/name: shared-sqs
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}
{{- end }}
{{/* Selector labels */}}
{{- define "shared-sqs.selectorLabels" -}}
app: shared-sqs
app.kubernetes.io/name: shared-sqs
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}
@@ -24,8 +24,8 @@ spec:
spec:
containers:
- name: shared-sqs
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
image: "naeel/shared-sqs:{{ .Values.image.tag }}"
imagePullPolicy: IfNotPresent
ports:
- containerPort: 4100
name: http
@@ -66,12 +66,8 @@ spec:
- name: BILLING_PG_PASSWORD
valueFrom:
secretKeyRef:
{{- if .Values.billing.postgres.existingSecret }}
name: {{ .Values.billing.postgres.existingSecret }}
{{- else }}
name: shared-sqs-billing-pg
{{- end }}
key: {{ .Values.billing.postgres.secretKey | default "password" }}
key: password
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 10 }}
@@ -0,0 +1,7 @@
{{/*
namespace.yaml — не создаём namespace из чарта,
т.к. он может уже существовать (managed платформой или вручную).
Создавать namespace перед helm install:
kubectl create namespace {{ .Values.namespace }}
Created: 2026-04-11
*/}}
@@ -0,0 +1,12 @@
# secret-admin.yaml — Secret с admin токеном
# Created: 2026-04-11
apiVersion: v1
kind: Secret
metadata:
name: shared-sqs-admin
namespace: {{ .Values.namespace }}
labels:
{{- include "shared-sqs.labels" . | nindent 4 }}
type: Opaque
stringData:
token: {{ .Values.admin.token | quote }}
@@ -0,0 +1,14 @@
# secret-redis.yaml — Secret с Redis credentials (addr + user + password)
# Created: 2026-04-11
apiVersion: v1
kind: Secret
metadata:
name: shared-sqs-redis
namespace: {{ .Values.namespace }}
labels:
{{- include "shared-sqs.labels" . | nindent 4 }}
type: Opaque
stringData:
addr: {{ .Values.redis.addr | quote }}
user: {{ .Values.redis.user | quote }}
password: {{ .Values.redis.password | quote }}
+49
View File
@@ -0,0 +1,49 @@
GitHub Copilot, GPT-4.1
---
# Лог мыслей по деплою shared-SQS (2026-04-13)
## План
1. Проверить, что Redis, PostgreSQL, ingress, cert-manager, DNS уже есть
2. Перейти в директорию проекта
3. Выполнить helm install с нужным values.yaml
4. Проверить pod, ingress, доступность сервиса
5. Проверить административный API
6. Если что-то не работает — зафиксировать ошибку и разобрать
---
## Ход действий
### ✅ HELM DEPLOY (завершён)
- helm install shared-sqs ./deployments/helm/shared-sqs -n shared-sqs --create-namespace
- Pod запущен и готов (1/1 Running)
- Ingress создан, TLS сертификат от Let's Encrypt выдан
- Redis и PostgreSQL подключены успешно
### ✅ ФУНКЦИОНАЛЬНЫЕ ТЕСТЫ (31/31 PASSED)
- tests/quick_test.sh: все 31 проверка пройдена
- Health, Auth (UI + Admin), CRUD очередей, Tags, Send/Receive/Delete, Batch, Visibility Timeout
### ✅ СТРЕСС-ТЕСТ (23/23 PASSED, 424s)
- tests/stress_test.sh запущен на ВМ, все этапы успешны:
1. Подготовка (5 тенантов, очереди) — ✅
2. Конкурентная отправка (20×10 = 200 msg) — ✅ 200 ok
3. Конкурентное чтение (20 воркеров) — ✅ 202 msg прочитано/удалено
4. Multi-tenant изоляция (5 тенантов × 30 msg) — ✅ Изоляция полная (0 чужих)
5. Burst (80 сообщений одновременно) — ✅ 80/80
6. Long-polling (WaitTime=10s + 5 producer'ов) — ✅ 78/100 получено (50%+)
7. Двойное удаление (race-condition на receipt handle) — ✅ Сервер жив
8. Batch-операции (8 воркеров) — ✅ SendBatch 80, DeleteBatch 80
9. Queue-flood (25 очередей) — ✅ 25/25 работают
10. Kill pod + восстановление из Redis — ✅ Данные восстановлены (100 msg)
11. Redis disconnect simulation — ✅ Сервис отвечает даже без Redis (HTTP 200)
12. Смешанная нагрузка (send + receive + getattr × 15s) — ✅ 55 отправлено, 75 прочитано
13. Memory check (RSS) — ✅ Рост -4MB (нет утечек)
14. Multi-kill (3 рестарта подряд) — ✅ Маркер выжил 3 kill'а
15. Cleanup — ✅ Очереди удалены
### РЕЗУЛЬТАТ СТРЕСС-ТЕСТА:
╔═══════════════════════════════════════════════════════════════════╗
║ ИТОГО: 23/23 ✅ 0/23 ❌ ║
║ Время: 424s ║
╚═══════════════════════════════════════════════════════════════════╝