mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 05:03:09 +00:00
Merge pull request #15260 from yifan-gu/rkt_gc_systemd_service
Auto commit by PR queue bot
This commit is contained in:
commit
dc685dfee6
@ -48,6 +48,7 @@ import (
|
|||||||
"k8s.io/kubernetes/pkg/types"
|
"k8s.io/kubernetes/pkg/types"
|
||||||
"k8s.io/kubernetes/pkg/util"
|
"k8s.io/kubernetes/pkg/util"
|
||||||
utilexec "k8s.io/kubernetes/pkg/util/exec"
|
utilexec "k8s.io/kubernetes/pkg/util/exec"
|
||||||
|
"k8s.io/kubernetes/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -799,13 +800,20 @@ func (r *Runtime) KillPod(pod *api.Pod, runningPod kubecontainer.Pod) error {
|
|||||||
r.containerRefManager.ClearRef(c.ID)
|
r.containerRefManager.ClearRef(c.ID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Touch the systemd service file to update the mod time so it will
|
||||||
|
// not be garbage collected too soon.
|
||||||
|
if err := os.Chtimes(serviceFilePath(serviceName), time.Now(), time.Now()); err != nil {
|
||||||
|
glog.Errorf("rkt: Failed to change the modification time of the service file %q: %v", serviceName, err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Since all service file have 'KillMode=mixed', the processes in
|
// Since all service file have 'KillMode=mixed', the processes in
|
||||||
// the unit's cgroup will receive a SIGKILL if the normal stop timeouts.
|
// the unit's cgroup will receive a SIGKILL if the normal stop timeouts.
|
||||||
if _, err := r.systemd.StopUnit(serviceName, "replace"); err != nil {
|
if _, err := r.systemd.StopUnit(serviceName, "replace"); err != nil {
|
||||||
|
glog.Errorf("rkt: Failed to stop unit %q: %v", serviceName, err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// Remove the systemd service file as well.
|
return nil
|
||||||
return os.Remove(serviceFilePath(serviceName))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// getPodStatus reads the service file and invokes 'rkt status $UUID' to get the
|
// getPodStatus reads the service file and invokes 'rkt status $UUID' to get the
|
||||||
@ -1079,12 +1087,39 @@ func (r *Runtime) GetContainerLogs(pod *api.Pod, containerID kubecontainer.Conta
|
|||||||
// just GC kubernetes pods.
|
// just GC kubernetes pods.
|
||||||
func (r *Runtime) GarbageCollect(gcPolicy kubecontainer.ContainerGCPolicy) error {
|
func (r *Runtime) GarbageCollect(gcPolicy kubecontainer.ContainerGCPolicy) error {
|
||||||
if err := exec.Command("systemctl", "reset-failed").Run(); err != nil {
|
if err := exec.Command("systemctl", "reset-failed").Run(); err != nil {
|
||||||
glog.Errorf("rkt: Failed to reset failed systemd services: %v", err)
|
glog.Errorf("rkt: Failed to reset failed systemd services: %v, continue to gc anyway...", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := r.runCommand("gc", "--grace-period="+gcPolicy.MinAge.String(), "--expire-prepared="+gcPolicy.MinAge.String()); err != nil {
|
if _, err := r.runCommand("gc", "--grace-period="+gcPolicy.MinAge.String(), "--expire-prepared="+gcPolicy.MinAge.String()); err != nil {
|
||||||
glog.Errorf("rkt: Failed to gc: %v", err)
|
glog.Errorf("rkt: Failed to gc: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GC all inactive systemd service files.
|
||||||
|
units, err := r.systemd.ListUnits()
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("rkt: Failed to list units: %v", err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
runningKubernetesUnits := sets.NewString()
|
||||||
|
for _, u := range units {
|
||||||
|
if strings.HasPrefix(u.Name, kubernetesUnitPrefix) && u.SubState == "running" {
|
||||||
|
runningKubernetesUnits.Insert(u.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
files, err := ioutil.ReadDir(systemdServiceDir)
|
||||||
|
if err != nil {
|
||||||
|
glog.Errorf("rkt: Failed to read the systemd service directory: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for _, f := range files {
|
||||||
|
if runningKubernetesUnits.Has(f.Name()) && f.ModTime().Before(time.Now().Add(-gcPolicy.MinAge)) {
|
||||||
|
glog.V(4).Infof("rkt: Removing inactive systemd service file: %v", f.Name())
|
||||||
|
if err := os.Remove(serviceFilePath(f.Name())); err != nil {
|
||||||
|
glog.Warningf("rkt: Failed to remove inactive systemd service file %v: %v", f.Name(), err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user