mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-03 01:06:27 +00:00
[Kubelet] Do not use custom mounter script for bind mounts, ext* and tmpfs mounts
Signed-off-by: Vishnu Kannan <vishnuk@google.com>
This commit is contained in:
parent
d28f7031a1
commit
1ecc12f724
@ -22,6 +22,7 @@ go_library(
|
|||||||
tags = ["automanaged"],
|
tags = ["automanaged"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/util/exec:go_default_library",
|
"//pkg/util/exec:go_default_library",
|
||||||
|
"//pkg/util/sets:go_default_library",
|
||||||
"//vendor:github.com/golang/glog",
|
"//vendor:github.com/golang/glog",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -30,7 +30,7 @@ import (
|
|||||||
|
|
||||||
const (
|
const (
|
||||||
// Default mount command if mounter path is not specified
|
// Default mount command if mounter path is not specified
|
||||||
mount = "mount"
|
defaultMountCommand = "mount"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
@ -105,7 +105,7 @@ func New() Interface {
|
|||||||
func NewCustomMounter(mounterPath, mounterRootfsPath string) Interface {
|
func NewCustomMounter(mounterPath, mounterRootfsPath string) Interface {
|
||||||
// If mounter-path flag is not set, use default mount path
|
// If mounter-path flag is not set, use default mount path
|
||||||
if mounterPath == "" {
|
if mounterPath == "" {
|
||||||
mounterPath = mount
|
mounterPath = defaultMountCommand
|
||||||
}
|
}
|
||||||
if mounterRootfsPath == "" {
|
if mounterRootfsPath == "" {
|
||||||
mounterRootfsPath = "/"
|
mounterRootfsPath = "/"
|
||||||
|
@ -25,13 +25,13 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
"path"
|
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
utilExec "k8s.io/kubernetes/pkg/util/exec"
|
utilExec "k8s.io/kubernetes/pkg/util/exec"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -63,18 +63,24 @@ type Mounter struct {
|
|||||||
// type, where kernel handles fs type for you. The mount 'options' is a list of options,
|
// type, where kernel handles fs type for you. The mount 'options' is a list of options,
|
||||||
// currently come from mount(8), e.g. "ro", "remount", "bind", etc. If no more option is
|
// currently come from mount(8), e.g. "ro", "remount", "bind", etc. If no more option is
|
||||||
// required, call Mount with an empty string list or nil.
|
// required, call Mount with an empty string list or nil.
|
||||||
// Update source path to include a root filesystem override to make a containerized mounter (specified via `mounterPath`) work.
|
|
||||||
func (mounter *Mounter) Mount(source string, target string, fstype string, options []string) error {
|
func (mounter *Mounter) Mount(source string, target string, fstype string, options []string) error {
|
||||||
|
// Path to mounter binary. Set to mount accessible via $PATH by default.
|
||||||
|
// All Linux distros are expected to be shipped with a mount utility that an support bind mounts.
|
||||||
|
mounterPath := defaultMountCommand
|
||||||
bind, bindRemountOpts := isBind(options)
|
bind, bindRemountOpts := isBind(options)
|
||||||
if bind {
|
if bind {
|
||||||
err := doMount(mounter.mounterPath, path.Join(mounter.mounterRootfsPath, source), path.Join(mounter.mounterRootfsPath, target), fstype, []string{"bind"})
|
err := doMount(mounterPath, source, target, fstype, []string{"bind"})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return doMount(mounter.mounterPath, path.Join(mounter.mounterRootfsPath, source), path.Join(mounter.mounterRootfsPath, target), fstype, bindRemountOpts)
|
return doMount(mounterPath, source, target, fstype, bindRemountOpts)
|
||||||
} else {
|
|
||||||
return doMount(mounter.mounterPath, source, path.Join(mounter.mounterRootfsPath, target), fstype, options)
|
|
||||||
}
|
}
|
||||||
|
// These filesystem types are expected to be supported by the mount utility on the host across all Linux distros.
|
||||||
|
var defaultMounterFsTypes = sets.NewString("tmpfs", "ext4", "ext3", "ext2")
|
||||||
|
if !defaultMounterFsTypes.Has(fstype) {
|
||||||
|
mounterPath = mounter.mounterPath
|
||||||
|
}
|
||||||
|
return doMount(mounterPath, source, target, fstype, options)
|
||||||
}
|
}
|
||||||
|
|
||||||
// isBind detects whether a bind mount is being requested and makes the remount options to
|
// isBind detects whether a bind mount is being requested and makes the remount options to
|
||||||
|
Loading…
Reference in New Issue
Block a user