proteus: Move to chart

This commit is contained in:
2026-08-10 10:14:23 +02:00
parent dda824ed85
commit 83ae01546e
12 changed files with 343 additions and 171 deletions
+23
View File
@@ -0,0 +1,23 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*.orig
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
+6
View File
@@ -0,0 +1,6 @@
apiVersion: v2
name: proteus
description: A Helm chart for Kubernetes
type: application
version: 0.1.0
appVersion: "0.1.0"
+69
View File
@@ -0,0 +1,69 @@
{{- if eq .Values.environment "prod" }}
apiVersion: temporal.io/v1alpha1
kind: WorkerResourceTemplate
metadata:
name: proteus-prod-hpa
namespace: proteus
spec:
workerDeploymentRef:
name: proteus-prod
template:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
scaleTargetRef: {} # NOTE: controller injects the versioned Deployment
minReplicas: 2
maxReplicas: 10
metrics:
- type: External
external:
metric:
name: temporal_approximate_backlog_count
selector:
matchLabels:
task_type: "Activity"
target:
type: AverageValue
averageValue: "2"
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
{{- end }}
---
{{- if eq .Values.environment "beta" }}
apiVersion: temporal.io/v1alpha1
kind: WorkerResourceTemplate
metadata:
name: proteus-beta-hpa
namespace: proteus
spec:
workerDeploymentRef:
name: proteus-beta
template:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
scaleTargetRef: {}
minReplicas: 1
maxReplicas: 2
metrics:
- type: External
external:
metric:
name: temporal_approximate_backlog_count
selector:
matchLabels:
task_type: "Activity"
target:
type: AverageValue
averageValue: "2"
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
{{- end }}
@@ -0,0 +1,206 @@
{{- if eq .Values.environment "prod" }}
apiVersion: temporal.io/v1alpha1
kind: WorkerDeployment
metadata:
name: proteus-prod
namespace: proteus
spec:
replicas: 2
workerOptions:
temporalNamespace: prod-atlantis
connectionRef:
name: temporal
rollout:
strategy: AllAtOnce
sunset: {}
template:
spec:
securityContext:
runAsUser: 0
runAsGroup: 0
volumes:
- name: archives
persistentVolumeClaim:
claimName: proteus-ceph-archives
containers:
- name: proteus
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
requests:
cpu: "1"
memory: 1Gi
limits:
cpu: "2"
memory: 4Gi
env:
- name: TEMPORAL_TASK_QUEUES
value: plume,xtract
- name: TEMPORAL_NAMESPACE
value: prod-atlantis
- name: APP_ENV
value: prod
- name: ARCHIVE_PVC
value: prod-queue-ceph-archives
- name: MAX_CONCURRENT_ACTIVITIES
value: "2"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://10.255.241.12:4317
volumeMounts:
- name: archives
mountPath: /data
ports:
- name: health
containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: health
initialDelaySeconds: 20
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /readyz
port: health
initialDelaySeconds: 5
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 3
{{- end }}
---
{{- if eq .Values.environment "beta" }}
apiVersion: temporal.io/v1alpha1
kind: WorkerDeployment
metadata:
name: proteus-beta
namespace: proteus
spec:
replicas: 1
workerOptions:
temporalNamespace: beta-atlantis
connectionRef:
name: temporal
rollout:
strategy: AllAtOnce
sunset: {}
template:
spec:
securityContext:
runAsUser: 0
runAsGroup: 0
volumes:
- name: archives
persistentVolumeClaim:
claimName: proteus-ceph-archives
containers:
- name: proteus
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
memory: 1Gi
env:
- name: TEMPORAL_TASK_QUEUES
value: plume,xtract
- name: TEMPORAL_NAMESPACE
value: beta-atlantis
- name: APP_ENV
value: beta
- name: ARCHIVE_PVC
value: prod-queue-ceph-archives
- name: MAX_CONCURRENT_ACTIVITIES
value: "2"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://10.255.241.12:4317
volumeMounts:
- name: archives
mountPath: /data
ports:
- name: health
containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: health
initialDelaySeconds: 20
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /readyz
port: health
initialDelaySeconds: 5
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 3
{{- end }}
---
{{- if eq .Values.environment "staging" }}
apiVersion: temporal.io/v1alpha1
kind: WorkerDeployment
metadata:
name: proteus-staging
namespace: proteus
spec:
replicas: 1
workerOptions:
temporalNamespace: staging-atlantis
connectionRef:
name: temporal
rollout:
strategy: AllAtOnce
sunset: {}
template:
spec:
securityContext:
runAsUser: 0
runAsGroup: 0
volumes:
- name: archives
persistentVolumeClaim:
claimName: proteus-ceph-archives
containers:
- name: proteus
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
memory: 1Gi
env:
- name: TEMPORAL_TASK_QUEUES
value: plume,xtract
- name: TEMPORAL_NAMESPACE
value: staging-atlantis
- name: MAX_CONCURRENT_ACTIVITIES
value: "10"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://10.255.241.12:4317
volumeMounts:
- name: archives
mountPath: /data
ports:
- name: health
containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: health
initialDelaySeconds: 20
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /readyz
port: health
initialDelaySeconds: 5
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 3
{{- end }}
+12
View File
@@ -0,0 +1,12 @@
# Default values for proteus.
# This chart is installed three times, like atlantis: "proteus" (environment: prod, this
# file's defaults), "proteus-staging" (environment: staging, values-staging.yaml), and
# "proteus-beta" (environment: beta, values-beta.yaml). Each release has its own Values scope,
# so all three can use the plain `image` key without colliding — the publish-container CI action
# bumps .image.tag here directly on a tagged release (same convention as charts/atlantis/values.yaml)
# and bumps values-staging.yaml's .image.tag on every merge to main. Beta's tag is manually pinned,
# same as atlantis's values-beta.yaml.gotmpl.
image:
repository: git.oceanbox.io/oceanbox/poseidon/proteus
tag: ""
environment: prod
+21 -1
View File
@@ -5,6 +5,27 @@ commonLabels:
tier: system
releases:
- name: proteus
namespace: proteus
chart: ../charts/proteus
condition: proteus.enabled
values:
- ../values/proteus/values/values-prod.yaml
missingFileHandler: Info
- name: proteus-staging
namespace: proteus
chart: ../charts/proteus
condition: proteus.enabled
values:
- ../values/proteus/values/values-staging.yaml
missingFileHandler: Info
- name: proteus-beta
namespace: proteus
chart: ../charts/proteus
condition: proteus.enabled
values:
- ../values/proteus/values/values-beta.yaml
missingFileHandler: Info
- name: manifests
namespace: proteus
chart: manifests
@@ -15,7 +36,6 @@ releases:
- ../values/env-{{ requiredEnv "ARGOCD_ENV_CLUSTER_NAME" }}.yaml
- ../values/proteus/env.yaml.gotmpl
- ../values/proteus/env-{{ requiredEnv "ARGOCD_ENV_CLUSTER_NAME" }}.yaml.gotmpl
- ../values/proteus/values/values-staging.yaml
hooks:
- events: [ prepare, cleanup ]
showlogs: true
@@ -1,170 +0,0 @@
# apiVersion: temporal.io/v1alpha1
# kind: WorkerDeployment
# metadata:
# name: proteus-prod
# namespace: proteus
# spec:
# replicas: 2
# workerOptions:
# temporalNamespace: prod-atlantis
# connectionRef:
# name: temporal
# rollout:
# strategy: AllAtOnce
# sunset: {}
# template:
# spec:
# securityContext:
# runAsUser: 0
# runAsGroup: 0
# volumes:
# - name: archives
# persistentVolumeClaim:
# claimName: proteus-ceph-archives
# containers:
# - name: proteus
# image: git.oceanbox.io/oceanbox/poseidon/proteus:v2.17.0
# resources:
# requests:
# cpu: "1"
# memory: 1Gi
# limits:
# cpu: "2"
# memory: 4Gi
# env:
# - name: TEMPORAL_TASK_QUEUES
# value: plume,xtract
# - name: TEMPORAL_NAMESPACE
# value: prod-atlantis
# - name: APP_ENV
# value: prod
# - name: ARCHIVE_PVC
# value: prod-queue-ceph-archives
# - name: MAX_CONCURRENT_ACTIVITIES
# value: "2"
# - name: OTEL_EXPORTER_OTLP_ENDPOINT
# value: http://10.255.241.12:4317
# volumeMounts:
# - name: archives
# mountPath: /data
# ports:
# - name: health
# containerPort: 8080
# livenessProbe:
# httpGet:
# path: /healthz
# port: health
# initialDelaySeconds: 20
# periodSeconds: 15
# timeoutSeconds: 5
# failureThreshold: 6
# readinessProbe:
# httpGet:
# path: /readyz
# port: health
# initialDelaySeconds: 5
# periodSeconds: 15
# timeoutSeconds: 5
# failureThreshold: 3
# ---
# apiVersion: temporal.io/v1alpha1
# kind: WorkerDeployment
# metadata:
# name: proteus-beta
# namespace: proteus
# spec:
# replicas: 1
# workerOptions:
# temporalNamespace: beta-atlantis
# connectionRef:
# name: temporal
# rollout:
# strategy: AllAtOnce
# sunset: {}
# template:
# spec:
# securityContext:
# runAsUser: 0
# runAsGroup: 0
# containers:
# - name: proteus
# image: git.oceanbox.io/oceanbox/poseidon/proteus:CHANGEME
# resources:
# requests:
# memory: 256Mi
# limits:
# memory: 1Gi
# env:
# - name: TEMPORAL_TASK_QUEUES
# value: plume,xtract
# - name: TEMPORAL_NAMESPACE
# value: beta-atlantis
# - name: APP_ENV
# value: beta
# - name: ARCHIVE_PVC
# value: prod-queue-ceph-archives
---
apiVersion: temporal.io/v1alpha1
kind: WorkerDeployment
metadata:
name: proteus-staging
namespace: proteus
spec:
replicas: 1
workerOptions:
temporalNamespace: staging-atlantis
connectionRef:
name: temporal
rollout:
strategy: AllAtOnce
sunset: {}
template:
spec:
securityContext:
runAsUser: 0
runAsGroup: 0
volumes:
- name: archives
persistentVolumeClaim:
claimName: proteus-ceph-archives
containers:
- name: proteus
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: "2"
memory: 4Gi
env:
- name: TEMPORAL_TASK_QUEUES
value: plume,xtract
- name: TEMPORAL_NAMESPACE
value: staging-atlantis
- name: MAX_CONCURRENT_ACTIVITIES
value: "10"
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: http://10.255.241.12:4317
volumeMounts:
- name: archives
mountPath: /data
ports:
- name: health
containerPort: 8080
livenessProbe:
httpGet:
path: /healthz
port: health
initialDelaySeconds: 20
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /readyz
port: health
initialDelaySeconds: 5
periodSeconds: 15
timeoutSeconds: 5
failureThreshold: 3
+4
View File
@@ -0,0 +1,4 @@
image:
repository: git.oceanbox.io/oceanbox/poseidon/proteus
tag: v2.17.0
environment: beta
+1
View File
@@ -0,0 +1 @@
environment: prod
@@ -1,3 +1,4 @@
image:
repository: git.oceanbox.io/oceanbox/poseidon/proteus
tag: 7a4a367d-debug
environment: staging