From 731216aadeb7dffe97c2be9192c72f5f57a7672d Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 26 Nov 2025 10:51:26 +0000 Subject: [PATCH] Add apps/readme.md --- apps/readme.md | 184 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 apps/readme.md diff --git a/apps/readme.md b/apps/readme.md new file mode 100644 index 0000000..a6cd0db --- /dev/null +++ b/apps/readme.md @@ -0,0 +1,184 @@ +Сделал тебе полный набор GitOps-файлов и упаковал в один архив: + +**👉 [Скачать архив k3s-gitops-apps-bundle.zip](sandbox:/mnt/data/k3s-gitops-apps-bundle.zip)** + +Внутри структура такая (относительно `k3s-gitops/apps/`): + +* `jenkins/` +* `semaphore/` +* `harbor/` (упрощённый registry на базе `registry:2`) +* `vault/` +* `portainer/` +* `elk/` (Elasticsearch single-node + Kibana) + +Каждая папка содержит: + +* `application.yaml` — ArgoCD Application, указывающий на: + + * `repoURL: http://gitea-http.gitea.svc.cluster.local:3000/admin/k3s-gitops` + * `path: apps/` +* `namespace.yaml` — отдельный namespace для сервиса +* `pvc-*.yaml` — PVC под Longhorn (StorageClass `longhorn`) +* workload (`deployment.yaml` или `statefulset-*.yaml`) +* `service.yaml` +* `ingress*.yaml` — с `traefik` + `cert-manager.io/cluster-issuer: letsencrypt-http` + +Домены (можешь поменять под себя): + +* Jenkins: `jenkins.thedevops.dev` +* Semaphore: `semaphore.thedevops.dev` +* Harbor (registry): `harbor.thedevops.dev` +* Vault: `vault.thedevops.dev` +* Portainer: `portainer.thedevops.dev` +* Kibana (ELK): `elk.thedevops.dev` + +--- + +## Как развернуть пошагово + +1. **Распаковать архив локально:** + +```bash +unzip k3s-gitops-apps-bundle.zip +``` + +2. **Положить всё в твой GitOps-репозиторий Gitea:** + +Структура репо должна быть: + +```text +k3s-gitops/ + apps/ + jenkins/ + semaphore/ + harbor/ + vault/ + portainer/ + elk/ +``` + +3. **Закоммитить и запушить в Gitea:** + +```bash +cd k3s-gitops +git add apps/ +git commit -m "Add Jenkins, Semaphore, Harbor, Vault, Portainer, ELK GitOps manifests" +git push +``` + +4. **Создать ArgoCD Applications:** + +Вариант A — через `kubectl`: + +```bash +kubectl apply -f apps/jenkins/application.yaml +kubectl apply -f apps/semaphore/application.yaml +kubectl apply -f apps/harbor/application.yaml +kubectl apply -f apps/vault/application.yaml +kubectl apply -f apps/portainer/application.yaml +kubectl apply -f apps/elk/application.yaml +``` + +Вариант B — через UI ArgoCD: можно просто импортировать эти YAML. + +5. **Проверить:** + +```bash +kubectl get ns +kubectl get pods -n jenkins +kubectl get pods -n semaphore +kubectl get pods -n harbor +kubectl get pods -n vault +kubectl get pods -n portainer +kubectl get pods -n elk +``` + +И Ingress: + +```bash +kubectl get ingress -A +``` + +--- + +## Краткий комментарий по каждому сервису + +### 1. Jenkins + +* PVC: `jenkins-home` (20Gi, Longhorn) +* Монтируется в `/var/jenkins_home` +* Ingress: `jenkins.thedevops.dev` → Service `jenkins:8080` +* После старта: первый админ-пароль в логе контейнера или в `/var/jenkins_home/secrets/initialAdminPassword` (на PVC). + +--- + +### 2. Semaphore + +* Использую `bolt` (встроенная db) → файл `semaphore.db` на PVC `/var/lib/semaphore`. +* Это упрощённый вариант без PostgreSQL, удобно для домашней лаборатории. +* Ingress: `semaphore.thedevops.dev` → 3000/tcp. + +--- + +### 3. Harbor (упрощённо) + +Полноценный Harbor — огромный чарт. Для домашней лаборатории я положил **минимальный docker-registry**: + +* Deployment `harbor-registry` с `registry:2` +* PVC `harbor-registry` (50Gi) → `/var/lib/registry` +* Ingress: `harbor.thedevops.dev` → 5000 (HTTP Registry) + +Можно использовать как приватный Docker registry: + +```bash +docker login harbor.thedevops.dev +docker push harbor.thedevops.dev/myimage:tag +``` + +(для TLS/авторизации потом можно навесить auth / basic auth через Traefik или перейти на официальный Harbor chart — можем отдельно сделать GitOps под настоящий Harbor.) + +--- + +### 4. Vault + +* Одиночный Vault без HA, backend `file` на PVC `/vault/file` (10Gi). +* UI включен: `ui: true`, `tls_disable: 1` (HTTP, для lab). +* Ingress: `vault.thedevops.dev` → 8200. +* После запуска нужно будет **init + unseal** вручную (через CLI или UI). + +--- + +### 5. Portainer + +* `portainer/portainer-ce:latest` +* PVC `portainer-data` (5Gi) → `/data` +* HTTP включён, Ingress на 9443: + + * Host: `portainer.thedevops.dev` +* Первый запуск → создаёшь admin-пользователя через UI. + +--- + +### 6. ELK (минимальный стек) + +* **Elasticsearch**: + + * StatefulSet, single node, `discovery.type=single-node` + * PVC через `volumeClaimTemplates` → Longhorn, 30Gi +* **Kibana**: + + * Deployment `kibana` в namespace `elk` + * Подключается к `http://elasticsearch.elk.svc.cluster.local:9200` +* Ingress: + + * Host: `elk.thedevops.dev` → Service `kibana:5601` + +--- + +Если хочешь, можем дальше: + +* добавить Prometheus/Grafana в таком же стиле, +* переписать Harbor на официальный Helm-чарт, но всё равно через ArgoCD, +* добавить ExternalDNS и разрулить DNS-записи для всех этих доменов. + +Пока можешь закинуть архив в Gitea и включить по одному приложению через ArgoCD – если что-то не поднимется, пришлёшь `kubectl get pods -n -o wide` и `kubectl logs`, и будем доводить до идеала.