mirror of
https://github.com/aljazceru/kata-containers.git
synced 2026-01-04 23:14:19 +01:00
Kubelet would cleanup the pod cgroup resources and kill the processes in the pod cgroups when it detected all of the containers in a pod exited, thus shimv2 should close the hypervisor process once the podsandbox container exited, otherwise, the hypervisor process would be killed by kubelet and made shimv2 failed to shutdown the sandbox. Fixes:#1672 Signed-off-by: lifupan <lifupan@gmail.com>
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
// Copyright (c) 2018 HyperHQ Inc.
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
|
|
package containerdshim
|
|
|
|
import (
|
|
"context"
|
|
"path"
|
|
|
|
"github.com/containerd/containerd/mount"
|
|
"github.com/kata-containers/runtime/pkg/katautils"
|
|
"github.com/kata-containers/runtime/virtcontainers/types"
|
|
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func deleteContainer(ctx context.Context, s *service, c *container) error {
|
|
if !c.cType.IsSandbox() {
|
|
status, err := s.sandbox.StatusContainer(c.id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if status.State.State != types.StateStopped {
|
|
_, err = s.sandbox.StopContainer(c.id)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if _, err = s.sandbox.DeleteContainer(c.id); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// Run post-stop OCI hooks.
|
|
if err := katautils.PostStopHooks(ctx, *c.spec, s.sandbox.ID(), c.bundle); err != nil {
|
|
return err
|
|
}
|
|
|
|
if s.mount {
|
|
rootfs := path.Join(c.bundle, "rootfs")
|
|
if err := mount.UnmountAll(rootfs, 0); err != nil {
|
|
logrus.WithError(err).Warn("failed to cleanup rootfs mount")
|
|
}
|
|
}
|
|
|
|
delete(s.containers, c.id)
|
|
|
|
return nil
|
|
}
|