mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Merge pull request #2667 from thockin/klet-dirs
Kubelet directory-name builder funcs
This commit is contained in:
commit
4845e524af
@ -145,6 +145,42 @@ type Kubelet struct {
|
|||||||
maxContainerCount int
|
maxContainerCount int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetRootDir returns the full path to the directory under which kubelet can
|
||||||
|
// store data. These functions are useful to pass interfaces to other modules
|
||||||
|
// that may need to know where to write data without getting a whole kubelet
|
||||||
|
// instance.
|
||||||
|
func (kl *Kubelet) GetRootDir() string {
|
||||||
|
return kl.rootDirectory
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodsDir returns the full path to the directory under which pod
|
||||||
|
// directories are created.
|
||||||
|
// TODO(thockin): For now, this is the same as the root because that is assumed
|
||||||
|
// in other code. Will fix.
|
||||||
|
func (kl *Kubelet) GetPodsDir() string {
|
||||||
|
return kl.GetRootDir()
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodDir returns the full path to the per-pod data directory for the
|
||||||
|
// specified pod. This directory may not exist if the pod does not exist.
|
||||||
|
func (kl *Kubelet) GetPodDir(podUID string) string {
|
||||||
|
return path.Join(kl.GetRootDir(), podUID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodVolumesDir returns the full path to the per-pod data directory under
|
||||||
|
// which volumes are created for the specified pod. This directory may not
|
||||||
|
// exist if the pod does not exist.
|
||||||
|
func (kl *Kubelet) GetPodVolumesDir(podUID string) string {
|
||||||
|
return path.Join(kl.GetPodDir(podUID), "volumes")
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPodContainerDir returns the full path to the per-pod data directory under
|
||||||
|
// which container data is held for the specified pod. This directory may not
|
||||||
|
// exist if the pod or container does not exist.
|
||||||
|
func (kl *Kubelet) GetPodContainerDir(podUID, ctrName string) string {
|
||||||
|
return path.Join(kl.GetPodDir(podUID), ctrName)
|
||||||
|
}
|
||||||
|
|
||||||
type ByCreated []*docker.Container
|
type ByCreated []*docker.Container
|
||||||
|
|
||||||
func (a ByCreated) Len() int { return len(a) }
|
func (a ByCreated) Len() int { return len(a) }
|
||||||
@ -477,7 +513,7 @@ func (kl *Kubelet) runContainer(pod *api.BoundPod, container *api.Container, pod
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(container.TerminationMessagePath) != 0 {
|
if len(container.TerminationMessagePath) != 0 {
|
||||||
p := path.Join(kl.rootDirectory, pod.Name, container.Name)
|
p := kl.GetPodContainerDir(pod.UID, container.Name)
|
||||||
if err := os.MkdirAll(p, 0750); err != nil {
|
if err := os.MkdirAll(p, 0750); err != nil {
|
||||||
glog.Errorf("Error on creating %s: %v", p, err)
|
glog.Errorf("Error on creating %s: %v", p, err)
|
||||||
} else {
|
} else {
|
||||||
|
@ -19,6 +19,8 @@ package kubelet
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"path"
|
||||||
"reflect"
|
"reflect"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -78,6 +80,40 @@ func verifyBoolean(t *testing.T, expected, value bool) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestKubeletDirs(t *testing.T) {
|
||||||
|
kubelet, _, _ := newTestKubelet(t)
|
||||||
|
root := kubelet.rootDirectory
|
||||||
|
if err := os.MkdirAll(root, 0750); err != nil {
|
||||||
|
t.Fatalf("can't mkdir(%q): %s", root, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
var exp, got string
|
||||||
|
|
||||||
|
got = kubelet.GetPodsDir()
|
||||||
|
exp = root
|
||||||
|
if got != exp {
|
||||||
|
t.Errorf("expected %q', got %q", exp, got)
|
||||||
|
}
|
||||||
|
|
||||||
|
got = kubelet.GetPodDir("abc123")
|
||||||
|
exp = path.Join(root, "abc123")
|
||||||
|
if got != exp {
|
||||||
|
t.Errorf("expected %q', got %q", exp, got)
|
||||||
|
}
|
||||||
|
|
||||||
|
got = kubelet.GetPodVolumesDir("abc123")
|
||||||
|
exp = path.Join(root, "abc123/volumes")
|
||||||
|
if got != exp {
|
||||||
|
t.Errorf("expected %q', got %q", exp, got)
|
||||||
|
}
|
||||||
|
|
||||||
|
got = kubelet.GetPodContainerDir("abc123", "def456")
|
||||||
|
exp = path.Join(root, "abc123/def456")
|
||||||
|
if got != exp {
|
||||||
|
t.Errorf("expected %q', got %q", exp, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestKillContainerWithError(t *testing.T) {
|
func TestKillContainerWithError(t *testing.T) {
|
||||||
fakeDocker := &dockertools.FakeDockerClient{
|
fakeDocker := &dockertools.FakeDockerClient{
|
||||||
Err: fmt.Errorf("sample error"),
|
Err: fmt.Errorf("sample error"),
|
||||||
@ -196,6 +232,7 @@ func TestSyncPodsWithTerminationLog(t *testing.T) {
|
|||||||
err := kubelet.SyncPods([]api.BoundPod{
|
err := kubelet.SyncPods([]api.BoundPod{
|
||||||
{
|
{
|
||||||
ObjectMeta: api.ObjectMeta{
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
UID: "0123-45-67-89ab-cdef",
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
Namespace: "new",
|
Namespace: "new",
|
||||||
Annotations: map[string]string{ConfigSourceAnnotationKey: "test"},
|
Annotations: map[string]string{ConfigSourceAnnotationKey: "test"},
|
||||||
@ -216,10 +253,11 @@ func TestSyncPodsWithTerminationLog(t *testing.T) {
|
|||||||
|
|
||||||
fakeDocker.Lock()
|
fakeDocker.Lock()
|
||||||
parts := strings.Split(fakeDocker.Container.HostConfig.Binds[0], ":")
|
parts := strings.Split(fakeDocker.Container.HostConfig.Binds[0], ":")
|
||||||
if fakeDocker.Container.HostConfig == nil ||
|
if !matchString(t, kubelet.GetPodContainerDir("0123-45-67-89ab-cdef", "bar")+"/k8s_bar\\.[a-f0-9]", parts[0]) {
|
||||||
!matchString(t, "/tmp/kubelet/foo/bar/k8s_bar\\.[a-f0-9]", parts[0]) ||
|
t.Errorf("Unexpected host path: %s", parts[0])
|
||||||
parts[1] != "/dev/somepath" {
|
}
|
||||||
t.Errorf("Unexpected containers created %v", fakeDocker.Container)
|
if parts[1] != "/dev/somepath" {
|
||||||
|
t.Errorf("Unexpected container path: %s", parts[1])
|
||||||
}
|
}
|
||||||
fakeDocker.Unlock()
|
fakeDocker.Unlock()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user