diff --git a/charts/clearml-agent/Chart.yaml b/charts/clearml-agent/Chart.yaml index def6d6c..66891df 100644 --- a/charts/clearml-agent/Chart.yaml +++ b/charts/clearml-agent/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 name: clearml-agent description: MLOps platform Task running agent type: application -version: "3.3.2" +version: "3.4.0" appVersion: "1.24" kubeVersion: ">= 1.21.0-0 < 1.27.0-0" home: https://clear.ml @@ -20,5 +20,9 @@ keywords: - "task agent" annotations: artifacthub.io/changes: | + - kind: added + description: support for parameter Job/Pod task - kind: fixed - description: clearml agent internal helper variable name + description: empty hostAliases map/array mismatch + - kind: fixed + description: agent deployment checksum diff --git a/charts/clearml-agent/README.md b/charts/clearml-agent/README.md index 991608d..10977f8 100644 --- a/charts/clearml-agent/README.md +++ b/charts/clearml-agent/README.md @@ -1,6 +1,6 @@ # ClearML Kubernetes Agent -![Version: 3.3.2](https://img.shields.io/badge/Version-3.3.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.24](https://img.shields.io/badge/AppVersion-1.24-informational?style=flat-square) +![Version: 3.4.0](https://img.shields.io/badge/Version-3.4.0-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: 1.24](https://img.shields.io/badge/AppVersion-1.24-informational?style=flat-square) MLOps platform Task running agent @@ -30,16 +30,16 @@ Kubernetes: `>= 1.21.0-0 < 1.27.0-0` | Key | Type | Default | Description | |-----|------|---------|-------------| -| agentk8sglue | object | `{"affinity":{},"annotations":{},"apiServerUrlReference":"https://api.clear.ml","basePodTemplate":{"affinity":{},"annotations":{},"env":[],"fileMounts":[],"hostAliases":{},"initContainers":[],"labels":{},"nodeSelector":{},"resources":{},"schedulerName":"","securityContext":{},"tolerations":[],"volumeMounts":[],"volumes":[]},"clearmlcheckCertificate":true,"containerCustomBashScript":"","customBashScript":"","debugMode":false,"defaultContainerImage":"ubuntu:18.04","extraEnvs":[],"fileMounts":[],"fileServerUrlReference":"https://files.clear.ml","image":{"repository":"allegroai/clearml-agent-k8s-base","tag":"1.24-21"},"labels":{},"nodeSelector":{},"queue":"default","replicaCount":1,"securityContext":{},"serviceExistingAccountName":"","tolerations":[],"volumeMounts":[],"volumes":[],"webServerUrlReference":"https://app.clear.ml"}` | This agent will spawn queued experiments in new pods, a good use case is to combine this with GPU autoscaling nodes. https://github.com/allegroai/clearml-agent/tree/master/docker/k8s-glue | +| agentk8sglue | object | `{"affinity":{},"annotations":{},"apiServerUrlReference":"https://api.clear.ml","basePodTemplate":{"affinity":{},"annotations":{},"env":[],"fileMounts":[],"hostAliases":[],"initContainers":[],"labels":{},"nodeSelector":{},"resources":{},"schedulerName":"","securityContext":{},"tolerations":[],"volumeMounts":[],"volumes":[]},"clearmlcheckCertificate":true,"containerCustomBashScript":"","customBashScript":"","debugMode":false,"defaultContainerImage":"ubuntu:18.04","extraEnvs":[],"fileMounts":[],"fileServerUrlReference":"https://files.clear.ml","image":{"repository":"allegroai/clearml-agent-k8s-base","tag":"1.24-21"},"labels":{},"nodeSelector":{},"queue":"default","replicaCount":1,"securityContext":{},"serviceExistingAccountName":"","taskAsJob":false,"tolerations":[],"volumeMounts":[],"volumes":[],"webServerUrlReference":"https://app.clear.ml"}` | This agent will spawn queued experiments in new pods, a good use case is to combine this with GPU autoscaling nodes. https://github.com/allegroai/clearml-agent/tree/master/docker/k8s-glue | | agentk8sglue.affinity | object | `{}` | affinity setup for Agent pod (example in values.yaml comments) | | agentk8sglue.annotations | object | `{}` | annotations setup for Agent pod (example in values.yaml comments) | | agentk8sglue.apiServerUrlReference | string | `"https://api.clear.ml"` | Reference to Api server url | -| agentk8sglue.basePodTemplate | object | `{"affinity":{},"annotations":{},"env":[],"fileMounts":[],"hostAliases":{},"initContainers":[],"labels":{},"nodeSelector":{},"resources":{},"schedulerName":"","securityContext":{},"tolerations":[],"volumeMounts":[],"volumes":[]}` | base template for pods spawned to consume ClearML Task | +| agentk8sglue.basePodTemplate | object | `{"affinity":{},"annotations":{},"env":[],"fileMounts":[],"hostAliases":[],"initContainers":[],"labels":{},"nodeSelector":{},"resources":{},"schedulerName":"","securityContext":{},"tolerations":[],"volumeMounts":[],"volumes":[]}` | base template for pods spawned to consume ClearML Task | | agentk8sglue.basePodTemplate.affinity | object | `{}` | affinity setup for pods spawned to consume ClearML Task | | agentk8sglue.basePodTemplate.annotations | object | `{}` | annotations setup for pods spawned to consume ClearML Task (example in values.yaml comments) | | agentk8sglue.basePodTemplate.env | list | `[]` | environment variables for pods spawned to consume ClearML Task (example in values.yaml comments) | | agentk8sglue.basePodTemplate.fileMounts | list | `[]` | file definition for pods spawned to consume ClearML Task (example in values.yaml comments) | -| agentk8sglue.basePodTemplate.hostAliases | object | `{}` | hostAliases setup for pods spawned to consume ClearML Task (example in values.yaml comments) | +| agentk8sglue.basePodTemplate.hostAliases | list | `[]` | hostAliases setup for pods spawned to consume ClearML Task (example in values.yaml comments) | | agentk8sglue.basePodTemplate.initContainers | list | `[]` | initContainers definition for pods spawned to consume ClearML Task (example in values.yaml comments) | | agentk8sglue.basePodTemplate.labels | object | `{}` | labels setup for pods spawned to consume ClearML Task (example in values.yaml comments) | | agentk8sglue.basePodTemplate.nodeSelector | object | `{}` | nodeSelector setup for pods spawned to consume ClearML Task (example in values.yaml comments) | @@ -63,6 +63,7 @@ Kubernetes: `>= 1.21.0-0 < 1.27.0-0` | agentk8sglue.replicaCount | int | `1` | Glue Agent number of pods | | agentk8sglue.securityContext | object | `{}` | Web Server pod security context | | agentk8sglue.serviceExistingAccountName | string | `""` | if set, don't create a serviceAccountName but use defined existing one | +| agentk8sglue.taskAsJob | bool | `false` | ClearML spawn tasks as jobs instead of pods | | agentk8sglue.tolerations | list | `[]` | tolerations setup for Agent pod (example in values.yaml comments) | | agentk8sglue.volumeMounts | list | `[]` | volume mounts definition for Glue Agent (example in values.yaml comments) | | agentk8sglue.volumes | list | `[]` | volumes definition for Glue Agent (example in values.yaml comments) | diff --git a/charts/clearml-agent/templates/_helpers.tpl b/charts/clearml-agent/templates/_helpers.tpl index fbed08c..77e52ad 100644 --- a/charts/clearml-agent/templates/_helpers.tpl +++ b/charts/clearml-agent/templates/_helpers.tpl @@ -72,7 +72,6 @@ Create secret to access docker registry {{- end }} {{- end }} - {{/* Create a string composed by queue names */}} @@ -83,3 +82,135 @@ Create a string composed by queue names {{- end }} {{- join " " $list }} {{- end }} + +{{/* +Create a task container template +*/}} +{{- define "taskContainer.containerTemplate" -}} +{{- if .main.Values.imageCredentials.enabled }} +imagePullSecrets: + - name: {{ .main.Values.imageCredentials.existingSecret | default (printf "%s-ark" (include "clearmlAgent.name" .main )) }} +{{- end }} +schedulerName: {{ .value.templateOverrides.schedulerName | default (.main.Values.agentk8sglue.basePodTemplate.schedulerName) }} +restartPolicy: Never +securityContext: + {{- .value.templateOverrides.securityContext | default .main.Values.agentk8sglue.basePodTemplate.securityContext | toYaml | nindent 2 }} +hostAliases: + {{- .value.templateOverrides.hostAliases | default .main.Values.agentk8sglue.basePodTemplate.hostAliases | toYaml | nindent 2 }} +volumes: + {{ $computedvolumes := (.value.templateOverrides.volumes | default .main.Values.agentk8sglue.basePodTemplate.volumes) }} + {{- if $computedvolumes }}{{- $computedvolumes | toYaml | nindent 2 }}{{- end }} + {{- if .value.templateOverrides.fileMounts }} + - name: filemounts + secret: + secretName: {{ include "clearmlAgent.name" .main }}-{{ .key }}-fm + {{- else if .main.Values.agentk8sglue.basePodTemplate.fileMounts }} + - name: filemounts + secret: + secretName: {{ include "clearmlAgent.name" .main }}-fm + {{- end }} +{{- if not .main.Values.enterpriseFeatures.serviceAccountClusterAccess }} +serviceAccountName: {{ include "clearmlAgent.serviceAccountName" .main }} +{{- end }} +initContainers: + {{- .value.templateOverrides.initContainers | default .main.Values.agentk8sglue.basePodTemplate.initContainers | toYaml | nindent 2 }} +containers: +- resources: + {{- .value.templateOverrides.resources | default .main.Values.agentk8sglue.basePodTemplate.resources | toYaml | nindent 4 }} + ports: + - containerPort: 10022 + volumeMounts: + {{ $computedvolumemounts := (.value.templateOverrides.volumeMounts | default .main.Values.agentk8sglue.basePodTemplate.volumeMounts) }} + {{- if $computedvolumemounts }}{{- $computedvolumemounts | toYaml | nindent 4 }}{{- end }} + {{- if .value.templateOverrides.fileMounts }} + {{- range .value.templateOverrides.fileMounts }} + - name: filemounts + mountPath: "{{ .folderPath }}/{{ .name }}" + subPath: "{{ .name }}" + readOnly: true + {{- end }} + {{- else if .main.Values.agentk8sglue.basePodTemplate.fileMounts }} + {{- range .main.Values.agentk8sglue.basePodTemplate.fileMounts }} + - name: filemounts + mountPath: "{{ .folderPath }}/{{ .name }}" + subPath: "{{ .name }}" + readOnly: true + {{- end }} + {{- end }} + env: + - name: CLEARML_API_HOST + value: {{ .main.Values.agentk8sglue.apiServerUrlReference }} + - name: CLEARML_WEB_HOST + value: {{ .main.Values.agentk8sglue.webServerUrlReference }} + - name: CLEARML_FILES_HOST + value: {{ .main.Values.agentk8sglue.fileServerUrlReference }} + {{- if not .main.Values.enterpriseFeatures.useOwnerToken }} + - name: CLEARML_API_ACCESS_KEY + valueFrom: + secretKeyRef: + name: {{ .main.Values.clearml.existingAgentk8sglueSecret | default (printf "%s-ac" (include "clearmlAgent.name" .main )) }} + key: agentk8sglue_key + - name: CLEARML_API_SECRET_KEY + valueFrom: + secretKeyRef: + name: {{ .main.Values.clearml.existingAgentk8sglueSecret | default (printf "%s-ac" (include "clearmlAgent.name" .main )) }} + key: agentk8sglue_secret + {{- end }} + - name: PYTHONUNBUFFERED + value: "x" + {{- if not .main.Values.agentk8sglue.clearmlcheckCertificate }} + - name: CLEARML_API_HOST_VERIFY_CERT + value: "false" + {{- end }} + {{ $computedenvs := (.value.templateOverrides.env| default .main.Values.agentk8sglue.basePodTemplate.env) }} + {{- if $computedenvs }}{{- $computedenvs | toYaml | nindent 4 }}{{- end }} +nodeSelector: + {{ .value.templateOverrides.nodeSelector | default .main.Values.agentk8sglue.basePodTemplate.nodeSelector | toYaml | nindent 2 }} +tolerations: + {{ .value.templateOverrides.tolerations | default .main.Values.agentk8sglue.basePodTemplate.tolerations | toYaml | nindent 2 }} +affinity: + {{ .value.templateOverrides.affinity | default .main.Values.agentk8sglue.basePodTemplate.affinity | toYaml | nindent 2 }} +{{- end }} + +{{/* +Create a task container template +*/}} +{{- define "taskContainer.podTemplate" -}} +{{- range $key, $value := $.Values.enterpriseFeatures.queues }} +{{ $key }}: + apiVersion: v1 + kind: Pod + metadata: + namespace: {{ $.Release.Namespace }} + labels: + {{ $value.templateOverrides.labels | default $.Values.agentk8sglue.basePodTemplate.labels | toYaml }} + annotations: + {{ $value.templateOverrides.annotations | default $.Values.agentk8sglue.basePodTemplate.annotations | toYaml }} + spec: + {{- $data := dict "main" $ "key" $key "value" $value -}} + {{- include "taskContainer.containerTemplate" $data | nindent 4}} +{{- end }} +{{- end }} + +{{/* +Create a task container template +*/}} +{{- define "taskContainer.jobTemplate" -}} +{{- range $key, $value := $.Values.enterpriseFeatures.queues }} +{{ $key }}: + apiVersion: batch/v1 + kind: Job + metadata: + namespace: {{ $.Release.Namespace }} + labels: + {{ $value.templateOverrides.labels | default $.Values.agentk8sglue.basePodTemplate.labels | toYaml }} + annotations: + {{ $value.templateOverrides.annotations | default $.Values.agentk8sglue.basePodTemplate.annotations | toYaml }} + spec: + template: + spec: + {{- $data := dict "main" $ "key" $key "value" $value -}} + {{- include "taskContainer.containerTemplate" $data | nindent 8 }} + backoffLimit: 0 +{{- end }} +{{- end }} diff --git a/charts/clearml-agent/templates/agentk8sglue-configmap.yaml b/charts/clearml-agent/templates/agentk8sglue-configmap.yaml index df064d0..b0b8a60 100644 --- a/charts/clearml-agent/templates/agentk8sglue-configmap.yaml +++ b/charts/clearml-agent/templates/agentk8sglue-configmap.yaml @@ -5,184 +5,10 @@ metadata: data: {{- if .Values.enterpriseFeatures.enabled }} template.yaml: | - {{- range $key, $value := $.Values.enterpriseFeatures.queues }} - {{ $key }}: - apiVersion: v1 - metadata: - namespace: {{ $.Release.Namespace }} - {{- if $value.templateOverrides.labels }} - labels: - {{- toYaml $value.templateOverrides.labels | nindent 10 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.labels }} - labels: - {{- toYaml $.Values.agentk8sglue.basePodTemplate.labels | nindent 10 }} - {{- end}} - {{- if $value.templateOverrides.annotations }} - annotations: - {{- toYaml $value.templateOverrides.annotations | nindent 10 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.annotations }} - annotations: - {{- toYaml $.Values.agentk8sglue.basePodTemplate.annotations | nindent 10 }} - {{- end}} - spec: - {{- if $.Values.imageCredentials.enabled }} - imagePullSecrets: - {{- if $.Values.imageCredentials.existingSecret }} - - name: {{ $.Values.imageCredentials.existingSecret }} - {{- else }} - - name: {{ include "clearmlAgent.name" $ }}-ark - {{- end }} - {{- end }} - {{- if $value.templateOverrides.schedulerName }} - schedulerName: {{ $value.templateOverrides.schedulerName }} - {{- else if $.Values.agentk8sglue.basePodTemplate.schedulerName }} - schedulerName: {{ $.Values.agentk8sglue.basePodTemplate.schedulerName }} - {{- end}} - restartPolicy: Never - {{- if $value.templateOverrides.securityContext }} - securityContext: - {{- toYaml $value.templateOverrides.securityContext | nindent 10 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.securityContext }} - securityContext: - {{- toYaml $.Values.agentk8sglue.basePodTemplate.securityContext | nindent 10 }} - {{- end}} - {{- if $value.templateOverrides.hostAliases }} - {{- with $value.templateOverrides.hostAliases }} - hostAliases: - {{- toYaml . | nindent 10 }} - {{- end }} - {{- else if $.Values.agentk8sglue.basePodTemplate.hostAliases }} - {{- with $.Values.agentk8sglue.basePodTemplate.hostAliases }} - hostAliases: - {{- toYaml . | nindent 10 }} - {{- end }} - {{- end }} - volumes: - {{- if $value.templateOverrides.volumes }} - {{- toYaml $value.templateOverrides.volumes | nindent 10 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.volumes }} - {{- toYaml $.Values.agentk8sglue.basePodTemplate.volumes | nindent 10 }} - {{- end }} - {{- if $value.templateOverrides.fileMounts }} - - name: filemounts - secret: - secretName: {{ include "clearmlAgent.name" $ }}-{{ $key }}-fm - {{- else if $.Values.agentk8sglue.basePodTemplate.fileMounts }} - - name: filemounts - secret: - secretName: {{ include "clearmlAgent.name" $ }}-fm - {{- end }} - {{- if not $.Values.enterpriseFeatures.serviceAccountClusterAccess }} - serviceAccountName: {{ include "clearmlAgent.serviceAccountName" $ }} - {{- end }} - {{- if $value.templateOverrides.initContainers }} - initContainers: - {{- toYaml $value.templateOverrides.initContainers | nindent 10 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.initContainers }} - initContainers: - {{- toYaml $.Values.agentk8sglue.basePodTemplate.initContainers | nindent 10 }} - {{- end }} - containers: - - resources: - {{- if $value.templateOverrides.resources }} - {{- toYaml $value.templateOverrides.resources | nindent 12 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.resources }} - {{- toYaml $.Values.agentk8sglue.basePodTemplate.resources | nindent 12 }} - {{- end}} - ports: - - containerPort: 10022 - volumeMounts: - {{- if $value.templateOverrides.volumeMounts }} - {{- toYaml $value.templateOverrides.volumeMounts | nindent 12 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.volumeMounts }} - {{- toYaml $.Values.agentk8sglue.basePodTemplate.volumeMounts | nindent 12 }} - {{- end }} - {{- if $value.templateOverrides.fileMounts }} - {{- range $value.templateOverrides.fileMounts }} - - name: filemounts - mountPath: "{{ .folderPath }}/{{ .name }}" - subPath: "{{ .name }}" - readOnly: true - {{- end }} - {{- else if $.Values.agentk8sglue.basePodTemplate.fileMounts }} - {{- range $.Values.agentk8sglue.basePodTemplate.fileMounts }} - - name: filemounts - mountPath: "{{ .folderPath }}/{{ .name }}" - subPath: "{{ .name }}" - readOnly: true - {{- end }} - {{- end }} - env: - - name: CLEARML_API_HOST - value: {{ $.Values.agentk8sglue.apiServerUrlReference }} - - name: CLEARML_WEB_HOST - value: {{ $.Values.agentk8sglue.webServerUrlReference }} - - name: CLEARML_FILES_HOST - value: {{ $.Values.agentk8sglue.fileServerUrlReference }} - {{- if not $.Values.enterpriseFeatures.useOwnerToken }} - - name: CLEARML_API_ACCESS_KEY - valueFrom: - secretKeyRef: - {{- if $.Values.clearml.existingAgentk8sglueSecret }} - name: {{ $.Values.clearml.existingAgentk8sglueSecret }} - {{- else }} - name: {{ include "clearmlAgent.name" $ }}-ac - {{- end }} - key: agentk8sglue_key - - name: CLEARML_API_SECRET_KEY - valueFrom: - secretKeyRef: - {{- if $.Values.clearml.existingAgentk8sglueSecret }} - name: {{ $.Values.clearml.existingAgentk8sglueSecret }} - {{- else }} - name: {{ include "clearmlAgent.name" $ }}-ac - {{- end }} - key: agentk8sglue_secret - {{- end }} - - name: PYTHONUNBUFFERED - value: "x" - {{- if not $.Values.agentk8sglue.clearmlcheckCertificate }} - - name: CLEARML_API_HOST_VERIFY_CERT - value: "false" - {{- end }} - {{- if $value.templateOverrides.env }} - {{- toYaml $value.templateOverrides.env | nindent 12 }} - {{- else if $.Values.agentk8sglue.basePodTemplate.env }} - {{- toYaml $.Values.agentk8sglue.basePodTemplate.env | nindent 12 }} - {{- end }} - {{- if $value.templateOverrides.nodeSelector }} - {{- with $value.templateOverrides.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 12 }} - {{- end }} - {{- else if $.Values.agentk8sglue.basePodTemplate.nodeSelector }} - {{- with $.Values.agentk8sglue.basePodTemplate.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 10 }} - {{- end }} - {{- end }} - {{- if $value.templateOverrides.tolerations }} - {{- with $value.templateOverrides.tolerations }} - tolerations: - {{- toYaml . | nindent 10 }} - {{- end }} - {{- else if $.Values.agentk8sglue.basePodTemplate.tolerations }} - {{- with $.Values.agentk8sglue.basePodTemplate.tolerations }} - tolerations: - {{- toYaml . | nindent 10 }} - {{- end }} - {{- end }} - {{- if $value.templateOverrides.affinity }} - {{- with $value.templateOverrides.affinity }} - affinity: - {{- toYaml . | nindent 10 }} - {{- end }} - {{- else if $.Values.agentk8sglue.basePodTemplate.affinity }} - {{- with $.Values.agentk8sglue.basePodTemplate.affinity }} - affinity: - {{- toYaml . | nindent 10 }} - {{- end }} - {{- end }} + {{- if .Values.agentk8sglue.taskAsJob }} + {{ include "taskContainer.jobTemplate" . | nindent 4}} + {{- else }} + {{ include "taskContainer.podTemplate" . | nindent 4}} {{- end }} secrets.yaml: | {{- range $key, $value := $.Values.enterpriseFeatures.queues }} diff --git a/charts/clearml-agent/templates/agentk8sglue-deployment.yaml b/charts/clearml-agent/templates/agentk8sglue-deployment.yaml index f54b487..e64f8ae 100644 --- a/charts/clearml-agent/templates/agentk8sglue-deployment.yaml +++ b/charts/clearml-agent/templates/agentk8sglue-deployment.yaml @@ -14,7 +14,7 @@ spec: template: metadata: annotations: - checksum/config: {{ printf "%s%s" .Values.clearml .Values.agentk8sglue | sha256sum }} + checksum/config: {{ printf "%s" .Values | sha256sum }} {{- include "clearmlAgent.annotations" . | nindent 8 }} labels: {{- include "clearmlAgent.labels" . | nindent 8 }} @@ -158,6 +158,13 @@ spec: value: "interactive" {{- end }} {{- end }} + {{- if .Values.agentk8sglue.taskAsJob }} + - name: "CLEARML_K8S_GLUE_KIND" + value: "job" + {{- else }} + - name: "CLEARML_K8S_GLUE_KIND" + value: "pod" + {{- end }} {{- if .Values.enterpriseFeatures.enabled }} - name: K8S_GLUE_QUEUE value: {{ include "agentk8sglue.queues" . | quote }} diff --git a/charts/clearml-agent/templates/agentk8sglue-rbac.yaml b/charts/clearml-agent/templates/agentk8sglue-rbac.yaml index 549ca3a..f1693ca 100644 --- a/charts/clearml-agent/templates/agentk8sglue-rbac.yaml +++ b/charts/clearml-agent/templates/agentk8sglue-rbac.yaml @@ -24,6 +24,14 @@ rules: resources: - namespaces verbs: ["list"] + {{- if .Values.agentk8sglue.taskAsJob }} + - apiGroups: + - batch + - extensions + resources: + - jobs + verbs: ["get", "list", "watch", "create", "patch", "delete"] + {{- end }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding @@ -56,6 +64,14 @@ rules: resources: - namespaces verbs: ["list"] + {{- if .Values.agentk8sglue.taskAsJob }} + - apiGroups: + - batch + - extensions + resources: + - jobs + verbs: ["get", "list", "watch", "create", "patch", "delete"] + {{- end }} --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding diff --git a/charts/clearml-agent/values.yaml b/charts/clearml-agent/values.yaml index 4b5c9b9..97e9591 100644 --- a/charts/clearml-agent/values.yaml +++ b/charts/clearml-agent/values.yaml @@ -61,6 +61,8 @@ agentk8sglue: defaultContainerImage: ubuntu:18.04 # -- ClearML queue this agent will consume queue: default + # -- ClearML spawn tasks as jobs instead of pods + taskAsJob: false # -- Custom Bash script for the Glue Agent # -- labels setup for Agent pod (example in values.yaml comments) labels: {} @@ -181,7 +183,7 @@ agentk8sglue: # runAsUser: 1001 # fsGroup: 1001 # -- hostAliases setup for pods spawned to consume ClearML Task (example in values.yaml comments) - hostAliases: {} + hostAliases: [] # - ip: "127.0.0.1" # hostnames: # - "foo.local"