integ/kubernetes/k8s-pod-recovery/centos/k8s-pod-recovery.spec
Robert Church 17c1b8894d Introduce k8s pod recovery service
Add a recovery service, started by systemd on a host boot, that waits
for pod transitions to stabilize and then takes corrective action for
the following set of conditions:
- Delete to restart pods stuck in an Unknown or Init:Unknown state for
  the 'openstack' and 'monitor' namespaces.
- Delete to restart Failed pods stuck in a NodeAffinity state that occur
  in any namespace.
- Delete to restart the libvirt pod in the 'openstack' namespace when
  any of its conditions (Initialized, Ready, ContainersReady,
  PodScheduled) are not True.

This will only recover pods specific to the host where the service is
installed.

This service is installed on all controller types. There is currently no
evidence that we need this on dedicated worker nodes.

Each of these conditions should to be evaluated after the next k8s
component rebase to determine if any of these recovery action can be
removed.

Change-Id: I0e304d1a2b0425624881f3b2d9c77f6568844196
Closes-Bug: #1893977
Signed-off-by: Robert Church <robert.church@windriver.com>
2020-09-03 23:38:41 -04:00

53 lines
1.4 KiB
RPMSpec

Name: k8s-pod-recovery
Version: 1.0
Release: 0%{?_tis_dist}.%{tis_patch_ver}
Summary: Kubernetes Pod Recovery Service
License: Apache-2.0
Group: base
Packager: Wind River <info@windriver.com>
URL: unknown
Source0: k8s-pod-recovery
Source1: k8s-pod-recovery.service
Requires: /bin/bash
Requires: systemd
%description
%{summary}
%define local_dir /usr/local
%define local_sbindir %{local_dir}/sbin
%prep
%install
install -d %{buildroot}%{local_sbindir}
install -m 755 %{SOURCE0} %{buildroot}%{local_sbindir}/k8s-pod-recovery
install -p -D -m 644 %{SOURCE1} %{buildroot}%{_unitdir}/k8s-pod-recovery.service
%post
if [ $1 -eq 1 ]; then
# Package install: enable and start it
/usr/bin/systemctl enable k8s-pod-recovery.service > /dev/null 2>&1 || :
/usr/bin/systemctl start k8s-pod-recovery.service > /dev/null 2>&1 || :
else
# Package upgrade: reenable in case [Install] changes and restart to pick up
# new actions
if /usr/bin/systemctl --quiet is-enabled k8s-pod-recovery.service ; then
/usr/bin/systemctl reenable k8s-pod-recovery.service > /dev/null 2>&1 || :
/usr/bin/systemctl restart k8s-pod-recovery.service > /dev/null 2>&1 || :
fi
fi
%preun
if [ $1 -eq 0 ]; then
/usr/bin/systemctl stop k8s-pod-recovery.service > /dev/null 2>&1 || :
/usr/bin/systemctl disable k8s-pod-recovery.service > /dev/null 2>&1 || :
fi
%files
%defattr(-,root,root,-)
%{local_sbindir}/k8s-pod-recovery
%{_unitdir}/k8s-pod-recovery.service