FEAT(gitea): add gitea Application to apps reposit
- Move gitea Application definition to applications repo - Add gitea resources (helm-values, vault secrets, runner deployment) - Update kustomization.yaml to include gitea Application - This enables ArgoCD to manage gitea with proper Helm chart integration
This commit is contained in:
58
gitea/argocd/gitea.yaml
Normal file
58
gitea/argocd/gitea.yaml
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
apiVersion: argoproj.io/v1alpha1
|
||||||
|
kind: Application
|
||||||
|
metadata:
|
||||||
|
name: gitea
|
||||||
|
namespace: argocd
|
||||||
|
finalizers:
|
||||||
|
- resources-finalizer.argocd.argoproj.io
|
||||||
|
spec:
|
||||||
|
project: default
|
||||||
|
|
||||||
|
sources:
|
||||||
|
# Helm chart from Gitea repository
|
||||||
|
- repoURL: https://dl.gitea.com/charts/
|
||||||
|
chart: gitea
|
||||||
|
targetRevision: 12.4.0
|
||||||
|
helm:
|
||||||
|
valueFiles:
|
||||||
|
- $values/gitea/helm-values/gitea.yaml
|
||||||
|
# Values file from Git repository
|
||||||
|
- repoURL: https://gitea0213.kro.kr/bluemayne/infrastructure.git
|
||||||
|
targetRevision: main
|
||||||
|
ref: values
|
||||||
|
# Vault secrets from Git repository
|
||||||
|
- repoURL: https://gitea0213.kro.kr/bluemayne/infrastructure.git
|
||||||
|
targetRevision: main
|
||||||
|
path: gitea
|
||||||
|
|
||||||
|
destination:
|
||||||
|
server: https://kubernetes.default.svc
|
||||||
|
namespace: gitea
|
||||||
|
|
||||||
|
syncPolicy:
|
||||||
|
automated:
|
||||||
|
prune: true
|
||||||
|
selfHeal: true
|
||||||
|
allowEmpty: false
|
||||||
|
|
||||||
|
syncOptions:
|
||||||
|
- CreateNamespace=true
|
||||||
|
- PrunePropagationPolicy=foreground
|
||||||
|
- PruneLast=true
|
||||||
|
|
||||||
|
retry:
|
||||||
|
limit: 5
|
||||||
|
backoff:
|
||||||
|
duration: 5s
|
||||||
|
factor: 2
|
||||||
|
maxDuration: 3m
|
||||||
|
|
||||||
|
revisionHistoryLimit: 10
|
||||||
|
|
||||||
|
# Ignore differences in checksum annotations and manual restart annotations
|
||||||
|
ignoreDifferences:
|
||||||
|
- group: apps
|
||||||
|
kind: Deployment
|
||||||
|
jqPathExpressions:
|
||||||
|
- .spec.template.metadata.annotations
|
||||||
|
- .metadata.annotations
|
||||||
100
gitea/deployment.yaml
Normal file
100
gitea/deployment.yaml
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: gitea-runner-config
|
||||||
|
namespace: gitea
|
||||||
|
data:
|
||||||
|
config.yaml: |
|
||||||
|
log:
|
||||||
|
level: info
|
||||||
|
runner:
|
||||||
|
name: k8s-runner
|
||||||
|
capacity: 10
|
||||||
|
timeout: 3h
|
||||||
|
insecure: false
|
||||||
|
fetch_timeout: 5s
|
||||||
|
fetch_interval: 2s
|
||||||
|
labels:
|
||||||
|
- "ubuntu-latest:docker://catthehacker/ubuntu:act-latest"
|
||||||
|
- "ubuntu-24.04:docker://catthehacker/ubuntu:act-latest"
|
||||||
|
- "ubuntu-24.04-arm:docker://catthehacker/ubuntu:act-latest"
|
||||||
|
container:
|
||||||
|
network: host
|
||||||
|
options: -e DOCKER_HOST=tcp://localhost:2375
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: gitea-runner
|
||||||
|
namespace: gitea
|
||||||
|
labels:
|
||||||
|
app: gitea-runner
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: gitea-runner
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: gitea-runner
|
||||||
|
spec:
|
||||||
|
restartPolicy: Always
|
||||||
|
volumes:
|
||||||
|
- name: docker-certs
|
||||||
|
emptyDir: {}
|
||||||
|
- name: runner-data
|
||||||
|
emptyDir: {}
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: gitea-runner-config
|
||||||
|
containers:
|
||||||
|
# Docker daemon (Docker-in-Docker)
|
||||||
|
- name: docker-daemon
|
||||||
|
image: docker:dind
|
||||||
|
env:
|
||||||
|
- name: DOCKER_TLS_CERTDIR
|
||||||
|
value: ""
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
volumeMounts:
|
||||||
|
- name: docker-certs
|
||||||
|
mountPath: /certs
|
||||||
|
|
||||||
|
# Gitea Actions runner
|
||||||
|
- name: runner
|
||||||
|
image: gitea/act_runner:latest
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
while ! nc -z localhost 2375 </dev/null; do
|
||||||
|
echo 'waiting for docker daemon...';
|
||||||
|
sleep 1;
|
||||||
|
done
|
||||||
|
act_runner register --no-interactive --instance "$GITEA_INSTANCE_URL" --token "$GITEA_RUNNER_REGISTRATION_TOKEN" --name k8s-runner --labels "ubuntu-latest:docker://catthehacker/ubuntu:act-latest,ubuntu-24.04:docker://catthehacker/ubuntu:act-latest,ubuntu-24.04-arm:docker://catthehacker/ubuntu:act-latest"
|
||||||
|
act_runner daemon
|
||||||
|
env:
|
||||||
|
- name: DOCKER_HOST
|
||||||
|
value: tcp://localhost:2375
|
||||||
|
- name: GITEA_INSTANCE_URL
|
||||||
|
value: "http://gitea-http.gitea.svc.cluster.local:3000"
|
||||||
|
- name: GITEA_RUNNER_REGISTRATION_TOKEN
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: gitea-runner-token
|
||||||
|
key: token
|
||||||
|
volumeMounts:
|
||||||
|
- name: docker-certs
|
||||||
|
mountPath: /certs
|
||||||
|
- name: runner-data
|
||||||
|
mountPath: /data
|
||||||
|
- name: config
|
||||||
|
mountPath: /config.yaml
|
||||||
|
subPath: config.yaml
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
172
gitea/helm-values/gitea.yaml
Normal file
172
gitea/helm-values/gitea.yaml
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
# Gitea Helm Values
|
||||||
|
# Chart: https://gitea.com/gitea/helm-chart
|
||||||
|
# Self-hosted Git service
|
||||||
|
|
||||||
|
fullnameOverride: gitea
|
||||||
|
|
||||||
|
replicaCount: 1
|
||||||
|
|
||||||
|
image:
|
||||||
|
registry: docker.io
|
||||||
|
repository: gitea/gitea
|
||||||
|
tag: "1.25.2"
|
||||||
|
pullPolicy: IfNotPresent
|
||||||
|
rootless: false
|
||||||
|
|
||||||
|
# Gitea configuration
|
||||||
|
gitea:
|
||||||
|
admin:
|
||||||
|
# Admin credentials managed via environment variables
|
||||||
|
existingSecret: gitea-admin-secret
|
||||||
|
|
||||||
|
config:
|
||||||
|
server:
|
||||||
|
DOMAIN: gitea0213.kro.kr
|
||||||
|
ROOT_URL: https://gitea0213.kro.kr
|
||||||
|
SSH_DOMAIN: gitea0213.kro.kr
|
||||||
|
SSH_PORT: 2222
|
||||||
|
DISABLE_SSH: true
|
||||||
|
START_SSH_SERVER: false
|
||||||
|
SSH_LISTEN_PORT: 2222
|
||||||
|
|
||||||
|
database:
|
||||||
|
DB_TYPE: postgres
|
||||||
|
HOST: postgresql-primary.postgresql.svc.cluster.local:5432
|
||||||
|
NAME: gitea
|
||||||
|
USER: postgres
|
||||||
|
SCHEMA: public
|
||||||
|
SSL_MODE: disable
|
||||||
|
|
||||||
|
service:
|
||||||
|
DISABLE_REGISTRATION: false
|
||||||
|
REQUIRE_SIGNIN_VIEW: false
|
||||||
|
ENABLE_NOTIFY_MAIL: false
|
||||||
|
|
||||||
|
cache:
|
||||||
|
ENABLED: true
|
||||||
|
ADAPTER: memory
|
||||||
|
|
||||||
|
session:
|
||||||
|
PROVIDER: memory
|
||||||
|
|
||||||
|
git:
|
||||||
|
PATH: /usr/bin/git
|
||||||
|
|
||||||
|
actions:
|
||||||
|
ENABLED: true
|
||||||
|
DEFAULT_ACTIONS_URL: github
|
||||||
|
|
||||||
|
packages:
|
||||||
|
ENABLED: true
|
||||||
|
CHUNKED_UPLOAD_PATH: /data/packages/chunked-upload
|
||||||
|
|
||||||
|
container:
|
||||||
|
ENABLED: true
|
||||||
|
REGISTRY_HOST: gitea0213.kro.kr
|
||||||
|
|
||||||
|
# Health checks
|
||||||
|
livenessProbe:
|
||||||
|
enabled: true
|
||||||
|
tcpSocket:
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 60
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 10
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
enabled: true
|
||||||
|
tcpSocket:
|
||||||
|
port: http
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
successThreshold: 1
|
||||||
|
failureThreshold: 3
|
||||||
|
|
||||||
|
# PostgreSQL dependency (using existing PostgreSQL instance)
|
||||||
|
postgresql:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Use existing PostgreSQL
|
||||||
|
postgresql-ha:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Valkey cluster (disabled, using memory for cache/session)
|
||||||
|
valkey-cluster:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Redis (optional, for caching)
|
||||||
|
redis-cluster:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
# Environment variables for database password
|
||||||
|
deployment:
|
||||||
|
env:
|
||||||
|
- name: GITEA__database__PASSWD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: gitea-postgres-password
|
||||||
|
key: password
|
||||||
|
|
||||||
|
# Persistence for Gitea data
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
size: 10Gi
|
||||||
|
storageClass: local-path
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
|
||||||
|
# Service configuration
|
||||||
|
service:
|
||||||
|
http:
|
||||||
|
type: ClusterIP
|
||||||
|
port: 3000
|
||||||
|
ssh:
|
||||||
|
type: LoadBalancer
|
||||||
|
port: 2222
|
||||||
|
externalTrafficPolicy: Local
|
||||||
|
annotations:
|
||||||
|
metallb.universe.tf/allow-shared-ip: gitea
|
||||||
|
|
||||||
|
# Ingress configuration
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
className: nginx
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt-prod
|
||||||
|
nginx.ingress.kubernetes.io/proxy-body-size: "0"
|
||||||
|
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
|
||||||
|
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
|
||||||
|
hosts:
|
||||||
|
- host: gitea0213.kro.kr
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: gitea-tls
|
||||||
|
hosts:
|
||||||
|
- gitea0213.kro.kr
|
||||||
|
|
||||||
|
# Resource limits
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
memory: 512Mi
|
||||||
|
|
||||||
|
# Security context
|
||||||
|
securityContext:
|
||||||
|
fsGroup: 1000
|
||||||
|
|
||||||
|
# Init containers for database setup
|
||||||
|
initPreScript: |
|
||||||
|
#!/bin/sh
|
||||||
|
echo "Waiting for PostgreSQL..."
|
||||||
|
until nc -z postgresql-primary.postgresql.svc.cluster.local 5432; do
|
||||||
|
echo "Waiting for PostgreSQL to be ready..."
|
||||||
|
sleep 2
|
||||||
|
done
|
||||||
|
echo "PostgreSQL is ready"
|
||||||
19
gitea/kustomization.yaml
Normal file
19
gitea/kustomization.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
|
||||||
|
resources:
|
||||||
|
# ArgoCD Application (주석 처리: circular dependency 방지)
|
||||||
|
# - argocd/gitea.yaml
|
||||||
|
# Gitea Application은 수동으로 적용: kubectl apply -f gitea/argocd/gitea.yaml
|
||||||
|
|
||||||
|
# Gitea Runner
|
||||||
|
- deployment.yaml
|
||||||
|
|
||||||
|
# Vault secrets
|
||||||
|
- vault/gitea-admin-secret.yaml
|
||||||
|
- vault/gitea-postgres-password.yaml
|
||||||
|
- vault/gitea-runner-token.yaml
|
||||||
|
- vault/gitea-minio-credentials.yaml
|
||||||
|
- vault/minio-root-password.yaml
|
||||||
|
|
||||||
|
namespace: gitea
|
||||||
22
gitea/vault/gitea-admin-secret.yaml
Normal file
22
gitea/vault/gitea-admin-secret.yaml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: gitea-admin-secret
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
refreshInterval: 1h
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault-backend
|
||||||
|
target:
|
||||||
|
name: gitea-admin-secret
|
||||||
|
creationPolicy: Owner
|
||||||
|
data:
|
||||||
|
- secretKey: username
|
||||||
|
remoteRef:
|
||||||
|
key: gitea/admin
|
||||||
|
property: USERNAME
|
||||||
|
- secretKey: password
|
||||||
|
remoteRef:
|
||||||
|
key: gitea/admin
|
||||||
|
property: PASSWORD
|
||||||
18
gitea/vault/gitea-minio-credentials.yaml
Normal file
18
gitea/vault/gitea-minio-credentials.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: gitea-minio-credentials
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
refreshInterval: 1h
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault-backend
|
||||||
|
target:
|
||||||
|
name: gitea-minio-credentials
|
||||||
|
creationPolicy: Owner
|
||||||
|
data:
|
||||||
|
- secretKey: password
|
||||||
|
remoteRef:
|
||||||
|
key: gitea/minio
|
||||||
|
property: GITEA_MINIO_PASSWORD
|
||||||
18
gitea/vault/gitea-postgres-password.yaml
Normal file
18
gitea/vault/gitea-postgres-password.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: gitea-postgres-password
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
refreshInterval: 1h
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault-backend
|
||||||
|
target:
|
||||||
|
name: gitea-postgres-password
|
||||||
|
creationPolicy: Owner
|
||||||
|
data:
|
||||||
|
- secretKey: password
|
||||||
|
remoteRef:
|
||||||
|
key: gitea/postgres
|
||||||
|
property: PASSWORD
|
||||||
18
gitea/vault/gitea-runner-token.yaml
Normal file
18
gitea/vault/gitea-runner-token.yaml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: gitea-runner-token
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
refreshInterval: 1h
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault-backend
|
||||||
|
target:
|
||||||
|
name: gitea-runner-token
|
||||||
|
creationPolicy: Owner
|
||||||
|
data:
|
||||||
|
- secretKey: token
|
||||||
|
remoteRef:
|
||||||
|
key: gitea/runner
|
||||||
|
property: TOKEN
|
||||||
22
gitea/vault/minio-root-password.yaml
Normal file
22
gitea/vault/minio-root-password.yaml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
apiVersion: external-secrets.io/v1beta1
|
||||||
|
kind: ExternalSecret
|
||||||
|
metadata:
|
||||||
|
name: minio-root-password
|
||||||
|
namespace: gitea
|
||||||
|
spec:
|
||||||
|
refreshInterval: 1h
|
||||||
|
secretStoreRef:
|
||||||
|
kind: ClusterSecretStore
|
||||||
|
name: vault-backend
|
||||||
|
target:
|
||||||
|
name: minio-root-password
|
||||||
|
creationPolicy: Owner
|
||||||
|
data:
|
||||||
|
- secretKey: root-user
|
||||||
|
remoteRef:
|
||||||
|
key: gitea/minio
|
||||||
|
property: ROOT_USER
|
||||||
|
- secretKey: root-password
|
||||||
|
remoteRef:
|
||||||
|
key: gitea/minio
|
||||||
|
property: ROOT_PASSWORD
|
||||||
Reference in New Issue
Block a user