diff --git a/manifests/applicationset/airflow/1.16.0/dip-questions.yaml b/manifests/applicationset/airflow/1.16.0/dip-questions.yaml new file mode 100644 index 0000000..ff63f46 --- /dev/null +++ b/manifests/applicationset/airflow/1.16.0/dip-questions.yaml @@ -0,0 +1,57 @@ +questions: +# --- DAG git-sync --- +- variable: "$dags.gitSync.repo" + label: Git Repo URL + type: string + required: true + default: "https://git-url/org/repo.git" +- variable: infisical.GIT_SYNC_USERNAME + label: Git username + type: string + required: true + default: "" +- variable: infisical.GIT_SYNC_PASSWORD + label: Git password + type: password + required: true + default: "" +# git-sync v4 는 GITSYNC_* 를, 차트는 두 이름 모두를 secretKeyRef 로 참조한다. +# 네 키가 모두 없으면 scheduler/webserver 파드가 기동되지 않는다. +- variable: infisical.GITSYNC_USERNAME + label: Git username + type: hidden + default: "${infisical.GIT_SYNC_USERNAME}" +- variable: infisical.GITSYNC_PASSWORD + label: Git password + type: hidden + default: "${infisical.GIT_SYNC_PASSWORD}" + +# --- Web admin --- +- variable: "$webserver.defaultUser.password" + label: Web admin password + type: password + required: true + default: "" + +# --- cnpg-cluster(airflow-db) 자격증명 --- +# bootstrap.initdb.secretName 이 참조하는 시크릿. cnpg 는 username/password 키를 요구한다 +# (kubernetes.io/basic-auth). 값은 doc1 의 bootstrap.initdb.owner 와 일치해야 한다. +- variable: infisical.username + label: DB Username + type: hidden + default: "airflow" +- variable: infisical.password + label: DB Password + type: hidden + default: "" +# data.metadataSecretName 이 참조하는 같은 시크릿의 connection 키 — 전체 DSN. +# 차트는 이 문자열을 AIRFLOW__DATABASE__SQL_ALCHEMY_CONN 에 그대로 주입한다. +# dip-values.yaml 의 data.metadataConnection 은 무시되므로 여기가 유일한 실효 값이다. +# +# 호스트에 $CATALOG_NAME 접두사가 반드시 있어야 한다. dip 배포는 cnpg 릴리스명에 +# 테넌트 접두사를 붙여 나가므로(관측: instance=demo01-air-airflow-db) 실제 서비스는 +# airflow-db-rw 가 아니라 $CATALOG_NAME-airflow-db-rw 다. +- variable: infisical.connection + label: postgres connection + type: hidden + default: "postgresql://airflow:${infisical.password}@$CATALOG_NAME-airflow-db-rw.$CATALOG_NAME:5432/airflow?sslmode=disable" diff --git a/manifests/applicationset/airflow/1.16.0/dip-values.yaml b/manifests/applicationset/airflow/1.16.0/dip-values.yaml new file mode 100644 index 0000000..a7bdc14 --- /dev/null +++ b/manifests/applicationset/airflow/1.16.0/dip-values.yaml @@ -0,0 +1,187 @@ +instances: 1 + +postgresql: + imageName: "docker.io/paasup/cnpg-postgresql:18.4-bci15.7-hardened-20260803" + + parameters: + max_connections: "200" + shared_buffers: 256MB + work_mem: 8MB + maintenance_work_mem: 128MB + effective_cache_size: 1GB + log_timezone: Asia/Seoul + timezone: Asia/Seoul + + sharedPreloadLibraries: + - pgaudit + - pg_stat_statements + +primaryUpdateStrategy: unsupervised +primaryUpdateMethod: switchover + +storage: + size: 20Gi + storageClass: longhorn + +walStorage: + enabled: true + size: 10Gi + storageClass: longhorn + +resources: + requests: + cpu: 500m + memory: 1Gi + limits: + cpu: 1000m + memory: 2Gi + +bootstrap: + initdb: + database: airflow + owner: airflow + secretName: "$INFISICAL_SECRET" + encoding: UTF8 + postInitApplicationSQL: [] + +databases: + - name: airflow + owner: airflow + ensure: present + reclaimPolicy: retain + extensions: + - name: pg_stat_statements + - name: pgaudit + +enableSuperuserAccess: false + +affinity: + enablePodAntiAffinity: true + podAntiAffinityType: preferred + topologyKey: kubernetes.io/hostname + nodeSelector: {} + tolerations: [] + +monitoring: + enablePodMonitor: false + +backup: + enabled: false + retentionPolicy: 30d + barmanObjectStore: + destinationPath: "" + endpointURL: "" + s3Credentials: + accessKeyId: + name: "" + key: ACCESS_KEY_ID + secretAccessKey: + name: "" + key: ACCESS_SECRET_KEY + +scheduledBackup: + enabled: false + schedule: "0 0 2 * * *" + +pooler: + enabled: false + instances: 2 + type: rw + poolMode: transaction +--- +ingress: + web: + enabled: true + annotations: + cert-manager.io/cluster-issuer: "root-ca-issuer" + cert-manager.io/duration: 8760h + cert-manager.io/renew-before: 720h + k8s.apisix.apache.org/plugin-config-name: oidc-keycloak-authz + ingressClassName: "apisix" + pathType: "Prefix" + hosts: + - name: "{{ .Name }}.{{ .Domain }}" + tls: + enabled: true + secretName: "{{ .Name }}-tls-secret" + +executor: "KubernetesExecutor" + +config: + core: + executor: KubernetesExecutor + default_timezone: kst + logging: + colored_console_log: "False" + logging_level: "INFO" + webserver: + enable_proxy_fix: "True" + rbac: "True" + default_ui_timezone: kst + +scheduler: + replicas: 1 + +dags: + persistence: + enabled: true + size: 5Gi + storageClassName: longhorn + accessMode: ReadWriteMany + gitSync: + enabled: true + repo: "$dags.gitSync.repo" + branch: master + rev: HEAD + depth: 1 + subPath: "" + credentialsSecret: "$INFISICAL_SECRET" + env: + - name: GIT_SSL_NO_VERIFY + value: "true" + +webserver: + defaultUser: + enabled: true + password: "$webserver.defaultUser.password" + livenessProbe: + initialDelaySeconds: 120 + readinessProbe: + initialDelaySeconds: 120 + startupProbe: + initialDelaySeconds: 30 + webserverConfig: | + AUTH_ROLE_PUBLIC = 'User' + +logs: + persistence: + enabled: true + size: 5Gi + storageClassName: longhorn + +statsd: + enabled: false + +# 내장 bitnami postgresql 서브차트 대신 syncWave 0 의 cnpg-cluster(airflow-db)를 쓴다. +postgresql: + enabled: false + +migrateDatabaseJob: + useHelmHooks: false + +data: + # 시크릿의 connection 키(전체 DSN)를 그대로 쓴다 — 이 값이 설정되면 차트는 + # -metadata 시크릿을 만들지 않는다. + metadataSecretName: "$INFISICAL_SECRET" + # metadataSecretName 이 있으면 접속에는 쓰이지 않지만, pgbouncer/keda 경로와 + # NOTES 출력이 참조하므로 cnpg 서비스에 맞춰 둔다. + # 호스트 접두사는 flowise/6.0.0/dip-values.yaml 의 externalPostgresql.host 와 같은 규칙이다 + # — dip 배포에서 cnpg 릴리스명이 테넌트 접두사를 달고 나가므로 {{ .Name }} 가 필요하다. + metadataConnection: + user: airflow + protocol: postgresql + host: "{{ .Name }}-airflow-db-rw" + port: 5432 + db: airflow + sslmode: disable +