Files
k3s-gitops/apps/readme.md
2025-11-26 10:51:26 +00:00

185 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Сделал тебе полный набор 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`, и будем доводить до идеала.