Порой нужно выполнить вот прям рестарт целого namespace в openshift или кубере.
Из таких потребностей и родился простой скрипт на bash. Комментарии как всегда в коде)
Bash
#!/bin/bash
# вторым аргументом передаем имя неймспейса
ns=$2
start() {
# Переходим в проект (неймспейс)
oc project $ns
# Создаем текстовый файл для хранения реплик
replica="dcReplica-${ns}.txt"
# Читаем построчно файл и скейлим поды согласно нему в фоне
while read line;do
dcName=$(echo ${line}|awk '{print $1}')
replica=$(echo ${line}|awk '{print $2}')
(oc scale dc $dcName --replicas=$replica)&
done < "${replica}"
wait
}
stop() {
# Тут все тоже самое, только скейлим поды в 0 и создаем файл с их исходным состоянием
oc project $ns
oc get dc |awk '{print $1,$3}' > dcReplica-${ns}.txt
for i in $(oc get dc | awk '{printf "%s",$1; printf ";%s",$3; print ""}' );do
dc_name=$(echo $i | awk -F';' '{print $1}')
dc_repl=$(echo $i | awk -F';' '{print $2}')
(oc scale dc $dc_name --replicas=0)&
done
wait
}
case $1 in
start|stop|stop_all) $1;;
restart) stop; start;;
*) echo "Usage: $0 <start|stop|restart>"; exit 1;;
esac
Собственно для k8s достаточно заменить команду oc на kubectl с некоторыми правками. Например в k8s мы не можем залочиться в namespace или использовать сокращение dc (DeployomentConfig) для скейлинга, так как такой сущности просто не в k8s.
Вот пример того же скрипта, но для kubernetes.
Bash
#!/bin/bash
# вторым аргументом передаем имя неймспейса
ns=$2
start() {
# Создаем текстовый файл для хранения реплик
replica="dcReplica-${ns}.txt"
# Читаем построчно файл и скейлим поды согласно нему в фоне
while read line;do
dcName=$(echo ${line}|awk '{print $1}')
replica=$(echo ${line}|awk '{print $2}')
(kubectl scale deploy $dcName --replicas=$replica)&
done < "${replica}"
wait
}
stop() {
# Тут все тоже самое, только скейлим поды в 0 и создаем файл с их исходным состоянием
kubectl get deploy |awk '{print $1,$3}' > dcReplica-${ns}.txt
for i in $(kubectl get deploy | awk '{printf "%s",$1; printf ";%s",$3; print ""}' );do
dc_name=$(echo $i | awk -F';' '{print $1}')
dc_repl=$(echo $i | awk -F';' '{print $2}')
(kubectl scale deploy $dc_name --replicas=0)&
done
wait
}
case $1 in
start|stop|stop_all) $1;;
restart) stop; start;;
*) echo "Usage: $0 <start|stop|restart>"; exit 1;;
esac