Documentation
¶
Index ¶
- Constants
- func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error)
- type VolumeZone
- func (pl *VolumeZone) EventsToRegister() []framework.ClusterEventWithHint
- func (pl *VolumeZone) Filter(ctx context.Context, cs *framework.CycleState, pod *v1.Pod, ...) *framework.Status
- func (pl *VolumeZone) Name() string
- func (pl *VolumeZone) PreFilter(ctx context.Context, cs *framework.CycleState, pod *v1.Pod) (*framework.PreFilterResult, *framework.Status)
- func (pl *VolumeZone) PreFilterExtensions() framework.PreFilterExtensions
Constants ¶
const ( // Name is the name of the plugin used in the plugin registry and configurations. Name = names.VolumeZone // ErrReasonConflict is used for NoVolumeZoneConflict predicate error. ErrReasonConflict = "node(s) had no available volume zone" )
Variables ¶
This section is empty.
Functions ¶
Types ¶
type VolumeZone ¶
type VolumeZone struct {
// contains filtered or unexported fields
}
VolumeZone is a plugin that checks volume zone.
func (*VolumeZone) EventsToRegister ¶
func (pl *VolumeZone) EventsToRegister() []framework.ClusterEventWithHint
EventsToRegister returns the possible events that may make a Pod failed by this plugin schedulable.
func (*VolumeZone) Filter ¶
func (pl *VolumeZone) Filter(ctx context.Context, cs *framework.CycleState, pod *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status
Filter invoked at the filter extension point.
It evaluates if a pod can fit due to the volumes it requests, given that some volumes may have zone scheduling constraints. The requirement is that any volume zone-labels must match the equivalent zone-labels on the node. It is OK for the node to have more zone-label constraints (for example, a hypothetical replicated volume might allow region-wide access)
Currently this is only supported with PersistentVolumeClaims, and looks to the labels only on the bound PersistentVolume.
Working with volumes declared inline in the pod specification (i.e. not using a PersistentVolume) is likely to be harder, as it would require determining the zone of a volume during scheduling, and that is likely to require calling out to the cloud provider. It seems that we are moving away from inline volume declarations anyway.
func (*VolumeZone) Name ¶
func (pl *VolumeZone) Name() string
Name returns name of the plugin. It is used in logs, etc.
func (*VolumeZone) PreFilter ¶
func (pl *VolumeZone) PreFilter(ctx context.Context, cs *framework.CycleState, pod *v1.Pod) (*framework.PreFilterResult, *framework.Status)
PreFilter invoked at the prefilter extension point
It finds the topology of the PersistentVolumes corresponding to the volumes a pod requests ¶
Currently, this is only supported with PersistentVolumeClaims, and only looks for the bound PersistentVolume.
func (*VolumeZone) PreFilterExtensions ¶
func (pl *VolumeZone) PreFilterExtensions() framework.PreFilterExtensions
PreFilterExtensions returns prefilter extensions, pod add and remove.