Documentation

Index

Constants

View Source
const CloudVolumeCreatedForClaimNameTag = "kubernetes.io/created-for/pvc/name"

    CloudVolumeCreatedForClaimNameTag is a name of a tag attached to a real volume in cloud (e.g. AWS EBS or GCE PD) with name of a persistent volume claim used to create this volume.

    View Source
    const CloudVolumeCreatedForClaimNamespaceTag = "kubernetes.io/created-for/pvc/namespace"

      CloudVolumeCreatedForClaimNamespaceTag is a name of a tag attached to a real volume in cloud (e.g. AWS EBS or GCE PD) with namespace of a persistent volume claim used to create this volume.

      View Source
      const CloudVolumeCreatedForVolumeNameTag = "kubernetes.io/created-for/pv/name"

        CloudVolumeCreatedForVolumeNameTag is a name of a tag attached to a real volume in cloud (e.g. AWS EBS or GCE PD) with name of appropriate Kubernetes persistent volume .

        Variables

        This section is empty.

        Functions

        func NewAssumeCache

        func NewAssumeCache(informer cache.SharedIndexInformer, description, indexName string, indexFunc cache.IndexFunc) *assumeCache

        Types

        type AssumeCache

        type AssumeCache interface {
        	// Assume updates the object in-memory only
        	Assume(obj interface{}) error
        
        	// Restore the informer cache's version of the object
        	Restore(objName string)
        
        	// Get the object by name
        	Get(objName string) (interface{}, error)
        
        	// List all the objects in the cache
        	List(indexObj interface{}) []interface{}
        }

          AssumeCache is a cache on top of the informer that allows for updating objects outside of informer events and also restoring the informer cache's version of the object. Objects are assumed to be Kubernetes API objects that implement meta.Interface

          type ControllerParameters

          type ControllerParameters struct {
          	KubeClient                clientset.Interface
          	SyncPeriod                time.Duration
          	VolumePlugins             []vol.VolumePlugin
          	Cloud                     cloudprovider.Interface
          	ClusterName               string
          	VolumeInformer            coreinformers.PersistentVolumeInformer
          	ClaimInformer             coreinformers.PersistentVolumeClaimInformer
          	ClassInformer             storageinformers.StorageClassInformer
          	PodInformer               coreinformers.PodInformer
          	EventRecorder             record.EventRecorder
          	EnableDynamicProvisioning bool
          }

            ControllerParameters contains arguments for creation of a new PersistentVolume controller.

            type FakeVolumeBinder

            type FakeVolumeBinder struct {
            	AssumeCalled bool
            	BindCalled   bool
            	// contains filtered or unexported fields
            }

            func NewFakeVolumeBinder

            func NewFakeVolumeBinder(config *FakeVolumeBinderConfig) *FakeVolumeBinder

              NewVolumeBinder sets up all the caches needed for the scheduler to make topology-aware volume binding decisions.

              func (*FakeVolumeBinder) AssumePodVolumes

              func (b *FakeVolumeBinder) AssumePodVolumes(assumedPod *v1.Pod, nodeName string) (bool, bool, error)

              func (*FakeVolumeBinder) BindPodVolumes

              func (b *FakeVolumeBinder) BindPodVolumes(assumedPod *v1.Pod) error

              func (*FakeVolumeBinder) FindPodVolumes

              func (b *FakeVolumeBinder) FindPodVolumes(pod *v1.Pod, node *v1.Node) (unboundVolumesSatisfied, boundVolumesSatsified bool, err error)

              func (*FakeVolumeBinder) GetBindingsCache

              func (b *FakeVolumeBinder) GetBindingsCache() PodBindingCache

              type FakeVolumeBinderConfig

              type FakeVolumeBinderConfig struct {
              	AllBound              bool
              	FindUnboundSatsified  bool
              	FindBoundSatsified    bool
              	FindErr               error
              	AssumeBindingRequired bool
              	AssumeErr             error
              	BindErr               error
              }

              type PVAssumeCache

              type PVAssumeCache interface {
              	AssumeCache
              
              	GetPV(pvName string) (*v1.PersistentVolume, error)
              	ListPVs(storageClassName string) []*v1.PersistentVolume
              }

                PVAssumeCache is a AssumeCache for PersistentVolume objects

                func NewPVAssumeCache

                func NewPVAssumeCache(informer cache.SharedIndexInformer) PVAssumeCache

                type PersistentVolumeController

                type PersistentVolumeController struct {
                	// contains filtered or unexported fields
                }

                  PersistentVolumeController is a controller that synchronizes PersistentVolumeClaims and PersistentVolumes. It starts two cache.Controllers that watch PersistentVolume and PersistentVolumeClaim changes.

                  func NewController

                    NewController creates a new PersistentVolume controller

                    func (*PersistentVolumeController) GetCloudProvider

                    func (ctrl *PersistentVolumeController) GetCloudProvider() cloudprovider.Interface

                    func (*PersistentVolumeController) GetConfigMapFunc

                    func (adc *PersistentVolumeController) GetConfigMapFunc() func(namespace, name string) (*v1.ConfigMap, error)

                    func (*PersistentVolumeController) GetExec

                    func (adc *PersistentVolumeController) GetExec(pluginName string) mount.Exec

                    func (*PersistentVolumeController) GetHostIP

                    func (ctrl *PersistentVolumeController) GetHostIP() (net.IP, error)

                    func (*PersistentVolumeController) GetHostName

                    func (ctrl *PersistentVolumeController) GetHostName() string

                    func (*PersistentVolumeController) GetKubeClient

                    func (ctrl *PersistentVolumeController) GetKubeClient() clientset.Interface

                    func (*PersistentVolumeController) GetMounter

                    func (ctrl *PersistentVolumeController) GetMounter(pluginName string) mount.Interface

                    func (*PersistentVolumeController) GetNodeAllocatable

                    func (ctrl *PersistentVolumeController) GetNodeAllocatable() (v1.ResourceList, error)

                    func (*PersistentVolumeController) GetNodeLabels

                    func (ctrl *PersistentVolumeController) GetNodeLabels() (map[string]string, error)

                    func (*PersistentVolumeController) GetNodeName

                    func (ctrl *PersistentVolumeController) GetNodeName() types.NodeName

                    func (*PersistentVolumeController) GetPluginDir

                    func (ctrl *PersistentVolumeController) GetPluginDir(pluginName string) string

                    func (*PersistentVolumeController) GetPodPluginDir

                    func (ctrl *PersistentVolumeController) GetPodPluginDir(podUID types.UID, pluginName string) string

                    func (*PersistentVolumeController) GetPodVolumeDeviceDir

                    func (ctrl *PersistentVolumeController) GetPodVolumeDeviceDir(ppodUID types.UID, pluginName string) string

                    func (*PersistentVolumeController) GetPodVolumeDir

                    func (ctrl *PersistentVolumeController) GetPodVolumeDir(podUID types.UID, pluginName string, volumeName string) string

                    func (*PersistentVolumeController) GetSecretFunc

                    func (adc *PersistentVolumeController) GetSecretFunc() func(namespace, name string) (*v1.Secret, error)

                    func (*PersistentVolumeController) GetVolumeDevicePluginDir

                    func (ctrl *PersistentVolumeController) GetVolumeDevicePluginDir(pluginName string) string

                    func (*PersistentVolumeController) GetWriter

                    func (ctrl *PersistentVolumeController) GetWriter() io.Writer

                    func (*PersistentVolumeController) NewWrapperMounter

                    func (ctrl *PersistentVolumeController) NewWrapperMounter(volName string, spec vol.Spec, pod *v1.Pod, opts vol.VolumeOptions) (vol.Mounter, error)

                    func (*PersistentVolumeController) NewWrapperUnmounter

                    func (ctrl *PersistentVolumeController) NewWrapperUnmounter(volName string, spec vol.Spec, podUID types.UID) (vol.Unmounter, error)

                    func (*PersistentVolumeController) Run

                    func (ctrl *PersistentVolumeController) Run(stopCh <-chan struct{})

                      Run starts all of this controller's control loops

                      type PodBindingCache

                      type PodBindingCache interface {
                      	// UpdateBindings will update the cache with the given bindings for the
                      	// pod and node.
                      	UpdateBindings(pod *v1.Pod, node string, bindings []*bindingInfo)
                      
                      	// DeleteBindings will remove all cached bindings for the given pod.
                      	DeleteBindings(pod *v1.Pod)
                      
                      	// GetBindings will return the cached bindings for the given pod and node.
                      	GetBindings(pod *v1.Pod, node string) []*bindingInfo
                      }

                        podBindingCache stores PV binding decisions per pod per node. Pod entries are removed when the Pod is deleted or updated to no longer be schedulable.

                        func NewPodBindingCache

                        func NewPodBindingCache() PodBindingCache

                        type SchedulerVolumeBinder

                        type SchedulerVolumeBinder interface {
                        	// FindPodVolumes checks if all of a Pod's PVCs can be satisfied by the node.
                        	//
                        	// If a PVC is bound, it checks if the PV's NodeAffinity matches the Node.
                        	// Otherwise, it tries to find an available PV to bind to the PVC.
                        	//
                        	// It returns true if there are matching PVs that can satisfy all of the Pod's PVCs, and returns true
                        	// if bound volumes satisfy the PV NodeAffinity.
                        	//
                        	// This function is called by the volume binding scheduler predicate and can be called in parallel
                        	FindPodVolumes(pod *v1.Pod, node *v1.Node) (unboundVolumesSatisified, boundVolumesSatisfied bool, err error)
                        
                        	// AssumePodVolumes will take the PV matches for unbound PVCs and update the PV cache assuming
                        	// that the PV is prebound to the PVC.
                        	//
                        	// It returns true if all volumes are fully bound, and returns true if any volume binding API operation needs
                        	// to be done afterwards.
                        	//
                        	// This function will modify assumedPod with the node name.
                        	// This function is called serially.
                        	AssumePodVolumes(assumedPod *v1.Pod, nodeName string) (allFullyBound bool, bindingRequired bool, err error)
                        
                        	// BindPodVolumes will initiate the volume binding by making the API call to prebind the PV
                        	// to its matching PVC.
                        	//
                        	// This function can be called in parallel.
                        	BindPodVolumes(assumedPod *v1.Pod) error
                        
                        	// GetBindingsCache returns the cache used (if any) to store volume binding decisions.
                        	GetBindingsCache() PodBindingCache
                        }

                          SchedulerVolumeBinder is used by the scheduler to handle PVC/PV binding and dynamic provisioning. The binding decisions are integrated into the pod scheduling workflow so that the PV NodeAffinity is also considered along with the pod's other scheduling requirements.

                          This integrates into the existing default scheduler workflow as follows: 1. The scheduler takes a Pod off the scheduler queue and processes it serially:

                          a. Invokes all predicate functions, parallelized across nodes.  FindPodVolumes() is invoked here.
                          b. Invokes all priority functions.  Future/TBD
                          c. Selects the best node for the Pod.
                          d. Cache the node selection for the Pod. (Assume phase)
                             i.  If PVC binding is required, cache in-memory only:
                                 * Updated PV objects for prebinding to the corresponding PVCs.
                                 * For the pod, which PVs need API updates.
                                 AssumePodVolumes() is invoked here.  Then BindPodVolumes() is called asynchronously by the
                                 scheduler.  After BindPodVolumes() is complete, the Pod is added back to the scheduler queue
                                 to be processed again until all PVCs are bound.
                             ii. If PVC binding is not required, cache the Pod->Node binding in the scheduler's pod cache,
                                 and asynchronously bind the Pod to the Node.  This is handled in the scheduler and not here.
                          

                          2. Once the assume operation is done, the scheduler processes the next Pod in the scheduler queue

                          while the actual binding operation occurs in the background.
                          

                          func NewVolumeBinder

                            NewVolumeBinder sets up all the caches needed for the scheduler to make volume binding decisions.

                            Directories

                            Path Synopsis