Add apps/readme.md

This commit is contained in:
2025-11-26 10:51:26 +00:00
parent e7cff9d8c1
commit 731216aade

184
apps/readme.md Normal file
View File

@@ -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/<app-name>`
* `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 <ns> -o wide` и `kubectl logs`, и будем доводить до идеала.