Compare commits
No commits in common. "e1a81d3dd8d8544c877ada011d88de87ba1ddd7c" and "6d6703ed2dcda5d767895555fba7fa8a456972e9" have entirely different histories.
e1a81d3dd8
...
6d6703ed2d
@ -107,30 +107,6 @@ compose_cmd: "docker compose"
|
|||||||
# Добавляешь ConfigMap, который читает приложение, — добавь нагрузку сюда,
|
# Добавляешь ConfigMap, который читает приложение, — добавь нагрузку сюда,
|
||||||
# иначе правка будет уезжать в кластер и не применяться, а выглядеть это будет
|
# иначе правка будет уезжать в кластер и не применяться, а выглядеть это будет
|
||||||
# как «изменение не сработало».
|
# как «изменение не сработало».
|
||||||
# --- Секреты-файлы для подов задач workflows ---------------------------------
|
|
||||||
# Их монтирует не vault-agent, а сам движок в создаваемые им Job'ы. Имя
|
|
||||||
# секрета, namespace и имя файла ЗАШИТЫ В КОД движка
|
|
||||||
# (pkg/kube_services/services.go: CredentialsName "yc-s3", CredentialsPath
|
|
||||||
# /etc/sarex/yc-s3) — переименовывать нельзя. namespace задач задаёт
|
|
||||||
# JOBS_NAMESPACE в apps/processing/base/engine-low.yaml.
|
|
||||||
#
|
|
||||||
# Формат содержимого повторяет engine/yc-s3-service-account.json из
|
|
||||||
# compose-стека и совпадает с тем, что vault-agent рендерит движку в
|
|
||||||
# /vault/secrets/processing-s3.
|
|
||||||
k8s_file_secrets:
|
|
||||||
- name: yc-s3
|
|
||||||
namespace: processing
|
|
||||||
key: yc-s3-service-account.json
|
|
||||||
content: |
|
|
||||||
{
|
|
||||||
"host": "http://minio.minio.svc.cluster.local:9000",
|
|
||||||
"bucket": "{{ sarex_django_s3_bucket }}",
|
|
||||||
"access_key_id": "{{ sarex_minio_k8s_user }}",
|
|
||||||
"secret_access_key": "{{ sarex_secrets.SAREX_MINIO_ROOT_PASSWORD }}",
|
|
||||||
"region": "us-east-1",
|
|
||||||
"verify": false
|
|
||||||
}
|
|
||||||
|
|
||||||
# --- Досоздание баз в работающей СУБД ---------------------------------------
|
# --- Досоздание баз в работающей СУБД ---------------------------------------
|
||||||
# Выключено по умолчанию, включается задачей `uv run poe dbsync`.
|
# Выключено по умолчанию, включается задачей `uv run poe dbsync`.
|
||||||
#
|
#
|
||||||
|
|||||||
@ -1,64 +0,0 @@
|
|||||||
---
|
|
||||||
# Секреты-файлы для подов, которые создаёт не Flux, а сам движок workflows.
|
|
||||||
#
|
|
||||||
# ЗАЧЕМ ОТДЕЛЬНО ОТ VAULT. Приложения контура получают креды аннотациями
|
|
||||||
# vault-agent — но это работает только для подов, чей шаблон мы описываем.
|
|
||||||
# Поды задач создаёт workflows-engine во время работы, аннотаций у них нет, и
|
|
||||||
# единственное, что он умеет подключить, — обычный Secret из namespace задач:
|
|
||||||
#
|
|
||||||
# services[S3Storage] = Service{
|
|
||||||
# CredentialsName: "yc-s3",
|
|
||||||
# CredentialsPath: "/etc/sarex/yc-s3",
|
|
||||||
# Envs: {"SERVICE_S3": `{"service_account":
|
|
||||||
# "/etc/sarex/yc-s3/yc-s3-service-account.json"}`},
|
|
||||||
# }
|
|
||||||
# (pkg/kube_services/services.go)
|
|
||||||
#
|
|
||||||
# Имя секрета, путь монтирования и имя файла зашиты в код движка — поменять их
|
|
||||||
# нельзя, можно только положить секрет ровно с такими именами.
|
|
||||||
#
|
|
||||||
# Без него задача падает не на доступе к S3, а на разборе конфигурации:
|
|
||||||
# pydantic_core.ValidationError: 1 validation error for S3AccountModel
|
|
||||||
# Value error, Expecting value: line 1 column 1 (char 0)
|
|
||||||
# ValueError: SERVICE_S3 is not valid
|
|
||||||
# то есть файл по пути просто отсутствует и читается как пустая строка.
|
|
||||||
#
|
|
||||||
# Как и у секретов реестра: манифест рендерится, применяется и сразу
|
|
||||||
# удаляется — в нём креды в открытом виде.
|
|
||||||
|
|
||||||
- name: Отрендерить манифест секретов-файлов
|
|
||||||
ansible.builtin.template:
|
|
||||||
src: app-secrets.yaml.j2
|
|
||||||
dest: "{{ deploy_dir }}/k3s/app-secrets.yaml"
|
|
||||||
owner: root
|
|
||||||
group: root
|
|
||||||
mode: "0600"
|
|
||||||
no_log: true
|
|
||||||
tags: [appsecrets]
|
|
||||||
|
|
||||||
# ./k3s смонтирован в k3s-server как /output — отсюда и путь.
|
|
||||||
- name: Применить секреты-файлы в кластере
|
|
||||||
ansible.builtin.command:
|
|
||||||
argv:
|
|
||||||
- "{{ compose_cmd.split()[0] }}"
|
|
||||||
- compose
|
|
||||||
- exec
|
|
||||||
- "-T"
|
|
||||||
- k3s-server
|
|
||||||
- kubectl
|
|
||||||
- apply
|
|
||||||
- "-f"
|
|
||||||
- /output/app-secrets.yaml
|
|
||||||
chdir: "{{ deploy_dir }}"
|
|
||||||
register: app_secret_apply
|
|
||||||
changed_when: >-
|
|
||||||
'created' in app_secret_apply.stdout or
|
|
||||||
'configured' in app_secret_apply.stdout
|
|
||||||
tags: [appsecrets]
|
|
||||||
|
|
||||||
# Удаляем всегда, в том числе если apply упал: файл содержит креды.
|
|
||||||
- name: Удалить манифест секретов-файлов с хоста
|
|
||||||
ansible.builtin.file:
|
|
||||||
path: "{{ deploy_dir }}/k3s/app-secrets.yaml"
|
|
||||||
state: absent
|
|
||||||
tags: [appsecrets]
|
|
||||||
@ -33,12 +33,6 @@
|
|||||||
- name: Создать секреты доступа к реестру в кластере
|
- name: Создать секреты доступа к реестру в кластере
|
||||||
ansible.builtin.include_tasks: registry-secrets.yml
|
ansible.builtin.include_tasks: registry-secrets.yml
|
||||||
|
|
||||||
# Секреты-файлы для подов, которые создаёт сам движок workflows. Идут сразу за
|
|
||||||
# секретами реестра: намеренно ДО Flux, потому что namespace задач манифест
|
|
||||||
# создаёт сам — ждать слой apps незачем.
|
|
||||||
- name: Создать секреты-файлы для подов задач
|
|
||||||
ansible.builtin.include_tasks: app-secrets.yml
|
|
||||||
|
|
||||||
- name: Волна 2 — gitea-init, flux-k8s-init и vault(+init)
|
- name: Волна 2 — gitea-init, flux-k8s-init и vault(+init)
|
||||||
ansible.builtin.command:
|
ansible.builtin.command:
|
||||||
cmd: "{{ compose_cmd }} up -d {{ aero_platform_services_wave2 | join(' ') }}"
|
cmd: "{{ compose_cmd }} up -d {{ aero_platform_services_wave2 | join(' ') }}"
|
||||||
|
|||||||
@ -1,31 +0,0 @@
|
|||||||
{# Секреты-файлы, которые монтируются в поды НЕ через vault-agent.
|
|
||||||
|
|
||||||
Обычные приложения контура берут креды из Vault аннотациями инжекции. Здесь
|
|
||||||
так нельзя: эти файлы монтирует в свои Job'ы движок workflows-engine, а он
|
|
||||||
создаёт поды сам и об аннотациях ничего не знает — ему нужен готовый Secret
|
|
||||||
в namespace задач. Имя секрета и путь монтирования зашиты в код движка
|
|
||||||
(pkg/kube_services/services.go, поля CredentialsName и CredentialsPath),
|
|
||||||
поэтому переименовать их нельзя.
|
|
||||||
|
|
||||||
Значения приходят из sarex_secrets, в репозиторий не попадают. #}
|
|
||||||
{% for s in k8s_file_secrets %}
|
|
||||||
---
|
|
||||||
{# Namespace объявлен здесь же: на холодном старте Flux до него ещё не дошёл,
|
|
||||||
а apply секрета в несуществующий namespace упал бы. Повторное создание
|
|
||||||
безвредно — Flux спокойно подхватит уже существующий объект, ровно так же
|
|
||||||
заведён namespace vault. #}
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Namespace
|
|
||||||
metadata:
|
|
||||||
name: {{ s.namespace }}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: {{ s.name }}
|
|
||||||
namespace: {{ s.namespace }}
|
|
||||||
type: Opaque
|
|
||||||
stringData:
|
|
||||||
{{ s.key }}: |
|
|
||||||
{{ s.content | indent(4, true) }}
|
|
||||||
{% endfor %}
|
|
||||||
@ -162,74 +162,24 @@ patches:
|
|||||||
# равнозначны, — поэтому поды задач висли бы в Pending с
|
# равнозначны, — поэтому поды задач висли бы в Pending с
|
||||||
# didn't match Pod's node affinity/selector
|
# didn't match Pod's node affinity/selector
|
||||||
# ровно как это было у postgresql (см. postRenderers в его релизе).
|
# ровно как это было у postgresql (см. postRenderers в его релизе).
|
||||||
#
|
|
||||||
# ENABLE_TOLERATION ЗДЕСЬ НЕ ВЫКЛЮЧАТЬ. Сначала я поставил его в "0" — и
|
|
||||||
# это тихо сломало запуск задач совсем: в движке классы ресурсов
|
|
||||||
# регистрируются ПОД ЭТИМ ЖЕ ФЛАГОМ,
|
|
||||||
# if resCfg.EnableToleration { services[HighResources] = ... }
|
|
||||||
# (pkg/kube_services/services.go), поэтому задача с service_request
|
|
||||||
# "high-resources" падала не на планировании, а раньше — на разборе:
|
|
||||||
# ERROR create k8s job: create k8s job: unknown service
|
|
||||||
# Ни одного пода при этом не создавалось, и в логе не было ни слова про
|
|
||||||
# nodeSelector, так что связь с этим флагом неочевидна.
|
|
||||||
#
|
|
||||||
# Вместо выключения переводим селектор на метку, которая есть на всех
|
|
||||||
# нодах, — kubernetes.io/os=linux. Класс сервисов остаётся
|
|
||||||
# зарегистрированным, nodeSelector совпадает с любой нодой, а toleration
|
|
||||||
# на несуществующий taint безвреден. Запрашиваемые ресурсы трогать не
|
|
||||||
# надо: в base это 1 CPU и 1Gi.
|
|
||||||
#
|
|
||||||
# IGNORE_TAINTS_AND_NODE_SELECTOR (появился в base из master) для этого
|
|
||||||
# НЕ годится: в исходниках workflows-engine такой переменной нет вовсе,
|
|
||||||
# образ contour_3ef5b462 о ней не знает.
|
|
||||||
- op: test
|
- op: test
|
||||||
path: /spec/values/services/backend/envs/53/name
|
path: /spec/values/services/backend/envs/67/name
|
||||||
value: TOLERATION_KEY
|
value: ENABLE_TOLERATION
|
||||||
- op: replace
|
- op: replace
|
||||||
path: /spec/values/services/backend/envs/53/value/_default
|
path: /spec/values/services/backend/envs/67/value/_default
|
||||||
value: kubernetes.io/os
|
value: "0"
|
||||||
- op: test
|
|
||||||
path: /spec/values/services/backend/envs/54/name
|
|
||||||
value: TOLERATION_VALUE
|
|
||||||
- op: replace
|
|
||||||
path: /spec/values/services/backend/envs/54/value/_default
|
|
||||||
value: linux
|
|
||||||
- op: test
|
|
||||||
path: /spec/values/services/backend/envs/55/name
|
|
||||||
value: TOLERATION_KEY_HIGH_MEM
|
|
||||||
- op: replace
|
|
||||||
path: /spec/values/services/backend/envs/55/value/_default
|
|
||||||
value: kubernetes.io/os
|
|
||||||
- op: test
|
|
||||||
path: /spec/values/services/backend/envs/56/name
|
|
||||||
value: TOLERATION_VALUE_HIGH_MEM
|
|
||||||
- op: replace
|
|
||||||
path: /spec/values/services/backend/envs/56/value/_default
|
|
||||||
value: linux
|
|
||||||
- op: test
|
|
||||||
path: /spec/values/services/backend/envs/57/name
|
|
||||||
value: TOLERATION_KEY_PERSISTENT
|
|
||||||
- op: replace
|
|
||||||
path: /spec/values/services/backend/envs/57/value/_default
|
|
||||||
value: kubernetes.io/os
|
|
||||||
- op: test
|
|
||||||
path: /spec/values/services/backend/envs/58/name
|
|
||||||
value: TOLERATION_VALUE_PERSISTENT
|
|
||||||
- op: replace
|
|
||||||
path: /spec/values/services/backend/envs/58/value/_default
|
|
||||||
value: linux
|
|
||||||
- op: test
|
- op: test
|
||||||
path: /spec/values/services/backend/envs/70/name
|
path: /spec/values/services/backend/envs/70/name
|
||||||
value: DEFAULT_NODE_SELECTOR_KEY
|
value: DEFAULT_NODE_SELECTOR_KEY
|
||||||
- op: replace
|
- op: replace
|
||||||
path: /spec/values/services/backend/envs/70/value/_default
|
path: /spec/values/services/backend/envs/70/value/_default
|
||||||
value: kubernetes.io/os
|
value: ""
|
||||||
- op: test
|
- op: test
|
||||||
path: /spec/values/services/backend/envs/71/name
|
path: /spec/values/services/backend/envs/71/name
|
||||||
value: DEFAULT_NODE_SELECTOR_VALUE
|
value: DEFAULT_NODE_SELECTOR_VALUE
|
||||||
- op: replace
|
- op: replace
|
||||||
path: /spec/values/services/backend/envs/71/value/_default
|
path: /spec/values/services/backend/envs/71/value/_default
|
||||||
value: linux
|
value: ""
|
||||||
|
|
||||||
# S3 из Vault, как у api.
|
# S3 из Vault, как у api.
|
||||||
- op: add
|
- op: add
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user