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