pallet

module
v0.0.2-alpha Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 20, 2022 License: Apache-2.0

README

pallet


Pallet - Enables delayed scheduling and schedule planning for operator specified sets of pods.

Summary

This project introduces into the Kubernetes environment the ability to identify a set of pods and delay their scheduling until a trigger is fired. Additionally, while the set of pods is delayed a scheduling plan can be created such that the node selection considers all pods in the set of pods when making selections, thus plans that optimize across the whole set of pods can be leveraged.

PodSet

The term PodSet in this project references the set of pods as identified by the use of label selectors. This reference is not a formal Kubernetes resource type.

Custom Resources

The following are the set of custom resources introduced by this project.

ScheduleTrigger

A ScheduleTrigger identifies, via label selection, a set of pods (PodSet) and a trigger state for the associated pods. The trigger state may have the following values:

  • Planning - indicates that the pods in the set will not be assigned to a node and the pod will remain in the Pending state.

  • Schedule - when the state is set from Planning to Schedule a schedule plan will be created for all Pending pods in the trigger's PodSet and Pods will be assigned to nodes based on this schedule plan.

The state value of a schedule trigger can be manually managed and updated via the Kubernetes API or CLI. In addition to manual management, the schedule trigger controller also recognizes a well known label of the format planner.ciena.io/quiet-time: <time>, where <time> is a string representation of the time the controller will wait since the last pod was created that selects into the trigger's pod set before automatically changing the state from Planning to Schedule. The format for time should match a value that is parsable by Golang's time.Duration implementation.

SchedulePlan

A SchedulePlan represents the Pod to Node association for a set of pods based on the evaluation by a planner.

Planner

A Planner is a Kubernetes service and implementation that implements the planner gRPC API as defined in planner.proto. A planner is associated with a schedule trigger by adding the well know label of the form planner.ciena.io/<pod-set-label>: enabled, where <pod-set-label> is replaced with the label associated with the set of pods to plan. There is a default planner that will be used when a planner specific to a PodSet cannot be found.

Adhering to the Plan

The schedule plan for a pod set is created when the trigger's state is set to Schedule. This is done to prevent churn and throw-away processing if a new plan was generated each time a pod was added to a pod set who's trigger is in the Planning state.

When the trigger is change to Schedule then each affected pod will be assigned to a node as it is passed to the scheduler. When using the schedule plan a check is first made to verify the the planned node is still valid for the pod and if not the plan is recalculated. If the planned node is still valid the pod is assigned to that node.

If a pod is created and matched to a trigger that is already in the Schedule state then the plan is recalculated and the pod immediately assigned to the planned node.

Directories

Path Synopsis
cmd
controllers
internal
pkg
apis/scheduleplanner/v1alpha1
Package v1alpha1 contains API Schema definitions for the constraint v1alpha1 API group +kubebuilder:object:generate=true +groupName=planner.ciena.io +kubebuilder:validation:Required
Package v1alpha1 contains API Schema definitions for the constraint v1alpha1 API group +kubebuilder:object:generate=true +groupName=planner.ciena.io +kubebuilder:validation:Required

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL