279 lines
10 KiB
Go
279 lines
10 KiB
Go
/*
|
|
Copyright 2018 The Volcano Authors.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
*/
|
|
|
|
package v1alpha1
|
|
|
|
import (
|
|
"k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"volcano.sh/volcano/pkg/apis/bus/v1alpha1"
|
|
)
|
|
|
|
// +genclient
|
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
|
|
// Job defines the volcano job
|
|
type Job struct {
|
|
metav1.TypeMeta `json:",inline"`
|
|
|
|
// metadata of the volcano job
|
|
// +optional
|
|
metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
|
|
|
// Specification of the desired behavior of the volcano job, including the minAvailable
|
|
// +optional
|
|
Spec JobSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"`
|
|
|
|
// Current status of the volcano Job
|
|
// +optional
|
|
Status JobStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
|
|
}
|
|
|
|
// JobSpec describes how the job execution will look like and when it will actually run
|
|
type JobSpec struct {
|
|
// SchedulerName is the default value of `tasks.template.spec.schedulerName`.
|
|
// +optional
|
|
SchedulerName string `json:"schedulerName,omitempty" protobuf:"bytes,1,opt,name=schedulerName"`
|
|
|
|
// The minimal available pods to run for this Job
|
|
// +optional
|
|
MinAvailable int32 `json:"minAvailable,omitempty" protobuf:"bytes,2,opt,name=minAvailable"`
|
|
|
|
// The volumes mount on Job
|
|
// +optional
|
|
Volumes []VolumeSpec `json:"volumes,omitempty" protobuf:"bytes,3,opt,name=volumes"`
|
|
|
|
// Tasks specifies the task specification of Job
|
|
// +optional
|
|
Tasks []TaskSpec `json:"tasks,omitempty" protobuf:"bytes,4,opt,name=tasks"`
|
|
|
|
// Specifies the default lifecycle of tasks
|
|
// +optional
|
|
Policies []LifecyclePolicy `json:"policies,omitempty" protobuf:"bytes,5,opt,name=policies"`
|
|
|
|
// Specifies the plugin of job
|
|
// Key is plugin name, value is the arguments of the plugin
|
|
// +optional
|
|
Plugins map[string][]string `json:"plugins,omitempty" protobuf:"bytes,6,opt,name=plugins"`
|
|
|
|
//Specifies the queue that will be used in the scheduler, "default" queue is used this leaves empty.
|
|
// +optional
|
|
Queue string `json:"queue,omitempty" protobuf:"bytes,7,opt,name=queue"`
|
|
|
|
// Specifies the maximum number of retries before marking this Job failed.
|
|
// Defaults to 3.
|
|
// +optional
|
|
MaxRetry int32 `json:"maxRetry,omitempty" protobuf:"bytes,8,opt,name=maxRetry"`
|
|
|
|
// ttlSecondsAfterFinished limits the lifetime of a Job that has finished
|
|
// execution (either Completed or Failed). If this field is set,
|
|
// ttlSecondsAfterFinished after the Job finishes, it is eligible to be
|
|
// automatically deleted. If this field is unset,
|
|
// the Job won't be automatically deleted. If this field is set to zero,
|
|
// the Job becomes eligible to be deleted immediately after it finishes.
|
|
// +optional
|
|
TTLSecondsAfterFinished *int32 `json:"ttlSecondsAfterFinished,omitempty" protobuf:"varint,9,opt,name=ttlSecondsAfterFinished"`
|
|
|
|
// If specified, indicates the job's priority.
|
|
// +optional
|
|
PriorityClassName string `json:"priorityClassName,omitempty" protobuf:"bytes,10,opt,name=priorityClassName"`
|
|
}
|
|
|
|
// VolumeSpec defines the specification of Volume, e.g. PVC
|
|
type VolumeSpec struct {
|
|
// Path within the container at which the volume should be mounted. Must
|
|
// not contain ':'.
|
|
MountPath string `json:"mountPath" protobuf:"bytes,1,opt,name=mountPath"`
|
|
|
|
// defined the PVC name
|
|
// +optional
|
|
VolumeClaimName string `json:"volumeClaimName,omitempty" protobuf:"bytes,2,opt,name=volumeClaimName"`
|
|
|
|
// VolumeClaim defines the PVC used by the VolumeMount.
|
|
// +optional
|
|
VolumeClaim *v1.PersistentVolumeClaimSpec `json:"volumeClaim,omitempty" protobuf:"bytes,3,opt,name=volumeClaim"`
|
|
}
|
|
|
|
// JobEvent job event
|
|
type JobEvent string
|
|
|
|
const (
|
|
// CommandIssued command issued event is generated if a command is raised by user
|
|
CommandIssued JobEvent = "CommandIssued"
|
|
// PluginError plugin error event is generated if error happens
|
|
PluginError JobEvent = "PluginError"
|
|
// PVCError pvc error event is generated if error happens during IO creation
|
|
PVCError JobEvent = "PVCError"
|
|
// PodGroupError pod grp error event is generated if error happens during pod grp creation
|
|
PodGroupError JobEvent = "PodGroupError"
|
|
//ExecuteAction action issued event for each action
|
|
ExecuteAction JobEvent = "ExecuteAction"
|
|
//JobStatusError is generated if update job status failed
|
|
JobStatusError JobEvent = "JobStatusError"
|
|
)
|
|
|
|
// LifecyclePolicy specifies the lifecycle and error handling of task and job.
|
|
type LifecyclePolicy struct {
|
|
// The action that will be taken to the PodGroup according to Event.
|
|
// One of "Restart", "None".
|
|
// Default to None.
|
|
// +optional
|
|
Action v1alpha1.Action `json:"action,omitempty" protobuf:"bytes,1,opt,name=action"`
|
|
|
|
// The Event recorded by scheduler; the controller takes actions
|
|
// according to this Event.
|
|
// +optional
|
|
Event v1alpha1.Event `json:"event,omitempty" protobuf:"bytes,2,opt,name=event"`
|
|
|
|
// The Events recorded by scheduler; the controller takes actions
|
|
// according to this Events.
|
|
// +optional
|
|
Events []v1alpha1.Event `json:"events,omitempty" protobuf:"bytes,3,opt,name=events"`
|
|
|
|
// The exit code of the pod container, controller will take action
|
|
// according to this code.
|
|
// Note: only one of `Event` or `ExitCode` can be specified.
|
|
// +optional
|
|
ExitCode *int32 `json:"exitCode,omitempty" protobuf:"bytes,5,opt,name=exitCode"`
|
|
|
|
// Timeout is the grace period for controller to take actions.
|
|
// Default to nil (take action immediately).
|
|
// +optional
|
|
Timeout *metav1.Duration `json:"timeout,omitempty" protobuf:"bytes,4,opt,name=timeout"`
|
|
}
|
|
|
|
// TaskSpec specifies the task specification of Job
|
|
type TaskSpec struct {
|
|
// Name specifies the name of tasks
|
|
// +optional
|
|
Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
|
|
|
|
// Replicas specifies the replicas of this TaskSpec in Job
|
|
// +optional
|
|
Replicas int32 `json:"replicas,omitempty" protobuf:"bytes,2,opt,name=replicas"`
|
|
|
|
// Specifies the pod that will be created for this TaskSpec
|
|
// when executing a Job
|
|
// +optional
|
|
Template v1.PodTemplateSpec `json:"template,omitempty" protobuf:"bytes,3,opt,name=template"`
|
|
|
|
// Specifies the lifecycle of task
|
|
// +optional
|
|
Policies []LifecyclePolicy `json:"policies,omitempty" protobuf:"bytes,4,opt,name=policies"`
|
|
}
|
|
|
|
// JobPhase defines the phase of the job
|
|
type JobPhase string
|
|
|
|
const (
|
|
// Pending is the phase that job is pending in the queue, waiting for scheduling decision
|
|
Pending JobPhase = "Pending"
|
|
// Aborting is the phase that job is aborted, waiting for releasing pods
|
|
Aborting JobPhase = "Aborting"
|
|
// Aborted is the phase that job is aborted by user or error handling
|
|
Aborted JobPhase = "Aborted"
|
|
// Running is the phase that minimal available tasks of Job are running
|
|
Running JobPhase = "Running"
|
|
// Restarting is the phase that the Job is restarted, waiting for pod releasing and recreating
|
|
Restarting JobPhase = "Restarting"
|
|
// Completing is the phase that required tasks of job are completed, job starts to clean up
|
|
Completing JobPhase = "Completing"
|
|
// Completed is the phase that all tasks of Job are completed
|
|
Completed JobPhase = "Completed"
|
|
// Terminating is the phase that the Job is terminated, waiting for releasing pods
|
|
Terminating JobPhase = "Terminating"
|
|
// Terminated is the phase that the job is finished unexpected, e.g. events
|
|
Terminated JobPhase = "Terminated"
|
|
// Failed is the phase that the job is restarted failed reached the maximum number of retries.
|
|
Failed JobPhase = "Failed"
|
|
)
|
|
|
|
// JobState contains details for the current state of the job.
|
|
type JobState struct {
|
|
// The phase of Job.
|
|
// +optional
|
|
Phase JobPhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase"`
|
|
|
|
// Unique, one-word, CamelCase reason for the phase's last transition.
|
|
// +optional
|
|
Reason string `json:"reason,omitempty" protobuf:"bytes,2,opt,name=reason"`
|
|
|
|
// Human-readable message indicating details about last transition.
|
|
// +optional
|
|
Message string `json:"message,omitempty" protobuf:"bytes,3,opt,name=message"`
|
|
|
|
// Last time the condition transit from one phase to another.
|
|
// +optional
|
|
LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty" protobuf:"bytes,4,opt,name=lastTransitionTime"`
|
|
}
|
|
|
|
// JobStatus represents the current status of a Job
|
|
type JobStatus struct {
|
|
// Current state of Job.
|
|
// +optional
|
|
State JobState `json:"state,omitempty" protobuf:"bytes,1,opt,name=state"`
|
|
|
|
// The minimal available pods to run for this Job
|
|
// +optional
|
|
MinAvailable int32 `json:"minAvailable,omitempty" protobuf:"bytes,2,opt,name=minAvailable"`
|
|
|
|
// The number of pending pods.
|
|
// +optional
|
|
Pending int32 `json:"pending,omitempty" protobuf:"bytes,3,opt,name=pending"`
|
|
|
|
// The number of running pods.
|
|
// +optional
|
|
Running int32 `json:"running,omitempty" protobuf:"bytes,4,opt,name=running"`
|
|
|
|
// The number of pods which reached phase Succeeded.
|
|
// +optional
|
|
Succeeded int32 `json:"succeeded,omitempty" protobuf:"bytes,5,opt,name=succeeded"`
|
|
|
|
// The number of pods which reached phase Failed.
|
|
// +optional
|
|
Failed int32 `json:"failed,omitempty" protobuf:"bytes,6,opt,name=failed"`
|
|
|
|
// The number of pods which reached phase Terminating.
|
|
// +optional
|
|
Terminating int32 `json:"terminating,omitempty" protobuf:"bytes,7,opt,name=terminating"`
|
|
|
|
// The number of pods which reached phase Unknown.
|
|
// +optional
|
|
Unknown int32 `json:"unknown,omitempty" protobuf:"bytes,8,opt,name=unknown"`
|
|
|
|
//Current version of job
|
|
// +optional
|
|
Version int32 `json:"version,omitempty" protobuf:"bytes,9,opt,name=version"`
|
|
|
|
// The number of Job retries.
|
|
// +optional
|
|
RetryCount int32 `json:"retryCount,omitempty" protobuf:"bytes,10,opt,name=retryCount"`
|
|
|
|
// The resources that controlled by this job, e.g. Service, ConfigMap
|
|
// +optional
|
|
ControlledResources map[string]string `json:"controlledResources,omitempty" protobuf:"bytes,11,opt,name=controlledResources"`
|
|
}
|
|
|
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
|
|
|
// JobList defines the list of jobs
|
|
type JobList struct {
|
|
metav1.TypeMeta `json:",inline"`
|
|
metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"`
|
|
|
|
Items []Job `json:"items" protobuf:"bytes,2,rep,name=items"`
|
|
}
|