Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
89409766
Commit
89409766
authored
Feb 27, 2019
by
Yecheng Fu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Distinguish volume path with mount path
parent
3c92a6d3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
25 additions
and
24 deletions
+25
-24
reconciler.go
pkg/kubelet/volumemanager/reconciler/reconciler.go
+15
-14
plugins.go
pkg/volume/plugins.go
+3
-3
operation_executor.go
pkg/volume/util/operationexecutor/operation_executor.go
+7
-7
No files found.
pkg/kubelet/volumemanager/reconciler/reconciler.go
View file @
89409766
...
...
@@ -341,7 +341,7 @@ func (rc *reconciler) StatesHasBeenSynced() bool {
type
podVolume
struct
{
podName
volumetypes
.
UniquePodName
volumeSpecName
string
mountPath
string
volumePath
string
pluginName
string
volumeMode
v1
.
PersistentVolumeMode
}
...
...
@@ -477,7 +477,7 @@ func (rc *reconciler) reconstructVolume(volume podVolume) (*reconstructedVolume,
pod
.
UID
,
volume
.
podName
,
volume
.
volumeSpecName
,
volume
.
mount
Path
,
volume
.
volume
Path
,
volume
.
pluginName
)
if
err
!=
nil
{
return
nil
,
err
...
...
@@ -492,15 +492,6 @@ func (rc *reconciler) reconstructVolume(volume podVolume) (*reconstructedVolume,
}
else
{
uniqueVolumeName
=
util
.
GetUniqueVolumeNameFromSpecWithPod
(
volume
.
podName
,
plugin
,
volumeSpec
)
}
// Check existence of mount point for filesystem volume or symbolic link for block volume
isExist
,
checkErr
:=
rc
.
operationExecutor
.
CheckVolumeExistenceOperation
(
volumeSpec
,
volume
.
mountPath
,
volumeSpec
.
Name
(),
rc
.
mounter
,
uniqueVolumeName
,
volume
.
podName
,
pod
.
UID
,
attachablePlugin
)
if
checkErr
!=
nil
{
return
nil
,
checkErr
}
// If mount or symlink doesn't exist, volume reconstruction should be failed
if
!
isExist
{
return
nil
,
fmt
.
Errorf
(
"Volume: %q is not mounted"
,
uniqueVolumeName
)
}
volumeMounter
,
newMounterErr
:=
plugin
.
NewMounter
(
volumeSpec
,
...
...
@@ -516,6 +507,16 @@ func (rc *reconciler) reconstructVolume(volume podVolume) (*reconstructedVolume,
newMounterErr
)
}
// Check existence of mount point for filesystem volume or symbolic link for block volume
isExist
,
checkErr
:=
rc
.
operationExecutor
.
CheckVolumeExistenceOperation
(
volumeSpec
,
volumeMounter
.
GetPath
(),
volumeSpec
.
Name
(),
rc
.
mounter
,
uniqueVolumeName
,
volume
.
podName
,
pod
.
UID
,
attachablePlugin
)
if
checkErr
!=
nil
{
return
nil
,
checkErr
}
// If mount or symlink doesn't exist, volume reconstruction should be failed
if
!
isExist
{
return
nil
,
fmt
.
Errorf
(
"Volume: %q is not mounted"
,
uniqueVolumeName
)
}
// TODO: remove feature gate check after no longer needed
var
volumeMapper
volumepkg
.
BlockVolumeMapper
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
BlockVolume
)
&&
volume
.
volumeMode
==
v1
.
PersistentVolumeBlock
{
...
...
@@ -680,12 +681,12 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) {
}
unescapePluginName
:=
utilstrings
.
UnescapeQualifiedName
(
pluginName
)
for
_
,
volumeName
:=
range
volumePluginDirs
{
mount
Path
:=
path
.
Join
(
volumePluginPath
,
volumeName
)
klog
.
V
(
5
)
.
Infof
(
"podName: %v,
mount path from volume plugin directory: %v, "
,
podName
,
mount
Path
)
volume
Path
:=
path
.
Join
(
volumePluginPath
,
volumeName
)
klog
.
V
(
5
)
.
Infof
(
"podName: %v,
volume path from volume plugin directory: %v, "
,
podName
,
volume
Path
)
volumes
=
append
(
volumes
,
podVolume
{
podName
:
volumetypes
.
UniquePodName
(
podName
),
volumeSpecName
:
volumeName
,
mountPath
:
mount
Path
,
volumePath
:
volume
Path
,
pluginName
:
unescapePluginName
,
volumeMode
:
volumeMode
,
})
...
...
pkg/volume/plugins.go
View file @
89409766
...
...
@@ -139,10 +139,10 @@ type VolumePlugin interface {
NewUnmounter
(
name
string
,
podUID
types
.
UID
)
(
Unmounter
,
error
)
// ConstructVolumeSpec constructs a volume spec based on the given volume name
// and
mount
Path. The spec may have incomplete information due to limited
// and
volume
Path. The spec may have incomplete information due to limited
// information from input. This function is used by volume manager to reconstruct
// volume spec by reading the volume directories from disk
ConstructVolumeSpec
(
volumeName
,
mount
Path
string
)
(
*
Spec
,
error
)
ConstructVolumeSpec
(
volumeName
,
volume
Path
string
)
(
*
Spec
,
error
)
// SupportsMountOption returns true if volume plugins supports Mount options
// Specifying mount options in a volume plugin that doesn't support
...
...
@@ -275,7 +275,7 @@ type BlockVolumePlugin interface {
// The spec may have incomplete information due to limited information
// from input. This function is used by volume manager to reconstruct
// volume spec by reading the volume directories from disk.
ConstructBlockVolumeSpec
(
podUID
types
.
UID
,
volumeName
,
mount
Path
string
)
(
*
Spec
,
error
)
ConstructBlockVolumeSpec
(
podUID
types
.
UID
,
volumeName
,
volume
Path
string
)
(
*
Spec
,
error
)
}
// VolumeHost is an interface that plugins can use to access the kubelet.
...
...
pkg/volume/util/operationexecutor/operation_executor.go
View file @
89409766
...
...
@@ -145,7 +145,7 @@ type OperationExecutor interface {
// ExpandVolumeFSWithoutUnmounting will resize volume's file system to expected size without unmounting the volume.
ExpandVolumeFSWithoutUnmounting
(
volumeToMount
VolumeToMount
,
actualStateOfWorld
ActualStateOfWorldMounterUpdater
)
error
// ReconstructVolumeOperation construct a new volumeSpec and returns it created by plugin
ReconstructVolumeOperation
(
volumeMode
v1
.
PersistentVolumeMode
,
plugin
volume
.
VolumePlugin
,
mapperPlugin
volume
.
BlockVolumePlugin
,
uid
types
.
UID
,
podName
volumetypes
.
UniquePodName
,
volumeSpecName
string
,
mount
Path
string
,
pluginName
string
)
(
*
volume
.
Spec
,
error
)
ReconstructVolumeOperation
(
volumeMode
v1
.
PersistentVolumeMode
,
plugin
volume
.
VolumePlugin
,
mapperPlugin
volume
.
BlockVolumePlugin
,
uid
types
.
UID
,
podName
volumetypes
.
UniquePodName
,
volumeSpecName
string
,
volume
Path
string
,
pluginName
string
)
(
*
volume
.
Spec
,
error
)
// CheckVolumeExistenceOperation checks volume existence
CheckVolumeExistenceOperation
(
volumeSpec
*
volume
.
Spec
,
mountPath
,
volumeName
string
,
mounter
mount
.
Interface
,
uniqueVolumeName
v1
.
UniqueVolumeName
,
podName
volumetypes
.
UniquePodName
,
podUID
types
.
UID
,
attachable
volume
.
AttachableVolumePlugin
)
(
bool
,
error
)
}
...
...
@@ -862,14 +862,14 @@ func (oe *operationExecutor) ReconstructVolumeOperation(
uid
types
.
UID
,
podName
volumetypes
.
UniquePodName
,
volumeSpecName
string
,
mount
Path
string
,
volume
Path
string
,
pluginName
string
)
(
*
volume
.
Spec
,
error
)
{
// Filesystem Volume case
if
volumeMode
==
v1
.
PersistentVolumeFilesystem
{
// Create volumeSpec from mount path
klog
.
V
(
5
)
.
Infof
(
"Starting operationExecutor.ReconstructVolumepodName"
)
volumeSpec
,
err
:=
plugin
.
ConstructVolumeSpec
(
volumeSpecName
,
mount
Path
)
volumeSpec
,
err
:=
plugin
.
ConstructVolumeSpec
(
volumeSpecName
,
volume
Path
)
if
err
!=
nil
{
return
nil
,
err
}
...
...
@@ -886,17 +886,17 @@ func (oe *operationExecutor) ReconstructVolumeOperation(
podName
,
uid
)
}
//
mount
Path contains volumeName on the path. In the case of block volume, {volumeName} is symbolic link
//
volume
Path contains volumeName on the path. In the case of block volume, {volumeName} is symbolic link
// corresponding to raw block device.
// ex.
mount
Path: pods/{podUid}}/{DefaultKubeletVolumeDevicesDirName}/{escapeQualifiedPluginName}/{volumeName}
volumeSpec
,
err
:=
mapperPlugin
.
ConstructBlockVolumeSpec
(
uid
,
volumeSpecName
,
mount
Path
)
// ex.
volume
Path: pods/{podUid}}/{DefaultKubeletVolumeDevicesDirName}/{escapeQualifiedPluginName}/{volumeName}
volumeSpec
,
err
:=
mapperPlugin
.
ConstructBlockVolumeSpec
(
uid
,
volumeSpecName
,
volume
Path
)
if
err
!=
nil
{
return
nil
,
err
}
return
volumeSpec
,
nil
}
// CheckVolumeExistenceOperation
return a func() to check
mount path directory if volume still exists
// CheckVolumeExistenceOperation
checks
mount path directory if volume still exists
func
(
oe
*
operationExecutor
)
CheckVolumeExistenceOperation
(
volumeSpec
*
volume
.
Spec
,
mountPath
,
volumeName
string
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment