feat: harbor integration — EnsureProject + per-namespace image path
- internal/harbor/client.go: новый пакет, EnsureProject (GET+POST idempotent)
- config.go: добавлены HarborUser/HarborPass (из HARBOR_USER/HARBOR_PASS env)
- builder.go: Projecter интерфейс, harborClient поле, ImageRef: {host}/{ns}/{func}:{tag}
EnsureProject вызывается перед каждым Build()
- function_controller.go: HarborClient поле, EnsureProject при создании k8s NS
- main.go: создание harbor.Client если HARBOR_USER+HARBOR_PASS заданы
- operator.yaml: REGISTRY_HOST=pearlharbor..., HARBOR_USER=admin, v0.1.24
- hack/create-registry-secret.sh: переписан для Harbor (HARBOR_USER/HARBOR_PASS)
Смена registry — только через REGISTRY_HOST в ConfigMap, больше нигде.
This commit is contained in:
@@ -1,20 +1,14 @@
|
||||
# Изменено: 2026-03-07
|
||||
# Изменено: 2026-03-11
|
||||
# Деплой sless оператора в кластер.
|
||||
# Состав:
|
||||
# - ConfigMap: не-секретные env vars (S3_ENDPOINT, REGISTRY_HOST и т.д.)
|
||||
# - Secret: секретные данные (S3 keys, postgres DSN, API token, docker auth)
|
||||
# - Secret: секретные данные (S3 keys, postgres DSN, API token, Harbor pass)
|
||||
# - Deployment: оператор naeel/sless-operator:v0.1.23 в namespace sless
|
||||
# - Service: ClusterIP :9090 (REST API)
|
||||
# - Ingress: sless-api.kube5s.ru → :9090 (внешний доступ с TLS)
|
||||
#
|
||||
# Перед применением:
|
||||
# kubectl create secret generic sless-operator-secret \
|
||||
# --namespace=sless \
|
||||
# --from-literal=POSTGRES_DSN="..." \
|
||||
# --from-literal=S3_ACCESS_KEY="..." \
|
||||
# --from-literal=S3_SECRET_KEY="..." \
|
||||
# --from-literal=SLESS_API_TOKEN="change-me" \
|
||||
# --dry-run=client -o yaml | kubectl apply -f -
|
||||
# Чтобы сменить registry — менять только REGISTRY_HOST в ConfigMap.
|
||||
# Чтобы сменить Harbor-аккаунт — менять HARBOR_USER в ConfigMap + HARBOR_PASS в Secret.
|
||||
#
|
||||
# Применение: kubectl apply -f deployments/k8s/operator.yaml
|
||||
---
|
||||
@@ -27,8 +21,13 @@ data:
|
||||
S3_ENDPOINT: "s3.msk-1.ngcloud.ru"
|
||||
S3_BUCKET: "sless-functions"
|
||||
S3_USE_SSL: "true"
|
||||
REGISTRY_HOST: "naeel"
|
||||
# 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}
|
||||
@@ -41,13 +40,16 @@ data:
|
||||
# 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=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
|
||||
@@ -70,7 +72,7 @@ spec:
|
||||
containers:
|
||||
- name: operator
|
||||
# При обновлении версии оператора — менять тег здесь (не latest!)
|
||||
image: naeel/sless-operator:v0.1.23
|
||||
image: naeel/sless-operator:v0.1.24
|
||||
# Always — чтобы всегда тянуть по точному тегу (не кешировать старый)
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
|
||||
Reference in New Issue
Block a user