feat(dagster): deploy without restart

This commit is contained in:
Masaki Yatsu
2025-10-06 16:58:54 +09:00
parent c4da02441b
commit 212b8a05d8
3 changed files with 42 additions and 9 deletions

View File

@@ -28,6 +28,7 @@ dagsterWebserver:
memory: "1Gi" memory: "1Gi"
cpu: "1000m" cpu: "1000m"
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
extraPrependedInitContainers: extraPrependedInitContainers:
- name: install-packages - name: install-packages
image: "{{ .Env.DAGSTER_CONTAINER_IMAGE }}:{{ .Env.DAGSTER_CONTAINER_TAG }}" image: "{{ .Env.DAGSTER_CONTAINER_IMAGE }}:{{ .Env.DAGSTER_CONTAINER_TAG }}"
@@ -39,27 +40,37 @@ dagsterWebserver:
volumeMounts: volumeMounts:
- name: extra-packages - name: extra-packages
mountPath: /opt/dagster/site-packages mountPath: /opt/dagster/site-packages
{{- end }}
env: env:
- name: DAGSTER_HOME - name: DAGSTER_HOME
value: /opt/dagster/dagster_home value: /opt/dagster/dagster_home
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: PYTHONPATH - name: PYTHONPATH
value: /opt/dagster/site-packages:/opt/dagster/user-code value: /opt/dagster/site-packages:/opt/dagster/user-code
{{- else }}
- name: PYTHONPATH
value: /opt/dagster/user-code
{{- end }}
- name: PIP_USER - name: PIP_USER
value: "true" value: "true"
volumeMounts: volumeMounts:
- name: user-code - name: user-code
mountPath: /opt/dagster/user-code mountPath: /opt/dagster/user-code
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: extra-packages - name: extra-packages
mountPath: /opt/dagster/site-packages mountPath: /opt/dagster/site-packages
{{- end }}
volumes: volumes:
- name: user-code - name: user-code
persistentVolumeClaim: persistentVolumeClaim:
claimName: dagster-user-code-pvc claimName: dagster-user-code-pvc
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: extra-packages - name: extra-packages
emptyDir: {} emptyDir: {}
{{- end }}
{{- if eq (.Env.DAGSTER_ENV_SECRETS_EXIST | default "false") "true" }} {{- if eq (.Env.DAGSTER_ENV_SECRETS_EXIST | default "false") "true" }}
envSecrets: envSecrets:
@@ -86,6 +97,7 @@ dagsterDaemon:
memory: "1Gi" memory: "1Gi"
cpu: "1000m" cpu: "1000m"
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
extraPrependedInitContainers: extraPrependedInitContainers:
- name: install-packages - name: install-packages
image: "{{ .Env.DAGSTER_CONTAINER_IMAGE }}:{{ .Env.DAGSTER_CONTAINER_TAG }}" image: "{{ .Env.DAGSTER_CONTAINER_IMAGE }}:{{ .Env.DAGSTER_CONTAINER_TAG }}"
@@ -97,19 +109,24 @@ dagsterDaemon:
volumeMounts: volumeMounts:
- name: extra-packages - name: extra-packages
mountPath: /opt/dagster/site-packages mountPath: /opt/dagster/site-packages
{{- end }}
volumeMounts: volumeMounts:
- name: user-code - name: user-code
mountPath: /opt/dagster/user-code mountPath: /opt/dagster/user-code
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: extra-packages - name: extra-packages
mountPath: /opt/dagster/site-packages mountPath: /opt/dagster/site-packages
{{- end }}
volumes: volumes:
- name: user-code - name: user-code
persistentVolumeClaim: persistentVolumeClaim:
claimName: dagster-user-code-pvc claimName: dagster-user-code-pvc
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: extra-packages - name: extra-packages
emptyDir: {} emptyDir: {}
{{- end }}
{{- if eq (.Env.DAGSTER_ENV_SECRETS_EXIST | default "false") "true" }} {{- if eq (.Env.DAGSTER_ENV_SECRETS_EXIST | default "false") "true" }}
envSecrets: envSecrets:
@@ -119,8 +136,13 @@ dagsterDaemon:
env: env:
- name: DAGSTER_HOME - name: DAGSTER_HOME
value: /opt/dagster/dagster_home value: /opt/dagster/dagster_home
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: PYTHONPATH - name: PYTHONPATH
value: /opt/dagster/site-packages:/opt/dagster/user-code value: /opt/dagster/site-packages:/opt/dagster/user-code
{{- else }}
- name: PYTHONPATH
value: /opt/dagster/user-code
{{- end }}
- name: PIP_USER - name: PIP_USER
value: "true" value: "true"
@@ -137,16 +159,22 @@ runLauncher:
volumeMounts: volumeMounts:
- name: user-code - name: user-code
mountPath: /opt/dagster/user-code mountPath: /opt/dagster/user-code
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: extra-packages - name: extra-packages
mountPath: /opt/dagster/site-packages mountPath: /opt/dagster/site-packages
{{- end }}
volumes: volumes:
- name: user-code - name: user-code
persistentVolumeClaim: persistentVolumeClaim:
claimName: dagster-user-code-pvc claimName: dagster-user-code-pvc
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
- name: extra-packages - name: extra-packages
emptyDir: {} emptyDir: {}
{{- end }}
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
envVars: envVars:
- "PYTHONPATH=/opt/dagster/site-packages:/opt/dagster/user-code" - "PYTHONPATH=/opt/dagster/site-packages:/opt/dagster/user-code"
{{- end }}
envSecrets: envSecrets:
- name: dagster-database-secret - name: dagster-database-secret
{{- if eq (.Env.DAGSTER_STORAGE_TYPE | default "local") "minio" }} {{- if eq (.Env.DAGSTER_STORAGE_TYPE | default "local") "minio" }}
@@ -155,6 +183,7 @@ runLauncher:
{{- if eq (.Env.DAGSTER_ENV_SECRETS_EXIST | default "false") "true" }} {{- if eq (.Env.DAGSTER_ENV_SECRETS_EXIST | default "false") "true" }}
- name: dagster-env-secret - name: dagster-env-secret
{{- end }} {{- end }}
{{- if .Env.DAGSTER_EXTRA_PACKAGES }}
runK8sConfig: runK8sConfig:
podSpecConfig: podSpecConfig:
initContainers: initContainers:
@@ -168,6 +197,7 @@ runLauncher:
volumeMounts: volumeMounts:
- name: extra-packages - name: extra-packages
mountPath: /opt/dagster/site-packages mountPath: /opt/dagster/site-packages
{{- end }}
postgresql: postgresql:
enabled: false enabled: false

