Add apps/readme.md
This commit is contained in:
184
apps/readme.md
Normal file
184
apps/readme.md
Normal 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`, и будем доводить до идеала.
|
||||
Reference in New Issue
Block a user