fullnameOverride: "airflow" useStandardNaming: true images: airflow: repository: 10.10.0.85:50000/airflow-custom tag: "1.0" pullPolicy: Always executor: "CeleryExecutor" postgresql: enabled: false redis: enabled: false data: metadataConnection: user: "airflow" pass: "airflow" protocol: postgresql host: "10.10.0.83" port: 5000 db: "airflow_db" sslmode: disable brokerUrl: "amqp://airflow:airflow@airflow-rabbitmq-cluster:5672/" resultBackendConnection: protocol: postgresql host: "10.10.0.83" port: 5000 db: "airflow_db" user: "airflow" pass: "airflow" sslmode: disable migrateDatabaseJob: nodeSelector: role: worker webserverSecretKey: "this-must-be-a-long-random-string-fixed-for-ha" fernetKey: "rv638BORYwOheHEXB6JoROvDgR3r9vdrOHnYcQfl0gs=" dags: persistence: enabled: true existingClaim: airflow-dags-pvc logs: persistence: enabled: true existingClaim: airflow-logs-pvc # ✅ 保留 apiServer 配置(你的環境需要它) apiServer: replicas: 3 service: type: NodePort ports: - name: airflow-ui port: 8080 nodePort: 30080 nodeSelector: node-role.kubernetes.io/control-plane: "" tolerations: - key: "node-role.kubernetes.io/control-plane" operator: "Exists" effect: "NoSchedule" scheduler: replicas: 1 nodeSelector: node-role.kubernetes.io/control-plane: "" tolerations: - key: "node-role.kubernetes.io/control-plane" operator: "Exists" effect: "NoSchedule" securityContexts: pod: runAsUser: 0 runAsNonRoot: false containers: runAsUser: 0 runAsNonRoot: false allowPrivilegeEscalation: true capabilities: add: - NET_RAW workers: podManagementPolicy: Parallel replicas: 4 nodeSelector: role: worker resources: requests: cpu: 1 memory: 1Gi limits: cpu: 2 memory: 2Gi persistence: enabled: true size: 5Gi storageClassName: "nfs-airflow" env: - name: TZ value: "Asia/Taipei" securityContexts: pod: runAsUser: 0 runAsNonRoot: false containers: runAsUser: 0 runAsNonRoot: false allowPrivilegeEscalation: true capabilities: add: - NET_RAW flower: enabled: true nodeSelector: node-role.kubernetes.io/control-plane: "" tolerations: - key: "node-role.kubernetes.io/control-plane" operator: "Exists" effect: "NoSchedule" service: type: NodePort dagProcessor: nodeSelector: role: worker triggerer: nodeSelector: role: worker persistence: enabled: false config: core: max_map_length: 100000 webserver: base_url: "http://10.10.0.83:8080" enable_proxy_fix: "True" cookie_secure: 'False' cookie_samesite: 'Lax' session_backend: 'database' celery: worker_concurrency: 4 task_acks_late: "True" worker_prefetch_multiplier: 1