| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 1 | From 7844c9ec1cdef485731a4858a48b854986387591 Mon Sep 17 00:00:00 2001 |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 2 | From: Lorenz Brun <lorenz@monogon.tech> |
| 3 | Date: Wed, 16 Mar 2022 18:10:09 +0100 |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 4 | Subject: [PATCH] Drop legacy log path |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 5 | |
| 6 | --- |
| Lorenz Brun | f2b7ab6 | 2022-05-04 19:06:00 +0200 | [diff] [blame] | 7 | pkg/kubelet/kubelet.go | 7 --- |
| 8 | .../kuberuntime/kuberuntime_container.go | 36 --------------- |
| 9 | pkg/kubelet/kuberuntime/kuberuntime_gc.go | 46 ------------------- |
| Lorenz Brun | f2b7ab6 | 2022-05-04 19:06:00 +0200 | [diff] [blame] | 10 | test/e2e_node/log_path_test.go | 18 -------- |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 11 | 4 files changed, 107 deletions(-) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 12 | |
| 13 | diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 14 | index b8bbfece860..e6aa5e8359b 100644 |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 15 | --- a/pkg/kubelet/kubelet.go |
| 16 | +++ b/pkg/kubelet/kubelet.go |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 17 | @@ -1589,13 +1589,6 @@ func (kl *Kubelet) initializeModules() error { |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 18 | return err |
| 19 | } |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 20 | |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 21 | - // If the container logs directory does not exist, create it. |
| 22 | - if _, err := os.Stat(ContainerLogsDir); err != nil { |
| 23 | - if err := kl.os.MkdirAll(ContainerLogsDir, 0755); err != nil { |
| 24 | - return fmt.Errorf("failed to create directory %q: %v", ContainerLogsDir, err) |
| 25 | - } |
| 26 | - } |
| 27 | - |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 28 | if goos == "windows" { |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 29 | // On Windows we should not allow other users to read the logs directory |
| 30 | // to avoid allowing non-root containers from reading the logs of other containers. |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 31 | diff --git a/pkg/kubelet/kuberuntime/kuberuntime_container.go b/pkg/kubelet/kuberuntime/kuberuntime_container.go |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 32 | index a154754d285..df87ff82f7d 100644 |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 33 | --- a/pkg/kubelet/kuberuntime/kuberuntime_container.go |
| 34 | +++ b/pkg/kubelet/kuberuntime/kuberuntime_container.go |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 35 | @@ -286,25 +286,6 @@ func (m *kubeGenericRuntimeManager) startContainer(ctx context.Context, podSandb |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 36 | } |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 37 | m.recordContainerEvent(pod, container, containerID, v1.EventTypeNormal, events.StartedContainer, "Started container %v", container.Name) |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 38 | |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 39 | - // Symlink container logs to the legacy container log location for cluster logging |
| 40 | - // support. |
| 41 | - // TODO(random-liu): Remove this after cluster logging supports CRI container log path. |
| 42 | - containerMeta := containerConfig.GetMetadata() |
| 43 | - sandboxMeta := podSandboxConfig.GetMetadata() |
| 44 | - legacySymlink := legacyLogSymlink(containerID, containerMeta.Name, sandboxMeta.Name, |
| 45 | - sandboxMeta.Namespace) |
| 46 | - containerLog := filepath.Join(podSandboxConfig.LogDirectory, containerConfig.LogPath) |
| 47 | - // only create legacy symlink if containerLog path exists (or the error is not IsNotExist). |
| 48 | - // Because if containerLog path does not exist, only dangling legacySymlink is created. |
| 49 | - // This dangling legacySymlink is later removed by container gc, so it does not make sense |
| 50 | - // to create it in the first place. it happens when journald logging driver is used with docker. |
| 51 | - if _, err := m.osInterface.Stat(containerLog); !os.IsNotExist(err) { |
| 52 | - if err := m.osInterface.Symlink(containerLog, legacySymlink); err != nil { |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 53 | - klog.ErrorS(err, "Failed to create legacy symbolic link", "path", legacySymlink, |
| 54 | - "containerID", containerID, "containerLogPath", containerLog) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 55 | - } |
| 56 | - } |
| 57 | - |
| 58 | // Step 4: execute the post start hook. |
| 59 | if container.Lifecycle != nil && container.Lifecycle.PostStart != nil { |
| 60 | kubeContainerID := kubecontainer.ContainerID{ |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 61 | @@ -1335,23 +1316,6 @@ func (m *kubeGenericRuntimeManager) removeContainerLog(ctx context.Context, cont |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 62 | return err |
| 63 | } |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 64 | |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 65 | - resp, err := m.runtimeService.ContainerStatus(ctx, containerID, false) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 66 | - if err != nil { |
| 67 | - return fmt.Errorf("failed to get container status %q: %v", containerID, err) |
| 68 | - } |
| Lorenz Brun | f2b7ab6 | 2022-05-04 19:06:00 +0200 | [diff] [blame] | 69 | - status := resp.GetStatus() |
| 70 | - if status == nil { |
| 71 | - return remote.ErrContainerStatusNil |
| 72 | - } |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 73 | - // Remove the legacy container log symlink. |
| 74 | - // TODO(random-liu): Remove this after cluster logging supports CRI container log path. |
| 75 | - labeledInfo := getContainerInfoFromLabels(status.Labels) |
| 76 | - legacySymlink := legacyLogSymlink(containerID, labeledInfo.ContainerName, labeledInfo.PodName, |
| 77 | - labeledInfo.PodNamespace) |
| 78 | - if err := m.osInterface.Remove(legacySymlink); err != nil && !os.IsNotExist(err) { |
| 79 | - return fmt.Errorf("failed to remove container %q log legacy symbolic link %q: %v", |
| 80 | - containerID, legacySymlink, err) |
| 81 | - } |
| 82 | return nil |
| 83 | } |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 84 | |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 85 | diff --git a/pkg/kubelet/kuberuntime/kuberuntime_gc.go b/pkg/kubelet/kuberuntime/kuberuntime_gc.go |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 86 | index 6189b1f07ca..3cd3daa5a6c 100644 |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 87 | --- a/pkg/kubelet/kuberuntime/kuberuntime_gc.go |
| 88 | +++ b/pkg/kubelet/kuberuntime/kuberuntime_gc.go |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 89 | @@ -19,7 +19,6 @@ package kuberuntime |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 90 | import ( |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 91 | "context" |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 92 | "fmt" |
| 93 | - "os" |
| 94 | "path/filepath" |
| 95 | "sort" |
| 96 | "time" |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 97 | @@ -347,51 +346,6 @@ func (cgc *containerGC) evictPodLogsDirectories(ctx context.Context, allSourcesR |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 98 | } |
| 99 | } |
| 100 | } |
| 101 | - |
| 102 | - // Remove dead container log symlinks. |
| 103 | - // TODO(random-liu): Remove this after cluster logging supports CRI container log path. |
| 104 | - logSymlinks, _ := osInterface.Glob(filepath.Join(legacyContainerLogsDir, fmt.Sprintf("*.%s", legacyLogSuffix))) |
| 105 | - for _, logSymlink := range logSymlinks { |
| 106 | - if _, err := osInterface.Stat(logSymlink); os.IsNotExist(err) { |
| 107 | - if containerID, err := getContainerIDFromLegacyLogSymlink(logSymlink); err == nil { |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 108 | - resp, err := cgc.manager.runtimeService.ContainerStatus(ctx, containerID, false) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 109 | - if err != nil { |
| 110 | - // TODO: we should handle container not found (i.e. container was deleted) case differently |
| 111 | - // once https://github.com/kubernetes/kubernetes/issues/63336 is resolved |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 112 | - klog.InfoS("Error getting ContainerStatus for containerID", "containerID", containerID, "err", err) |
| Lorenz Brun | f2b7ab6 | 2022-05-04 19:06:00 +0200 | [diff] [blame] | 113 | - } else { |
| 114 | - status := resp.GetStatus() |
| 115 | - if status == nil { |
| 116 | - klog.V(4).InfoS("Container status is nil") |
| 117 | - continue |
| 118 | - } |
| 119 | - if status.State != runtimeapi.ContainerState_CONTAINER_EXITED { |
| 120 | - // Here is how container log rotation works (see containerLogManager#rotateLatestLog): |
| 121 | - // |
| 122 | - // 1. rename current log to rotated log file whose filename contains current timestamp (fmt.Sprintf("%s.%s", log, timestamp)) |
| 123 | - // 2. reopen the container log |
| 124 | - // 3. if #2 fails, rename rotated log file back to container log |
| 125 | - // |
| 126 | - // There is small but indeterministic amount of time during which log file doesn't exist (between steps #1 and #2, between #1 and #3). |
| 127 | - // Hence the symlink may be deemed unhealthy during that period. |
| 128 | - // See https://github.com/kubernetes/kubernetes/issues/52172 |
| 129 | - // |
| 130 | - // We only remove unhealthy symlink for dead containers |
| 131 | - klog.V(5).InfoS("Container is still running, not removing symlink", "containerID", containerID, "path", logSymlink) |
| 132 | - continue |
| 133 | - } |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 134 | - } |
| 135 | - } else { |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 136 | - klog.V(4).InfoS("Unable to obtain container ID", "err", err) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 137 | - } |
| 138 | - err := osInterface.Remove(logSymlink) |
| 139 | - if err != nil { |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 140 | - klog.ErrorS(err, "Failed to remove container log dead symlink", "path", logSymlink) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 141 | - } else { |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 142 | - klog.V(4).InfoS("Removed symlink", "path", logSymlink) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 143 | - } |
| 144 | - } |
| 145 | - } |
| 146 | return nil |
| 147 | } |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 148 | |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 149 | diff --git a/test/e2e_node/log_path_test.go b/test/e2e_node/log_path_test.go |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 150 | index a1589e6d91e..179206eb1dd 100644 |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 151 | --- a/test/e2e_node/log_path_test.go |
| 152 | +++ b/test/e2e_node/log_path_test.go |
| Lorenz Brun | d13c1c6 | 2022-03-30 19:58:58 +0200 | [diff] [blame] | 153 | @@ -22,8 +22,6 @@ import ( |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 154 | v1 "k8s.io/api/core/v1" |
| 155 | metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" |
| 156 | "k8s.io/apimachinery/pkg/util/uuid" |
| 157 | - "k8s.io/kubernetes/pkg/kubelet" |
| 158 | - kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" |
| 159 | "k8s.io/kubernetes/test/e2e/framework" |
| 160 | e2epod "k8s.io/kubernetes/test/e2e/framework/pod" |
| Lorenz Brun | f2b7ab6 | 2022-05-04 19:06:00 +0200 | [diff] [blame] | 161 | admissionapi "k8s.io/pod-security-admission/api" |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 162 | @@ -122,22 +120,6 @@ var _ = SIGDescribe("ContainerLogPath", framework.WithNodeConformance(), func() |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 163 | err := createAndWaitPod(ctx, makeLogPod(logPodName, logString)) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 164 | framework.ExpectNoError(err, "Failed waiting for pod: %s to enter success state", logPodName) |
| 165 | }) |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 166 | - ginkgo.It("should print log to correct log path", func(ctx context.Context) { |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 167 | - |
| 168 | - logDir := kubelet.ContainerLogsDir |
| 169 | - |
| 170 | - // get containerID from created Pod |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 171 | - createdLogPod, err := podClient.Get(ctx, logPodName, metav1.GetOptions{}) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 172 | - logContainerID := kubecontainer.ParseContainerID(createdLogPod.Status.ContainerStatuses[0].ContainerID) |
| 173 | - framework.ExpectNoError(err, "Failed to get pod: %s", logPodName) |
| 174 | - |
| 175 | - // build log file path |
| 176 | - expectedlogFile := logDir + "/" + logPodName + "_" + f.Namespace.Name + "_" + logContainerName + "-" + logContainerID.ID + ".log" |
| 177 | - |
| 178 | - logCheckPodName := "log-check-" + string(uuid.NewUUID()) |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 179 | - err = createAndWaitPod(ctx, makeLogCheckPod(logCheckPodName, logString, expectedlogFile)) |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 180 | - framework.ExpectNoError(err, "Failed waiting for pod: %s to enter success state", logCheckPodName) |
| 181 | - }) |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 182 | |
| Lorenz Brun | 6211e4d | 2023-11-14 19:09:40 +0100 | [diff] [blame] | 183 | ginkgo.It("should print log to correct cri log path", func(ctx context.Context) { |
| Lorenz Brun | 732a884 | 2024-08-26 23:25:37 +0200 | [diff] [blame] | 184 | |
| 185 | -- |
| Lorenz Brun | 837cb8e | 2024-12-23 13:52:56 +0100 | [diff] [blame] | 186 | 2.47.0 |
| Lorenz Brun | 7b82227 | 2021-02-03 17:03:41 +0100 | [diff] [blame] | 187 | |