Add custom apps in the k8s-pod-recovery service

At startup, there might be pods that are left in unknown states.
The k8s-pod-recovery service takes care of
recovering these unknown pods in specific namespaces.
To fix this for custom apps that are not part of starlingx,
we modify the service to look into the /etc/k8s-post-recovery.d
directory for conf files. Any app that needs to be recovered by this
service will have to create a conf file e.g the app-1 will create
/etc/k8s-post-recovery.d/APP_1.conf which will contain the following:
namespace=app-1-namespace

Closes-Bug: 1917781
Signed-off-by: Mihnea Saracin <Mihnea.Saracin@windriver.com>
Change-Id: I8febdb685d506cff3c34946163612cafdab3e3a8
This commit is contained in:
Mihnea Saracin 2021-03-04 17:36:54 +02:00
parent 3d8ffbc2e8
commit 852ec5ed53
2 changed files with 10 additions and 0 deletions

View File

@ -21,6 +21,7 @@
export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin export PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
export KUBECONFIG=/etc/kubernetes/admin.conf export KUBECONFIG=/etc/kubernetes/admin.conf
CONF_DIR=/etc/k8s-post-recovery.d
SLEEP_DELAY_SEC=15 SLEEP_DELAY_SEC=15
NAME=$(basename $0) NAME=$(basename $0)
@ -100,6 +101,12 @@ function _unknown_pods {
# Target specific namespaces and pods on this host # Target specific namespaces and pods on this host
SUPPORTED_NAMESPACES=('openstack' 'monitor') SUPPORTED_NAMESPACES=('openstack' 'monitor')
shopt -s nullglob
for conf_file in ${CONF_DIR}/*.conf; do
grep -q '^namespace=' $conf_file || continue
SUPPORTED_NAMESPACES+=($(grep '^namespace=' $conf_file | awk -F '=' '{print $2}'))
done
if [ "$1" == 'recover' ]; then if [ "$1" == 'recover' ]; then
# Recovers pods that are: Running/Unknown and Pending/Init:Unknown # Recovers pods that are: Running/Unknown and Pending/Init:Unknown
for ns in ${SUPPORTED_NAMESPACES[@]}; do for ns in ${SUPPORTED_NAMESPACES[@]}; do

View File

@ -17,10 +17,12 @@ Requires: systemd
%define local_dir /usr/local %define local_dir /usr/local
%define local_sbindir %{local_dir}/sbin %define local_sbindir %{local_dir}/sbin
%define k8s_recovery_conf_dir /etc/k8s-post-recovery.d
%prep %prep
%install %install
install -d %{buildroot}%{k8s_recovery_conf_dir}
install -d %{buildroot}%{local_sbindir} install -d %{buildroot}%{local_sbindir}
install -m 755 %{SOURCE0} %{buildroot}%{local_sbindir}/k8s-pod-recovery install -m 755 %{SOURCE0} %{buildroot}%{local_sbindir}/k8s-pod-recovery
install -p -D -m 644 %{SOURCE1} %{buildroot}%{_unitdir}/k8s-pod-recovery.service install -p -D -m 644 %{SOURCE1} %{buildroot}%{_unitdir}/k8s-pod-recovery.service
@ -50,3 +52,4 @@ fi
%defattr(-,root,root,-) %defattr(-,root,root,-)
%{local_sbindir}/k8s-pod-recovery %{local_sbindir}/k8s-pod-recovery
%{_unitdir}/k8s-pod-recovery.service %{_unitdir}/k8s-pod-recovery.service
%{k8s_recovery_conf_dir}