mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 19:56:01 +00:00
Merge pull request #111218 from nixpanic/mount-utils/no-systemd
mount-utils: add Linux specific non-systemd Mounter
This commit is contained in:
commit
b3ea9c9e2b
@ -62,6 +62,7 @@ const (
|
|||||||
type Mounter struct {
|
type Mounter struct {
|
||||||
mounterPath string
|
mounterPath string
|
||||||
withSystemd *bool
|
withSystemd *bool
|
||||||
|
trySystemd bool
|
||||||
withSafeNotMountedBehavior bool
|
withSafeNotMountedBehavior bool
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,6 +74,19 @@ var _ MounterForceUnmounter = &Mounter{}
|
|||||||
func New(mounterPath string) Interface {
|
func New(mounterPath string) Interface {
|
||||||
return &Mounter{
|
return &Mounter{
|
||||||
mounterPath: mounterPath,
|
mounterPath: mounterPath,
|
||||||
|
trySystemd: true,
|
||||||
|
withSafeNotMountedBehavior: detectSafeNotMountedBehavior(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewWithoutSystemd returns a Linux specific mount.Interface for the current
|
||||||
|
// system. It provides options to override the default mounter behavior.
|
||||||
|
// mounterPath allows using an alternative to `/bin/mount` for mounting. Any
|
||||||
|
// detection for systemd functionality is disabled with this Mounter.
|
||||||
|
func NewWithoutSystemd(mounterPath string) Interface {
|
||||||
|
return &Mounter{
|
||||||
|
mounterPath: mounterPath,
|
||||||
|
trySystemd: false,
|
||||||
withSafeNotMountedBehavior: detectSafeNotMountedBehavior(),
|
withSafeNotMountedBehavior: detectSafeNotMountedBehavior(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,6 +94,10 @@ func New(mounterPath string) Interface {
|
|||||||
// hasSystemd validates that the withSystemd bool is set, if it is not,
|
// hasSystemd validates that the withSystemd bool is set, if it is not,
|
||||||
// detectSystemd will be called once for this Mounter instance.
|
// detectSystemd will be called once for this Mounter instance.
|
||||||
func (mounter *Mounter) hasSystemd() bool {
|
func (mounter *Mounter) hasSystemd() bool {
|
||||||
|
if !mounter.trySystemd {
|
||||||
|
mounter.withSystemd = &mounter.trySystemd
|
||||||
|
}
|
||||||
|
|
||||||
if mounter.withSystemd == nil {
|
if mounter.withSystemd == nil {
|
||||||
withSystemd := detectSystemd()
|
withSystemd := detectSystemd()
|
||||||
mounter.withSystemd = &withSystemd
|
mounter.withSystemd = &withSystemd
|
||||||
@ -108,11 +126,11 @@ func (mounter *Mounter) MountSensitive(source string, target string, fstype stri
|
|||||||
mounterPath := ""
|
mounterPath := ""
|
||||||
bind, bindOpts, bindRemountOpts, bindRemountOptsSensitive := MakeBindOptsSensitive(options, sensitiveOptions)
|
bind, bindOpts, bindRemountOpts, bindRemountOptsSensitive := MakeBindOptsSensitive(options, sensitiveOptions)
|
||||||
if bind {
|
if bind {
|
||||||
err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, nil /* mountFlags */, true)
|
err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts, bindRemountOptsSensitive, nil /* mountFlags */, mounter.trySystemd)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, nil /* mountFlags */, true)
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts, bindRemountOptsSensitive, nil /* mountFlags */, mounter.trySystemd)
|
||||||
}
|
}
|
||||||
// The list of filesystems that require containerized mounter on GCI image cluster
|
// The list of filesystems that require containerized mounter on GCI image cluster
|
||||||
fsTypesNeedMounter := map[string]struct{}{
|
fsTypesNeedMounter := map[string]struct{}{
|
||||||
@ -124,7 +142,7 @@ func (mounter *Mounter) MountSensitive(source string, target string, fstype stri
|
|||||||
if _, ok := fsTypesNeedMounter[fstype]; ok {
|
if _, ok := fsTypesNeedMounter[fstype]; ok {
|
||||||
mounterPath = mounter.mounterPath
|
mounterPath = mounter.mounterPath
|
||||||
}
|
}
|
||||||
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, nil /* mountFlags */, true)
|
return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options, sensitiveOptions, nil /* mountFlags */, mounter.trySystemd)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MountSensitiveWithoutSystemd is the same as MountSensitive() but disable using systemd mount.
|
// MountSensitiveWithoutSystemd is the same as MountSensitive() but disable using systemd mount.
|
||||||
@ -167,7 +185,7 @@ func (mounter *Mounter) doMount(mounterPath string, mountCmd string, source stri
|
|||||||
mountCmd = mounterPath
|
mountCmd = mounterPath
|
||||||
}
|
}
|
||||||
|
|
||||||
if mounter.hasSystemd() && systemdMountRequired {
|
if systemdMountRequired && mounter.hasSystemd() {
|
||||||
// Try to run mount via systemd-run --scope. This will escape the
|
// Try to run mount via systemd-run --scope. This will escape the
|
||||||
// service where kubelet runs and any fuse daemons will be started in a
|
// service where kubelet runs and any fuse daemons will be started in a
|
||||||
// specific scope. kubelet service than can be restarted without killing
|
// specific scope. kubelet service than can be restarted without killing
|
||||||
|
Loading…
Reference in New Issue
Block a user