Files
K3S/addons/technitium-dns/role/chart/templates/cronjob-sync.yaml
Sergey Antropoff f3dfe87d03 feat: добавить аддон technitium-dns — HA DNS Primary+Secondary с kube-vip LB и zone sync
- Helm chart: Primary и Secondary Deployment, kube-vip LoadBalancer сервисы (UDP+TCP :53),
  ClusterIP для Web UI, PVC (ReadWriteOnce), Secret, Ingress
- CronJob sync (*/5 мин): Python sync.py опрашивает Technitium REST API, создаёт Secondary
  зоны на secondary и вызывает forceSyncZone для каждой зоны
- ExternalDNS (disabled по умолчанию): RFC 2136 DDNS для автоматических DNS-записей из Ingress
- Ansible role: validate, namespace, Helm deploy, cleanup secrets, summary с Keenetic-инструкцией
- Интеграция: Makefile, playbooks/addons.yml, group_vars/all/addons.yml, vault.yml.example
- README с архитектурой, Keenetic-конфигурацией и troubleshooting
2026-04-26 17:58:28 +03:00

54 lines
1.9 KiB
YAML

{{- if and .Values.sync.enabled .Values.secondary.enabled }}
apiVersion: batch/v1
kind: CronJob
metadata:
name: {{ include "technitium-dns.name" . }}-sync
namespace: {{ .Release.Namespace }}
labels:
{{- include "technitium-dns.labels" . | nindent 4 }}
spec:
schedule: {{ .Values.sync.schedule | quote }}
concurrencyPolicy: Forbid
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
jobTemplate:
spec:
backoffLimit: 2
template:
metadata:
labels:
{{- include "technitium-dns.selectorLabels" . | nindent 12 }}
app.kubernetes.io/component: sync
spec:
restartPolicy: OnFailure
containers:
- name: sync
image: {{ .Values.sync.image }}
imagePullPolicy: IfNotPresent
command:
- python3
- /scripts/sync.py
env:
- name: PRIMARY_URL
value: "http://{{ include "technitium-dns.name" . }}-primary-web.{{ .Release.Namespace }}:5380"
- name: SECONDARY_URL
value: "http://{{ include "technitium-dns.name" . }}-secondary-web.{{ .Release.Namespace }}:5380"
- name: PRIMARY_LB_IP
value: {{ .Values.primary.ip | quote }}
- name: ADMIN_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "technitium-dns.name" . }}-secret
key: adminPassword
volumeMounts:
- name: scripts
mountPath: /scripts
resources:
{{- toYaml .Values.sync.resources | nindent 16 }}
volumes:
- name: scripts
configMap:
name: {{ include "technitium-dns.name" . }}-sync
defaultMode: 0755
{{- end }}