Files
sless/deployments/k8s/operator.yaml
T
Naeel d7fda15d35 feat: Go runtime v0.1.1 (pgx/v5), stress-go-pgstorm, fix invoke.go dynamic timeout, nginx ingress timeout 900s
- runtimes/go1.23: добавлен pgx/v5 v5.7.2 в go.mod, сгенерирован go.sum
- runtimes/go1.23/Dockerfile: один stage golang:1.23-alpine, go mod download кеширует зависимости
- internal/builder/context.go: тег Go runtime v0.1.0 → v0.1.1
- internal/api/handler/invoke.go: таймаут прокси-клиента теперь динамический из Function.Spec.TimeoutSec + 5s буфер (был хардкод 30s)
- examples/POSTGRES/code/stress-go-pgstorm/handler.go: новая функция, 100 горутин, pgxpool, INSERT/COUNT/MAX, параметры: workers/duration_sec/max_delay_ms
- examples/POSTGRES/resources.tf: добавлены sless_function.stress_go_pgstorm + trigger, timeout_sec=700
- deployments/k8s/operator.yaml: nginx ingress proxy-read-timeout=900s, proxy-send-timeout=900s
- examples/*/main.tf: исправлен URL deck-api-test.ngcloud.ru → deck-test.ngcloud.ru (все 9 файлов)
- Оператор: v0.1.39 (pgx/v5) → v0.1.40 (dynamic timeout)
2026-03-19 21:33:41 +03:00

152 lines
5.1 KiB
YAML

# Изменено: 2026-03-11
# Деплой sless оператора в кластер.
# Состав:
# - ConfigMap: не-секретные env vars (S3_ENDPOINT, REGISTRY_HOST и т.д.)
# - Secret: секретные данные (S3 keys, postgres DSN, API token, Harbor pass)
# - Deployment: оператор naeel/sless-operator:v0.1.33 в namespace sless
# - Service: ClusterIP :9090 (REST API)
# - Ingress: sless.kube5s.ru → :9090 (внешний доступ с TLS)
#
# Чтобы сменить registry — менять только REGISTRY_HOST в ConfigMap.
# Чтобы сменить Harbor-аккаунт — менять HARBOR_USER в ConfigMap + HARBOR_PASS в Secret.
#
# Применение: kubectl apply -f deployments/k8s/operator.yaml
---
apiVersion: v1
kind: ConfigMap
metadata:
name: sless-operator-config
namespace: sless
data:
S3_ENDPOINT: "s3.msk-1.ngcloud.ru"
S3_BUCKET: "sless-functions"
S3_USE_SSL: "true"
# REGISTRY_HOST — единственное место, где прописан адрес registry.
# Чтобы сменить реестр — менять только здесь.
# Harbor: pearlharbor.registryk8s.services.ngcloud.ru
# DockerHub (legacy): naeel
REGISTRY_HOST: "pearlharbor.registryk8s.services.ngcloud.ru"
REGISTRY_SECRET: "sless-registry-auth"
HARBOR_USER: "admin"
API_PORT: "9090"
INGRESS_HOST: "fn.kube5s.ru"
# EXTERNAL_URL — если задан, URL функции = EXTERNAL_URL/fn/{namespace}/{name}
# Позволяет обойтись без wildcard DNS *.fn.kube5s.ru
EXTERNAL_URL: "https://sless.kube5s.ru"
---
# Secret создаётся отдельно через kubectl (не коммитить секреты в git!)
# Описание ключей:
# POSTGRES_DSN — строка подключения к postgres
# S3_ACCESS_KEY — ключ доступа к S3/Ceph
# S3_SECRET_KEY — секретный ключ S3/Ceph
# SLESS_API_TOKEN — токен аутентификации API
# HARBOR_PASS — пароль Harbor API (для EnsureProject, не для kaniko push)
#
# Пример создания:
# kubectl create secret generic sless-operator-secret -n sless \
# --from-literal=POSTGRES_DSN="postgres://sless:PASSWORD@postgres.sless.svc.cluster.local:5432/sless?sslmode=disable" \
# --from-literal=S3_ACCESS_KEY="ACCESS_KEY" \
# --from-literal=S3_SECRET_KEY="SECRET_KEY" \
# --from-literal=SLESS_API_TOKEN="your-token-here" \
# --from-literal=HARBOR_PASS="harbor-admin-password"
# kubectl apply -f hack/create-registry-secret.sh # docker-креды для kaniko
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: sless-operator
namespace: sless
labels:
app: sless-operator
spec:
replicas: 1
selector:
matchLabels:
app: sless-operator
template:
metadata:
labels:
app: sless-operator
spec:
serviceAccountName: sless-operator
containers:
- name: operator
# При обновлении версии оператора — менять тег здесь (не latest!)
image: naeel/sless-operator:v0.1.33
# Always — чтобы всегда тянуть по точному тегу (не кешировать старый)
imagePullPolicy: Always
ports:
- name: api
containerPort: 9090
- name: metrics
containerPort: 8080
- name: health
containerPort: 8081
envFrom:
- configMapRef:
name: sless-operator-config
- secretRef:
name: sless-operator-secret
readinessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 15
periodSeconds: 20
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "256Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: sless-operator
namespace: sless
spec:
selector:
app: sless-operator
ports:
- name: api
port: 9090
targetPort: 9090
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sless-operator
namespace: sless
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-read-timeout: "900"
nginx.ingress.kubernetes.io/proxy-send-timeout: "900"
spec:
ingressClassName: nginx
rules:
- host: sless.kube5s.ru
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: sless-operator
port:
number: 9090
tls:
- hosts:
- sless.kube5s.ru
secretName: sless-operator-tls