mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Created directories in /var/lib/kubelet directly.
This commit is contained in:
parent
9f80de3772
commit
a8a37fb714
@ -360,7 +360,7 @@ func UnsecuredDependencies(s *options.KubeletServer) (*kubelet.Dependencies, err
|
|||||||
var writer kubeio.Writer = &kubeio.StdWriter{}
|
var writer kubeio.Writer = &kubeio.StdWriter{}
|
||||||
if s.Containerized {
|
if s.Containerized {
|
||||||
glog.V(2).Info("Running kubelet in containerized mode")
|
glog.V(2).Info("Running kubelet in containerized mode")
|
||||||
mounter, err = mount.NewNsenterMounter()
|
mounter, err = mount.NewNsenterMounter(s.RootDirectory)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -43,9 +43,15 @@ const (
|
|||||||
// the host's mount namespace.
|
// the host's mount namespace.
|
||||||
type NsenterMounter struct {
|
type NsenterMounter struct {
|
||||||
ne *nsenter.Nsenter
|
ne *nsenter.Nsenter
|
||||||
|
// rootDir is location of /var/lib/kubelet directory.
|
||||||
|
rootDir string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNsenterMounter() (*NsenterMounter, error) {
|
// NewNsenterMounter creates a new mounter for kubelet that runs as a container.
|
||||||
|
// rootDir is location of /var/lib/kubelet directory (in case it's not on the
|
||||||
|
// default place). This directory must be available in the container
|
||||||
|
// on the same place as it's on the host.
|
||||||
|
func NewNsenterMounter(rootDir string) (*NsenterMounter, error) {
|
||||||
ne, err := nsenter.NewNsenter()
|
ne, err := nsenter.NewNsenter()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -305,14 +311,28 @@ func (mounter *NsenterMounter) SafeMakeDir(subdir string, base string, perm os.F
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error resolving symlinks in %s: %s", fullSubdirPath, err)
|
return fmt.Errorf("error resolving symlinks in %s: %s", fullSubdirPath, err)
|
||||||
}
|
}
|
||||||
kubeletSubdirPath := mounter.ne.KubeletPath(evaluatedSubdirPath)
|
evaluatedSubdirPath = filepath.Clean(evaluatedSubdirPath)
|
||||||
|
|
||||||
evaluatedBase, err := mounter.ne.EvalSymlinks(base, true /* mustExist */)
|
evaluatedBase, err := mounter.ne.EvalSymlinks(base, true /* mustExist */)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("error resolving symlinks in %s: %s", base, err)
|
return fmt.Errorf("error resolving symlinks in %s: %s", base, err)
|
||||||
}
|
}
|
||||||
kubeletBase := mounter.ne.KubeletPath(evaluatedBase)
|
evaluatedBase = filepath.Clean(evaluatedBase)
|
||||||
|
|
||||||
|
rootDir := filepath.Clean(mounter.rootDir)
|
||||||
|
if pathWithinBase(evaluatedBase, rootDir) {
|
||||||
|
// Base is in /var/lib/kubelet. This directory is shared between the
|
||||||
|
// container with kubelet and the host. We don't need to add '/rootfs'.
|
||||||
|
// This is useful when /rootfs is mounted as read-only - we can still
|
||||||
|
// create subpaths for paths in /var/lib/kubelet.
|
||||||
|
return doSafeMakeDir(evaluatedSubdirPath, evaluatedBase, perm)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Base is somewhere on the host's filesystem. Add /rootfs and try to make
|
||||||
|
// the directory there.
|
||||||
|
// This requires /rootfs to be writable.
|
||||||
|
kubeletSubdirPath := mounter.ne.KubeletPath(evaluatedSubdirPath)
|
||||||
|
kubeletBase := mounter.ne.KubeletPath(evaluatedBase)
|
||||||
return doSafeMakeDir(kubeletSubdirPath, kubeletBase, perm)
|
return doSafeMakeDir(kubeletSubdirPath, kubeletBase, perm)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ import (
|
|||||||
|
|
||||||
type NsenterMounter struct{}
|
type NsenterMounter struct{}
|
||||||
|
|
||||||
func NewNsenterMounter() (*NsenterMounter, error) {
|
func NewNsenterMounter(rootDir string) (*NsenterMounter, error) {
|
||||||
return &NsenterMounter{}, nil
|
return &NsenterMounter{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user