DevOps на Openshift: Проверка автоскалирования pod из Jenkins pipeline

Эта статья является продолжением цикла DevOps на Openshift. В ней будет рассмотрена проверка автоматического горизонтального масштабирования приложений, проводимая прямо внутри Jenkins pipeline. 

В этом демонстрационном проекте используется приложение openshift-tasks, в котором есть веб-интерфейс и REST API. Один из методов REST API данного приложения позволяет искусственно, на время, увеличить нагрузку CPU в контейнере с запущенным приложением. Этим мы и воспользуемся. Сперва необходимо создать горизонтальный автоскейлер (HorizontalPodAutoscaler):

sh "oc autoscale dc/tasks --min 1 --max 2 --cpu-percent=30 -n ${env.DEV_PROJECT}"

Далее делаем вызов REST API:

sh "curl -X GET http://${devHost}/ws/demo/load/120"

Следующим шагом проверяем, в ограниченном по-времени цикле, увеличение количества pod:

def dc = openshift.selector("dc", "tasks")
def count = 1
while (count < 40) {
    if (count > 30) {
        error "Pipeline aborted due to Integration tests fail"
    }
    if (dc.object().spec.replicas < 2) {
        echo "Sleep....."
        sleep 10
        count++;
    } else {
        break;
    }
}

и ещё одним циклом делаем проверку запуска приложения:

count = 1
while (count < 40) {
    if (count > 30) {
        error "Pipeline aborted due to Integration tests fail"
    }
    sh "oc get dc tasks '-o=go-template={{ .status.readyReplicas }}' -n ${env.DEV_PROJECT} > devReplicas"
    def devReplicas = readFile('devReplicas').trim()
    println("devReplicas  = ${devReplicas}")
    if (devReplicas != "2") {
        echo "Sleep....."
        sleep 10
        count++;
    } else {
        break;
    }
}

Итогом работы этого функционала является автоматизированная проверка работы запуска второго контейнера при увеличении утилизации CPU.

Полное описание примера и код можно подсмотреть вот тут.

Дальше - больше...

 

10.12.2018