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