server: issues.k8s.io/44043 workaround
Because kubelet will create broken symlinks for logPath it is necessary to remove those symlinks before we attempt to write to them. This is a temporary workaround while the issue is fixed upstream. Ref: https://issues.k8s.io/44043 Signed-off-by: Aleksa Sarai <asarai@suse.de>
This commit is contained in:
parent
65527da361
commit
7679a84c6d
2 changed files with 33 additions and 0 deletions
|
@ -203,6 +203,29 @@ func setupContainerUser(specgen *generate.Generator, rootfs string, sc *pb.Linux
|
|||
return nil
|
||||
}
|
||||
|
||||
// ensureSaneLogPath is a hack to fix https://issues.k8s.io/44043 which causes
|
||||
// logPath to be a broken symlink to some magical Docker path. Ideally we
|
||||
// wouldn't have to deal with this, but until that issue is fixed we have to
|
||||
// remove the path if it's a broken symlink.
|
||||
func ensureSaneLogPath(logPath string) error {
|
||||
// If the path exists but the resolved path does not, then we have a broken
|
||||
// symlink and we need to remove it.
|
||||
fi, err := os.Lstat(logPath)
|
||||
if err != nil || fi.Mode()&os.ModeSymlink == 0 {
|
||||
// Non-existant files and non-symlinks aren't our problem.
|
||||
return nil
|
||||
}
|
||||
|
||||
_, err = os.Stat(logPath)
|
||||
if os.IsNotExist(err) {
|
||||
err = os.RemoveAll(logPath)
|
||||
if err != nil {
|
||||
return fmt.Errorf("ensureSaneLogPath remove bad logPath: %s", err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// CreateContainer creates a new container in specified PodSandbox
|
||||
func (s *Server) CreateContainer(ctx context.Context, req *pb.CreateContainerRequest) (res *pb.CreateContainerResponse, err error) {
|
||||
logrus.Debugf("CreateContainerRequest %+v", req)
|
||||
|
@ -342,6 +365,11 @@ func (s *Server) createSandboxContainer(ctx context.Context, containerID string,
|
|||
logPath = filepath.Join(sb.logDir, logPath)
|
||||
}
|
||||
|
||||
// Handle https://issues.k8s.io/44043
|
||||
if err := ensureSaneLogPath(logPath); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
logrus.WithFields(logrus.Fields{
|
||||
"sbox.logdir": sb.logDir,
|
||||
"ctr.logfile": containerConfig.LogPath,
|
||||
|
|
|
@ -255,6 +255,11 @@ func (s *Server) RunPodSandbox(ctx context.Context, req *pb.RunPodSandboxRequest
|
|||
// set log path inside log directory
|
||||
logPath := filepath.Join(logDir, id+".log")
|
||||
|
||||
// Handle https://issues.k8s.io/44043
|
||||
if err := ensureSaneLogPath(logPath); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
privileged := s.privilegedSandbox(req)
|
||||
g.AddAnnotation("ocid/metadata", string(metadataJSON))
|
||||
g.AddAnnotation("ocid/labels", string(labelsJSON))
|
||||
|
|
Loading…
Reference in a new issue