View File

@@ -1,3 +1,3 @@
FROM docker.io/dagster/dagster-k8s:1.11.10 FROM docker.io/dagster/dagster-k8s:1.11.13
RUN pip install dagster-duckdb dagster-postgres pandas 'dlt[filesystem,postgres,s3]' RUN pip install "dlt[duckdb]" pyarrow pyiceberg s3fs simple-salesforce

View File

@@ -12,7 +12,9 @@ export DAGSTER_STORAGE_SIZE := env("DAGSTER_STORAGE_SIZE", "20Gi")
export DAGSTER_CODE_STORAGE_SIZE := env("DAGSTER_CODE_STORAGE_SIZE", "10Gi") export DAGSTER_CODE_STORAGE_SIZE := env("DAGSTER_CODE_STORAGE_SIZE", "10Gi")
export MINIO_NAMESPACE := env("MINIO_NAMESPACE", "minio") export MINIO_NAMESPACE := env("MINIO_NAMESPACE", "minio")
export DAGSTER_STORAGE_TYPE := env("DAGSTER_STORAGE_TYPE", "") export DAGSTER_STORAGE_TYPE := env("DAGSTER_STORAGE_TYPE", "")
export DAGSTER_EXTRA_PACKAGES := env("DAGSTER_EXTRA_PACKAGES", "dlt[duckdb] pyarrow pyiceberg s3fs simple-salesforce") export DAGSTER_EXTRA_PACKAGES := env("DAGSTER_EXTRA_PACKAGES", "")
# export DAGSTER_EXTRA_PACKAGES := env("DAGSTER_EXTRA_PACKAGES", "dlt[duckdb] pyarrow pyiceberg s3fs simple-salesforce")
[private] [private]
default: default:
@@ -379,9 +381,15 @@ add-workspace-module module_name working_directory:
kubectl patch configmap dagster-workspace-yaml -n ${DAGSTER_NAMESPACE} --patch "$PATCH_JSON" kubectl patch configmap dagster-workspace-yaml -n ${DAGSTER_NAMESPACE} --patch "$PATCH_JSON"
echo "✓ Module '${MODULE_NAME}' added to workspace" echo "✓ Module '${MODULE_NAME}' added to workspace"
echo "Restarting Dagster to reload workspace..."
# Reload workspace configuration (restart webserver and daemon)
reload-workspace:
#!/bin/bash
set -euo pipefail
echo "Reloading Dagster workspace configuration..."
kubectl rollout restart deployment/dagster-dagster-webserver -n ${DAGSTER_NAMESPACE} kubectl rollout restart deployment/dagster-dagster-webserver -n ${DAGSTER_NAMESPACE}
kubectl rollout restart deployment/dagster-daemon -n ${DAGSTER_NAMESPACE} kubectl rollout restart deployment/dagster-daemon -n ${DAGSTER_NAMESPACE}
echo "✓ Workspace reload initiated"
# Note: add-workspace-file command has been removed due to sed parsing issues # Note: add-workspace-file command has been removed due to sed parsing issues
# Use add-workspace-module command instead for adding Python modules to workspace # Use add-workspace-module command instead for adding Python modules to workspace
@@ -542,11 +550,6 @@ remove-project project_name='':
echo "✓ Module '${PYTHON_MODULE_NAME}' removed from workspace" echo "✓ Module '${PYTHON_MODULE_NAME}' removed from workspace"
fi fi
# Restart Dagster to reload workspace
echo "Restarting Dagster to reload workspace..."
kubectl rollout restart deployment/dagster-dagster-webserver -n ${DAGSTER_NAMESPACE}
kubectl rollout restart deployment/dagster-daemon -n ${DAGSTER_NAMESPACE}
echo "✓ Project '${PROJECT_NAME}' removed successfully" echo "✓ Project '${PROJECT_NAME}' removed successfully"
# Setup OAuth2 Proxy for Dagster authentication # Setup OAuth2 Proxy for Dagster authentication