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

5.7 KiB
Raw Permalink Blame History

Сделал тебе полный набор GitOps-файлов и упаковал в один архив:

👉 Скачать архив 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. Распаковать архив локально:
unzip k3s-gitops-apps-bundle.zip
  1. Положить всё в твой GitOps-репозиторий Gitea:

Структура репо должна быть:

k3s-gitops/
  apps/
    jenkins/
    semaphore/
    harbor/
    vault/
    portainer/
    elk/
  1. Закоммитить и запушить в Gitea:
cd k3s-gitops
git add apps/
git commit -m "Add Jenkins, Semaphore, Harbor, Vault, Portainer, ELK GitOps manifests"
git push
  1. Создать ArgoCD Applications:

Вариант A — через kubectl:

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.

  1. Проверить:
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:

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:

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, и будем доводить до идеала.