Рейтинг:0

Сине-зеленое окно ошибки развертывания GKE Kubernetes

флаг ua

У нас есть кластер контейнеров с режимом: автопилот, работающий в GKE. В настоящее время мы получаем сообщения об ошибках в коротком окне при выполнении «сине-зеленого» развертывания от Jenkins.

Когда мы переключаем службу на новое развертывание, появляется окно менее 100 мс, которое вызывает следующую ошибку.

<html><head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>502 Server Error</title>
</head>
<body text=#000000 bgcolor=#ffffff>
<h1>Error: Server Error</h1>
<h2>The server encountered a temporary error and could not complete your request.<p>Please try again in 30 seconds.</h2>
<h2></h2>
</body></html>

Я предполагаю, что это связано с тем, что один из модулей еще не запущен, но все еще начинает направлять трафик в развертывание.

Мы проверяем, что развертывание развернуто после создания развертывания таким образом.

С плагином Jenkins: https://github.com/jenkinsci/google-kubernetes-engine-plugin У нас есть Верифидеплойментс атрибут установлен на истинный.

шаг([
  $класс: 'КубернетесEngineBuilder',
  идентификатор проекта: env.PROJECT_ID,
  имя_кластера: env.CLUSTER_NAME,
  пространство имен: env.NAMESPACE,
  местоположение: env.CLUSTER_LOCATION,
  manifestPattern: './apps/app/deployments/green.yaml',
  учетные данные: env.APP_CREDENTIALS_ID,
  Веридеплойментс: правда
])

Мы также включили вторую проверку, чтобы действительно убедиться, что развертывание развернуто. По-видимому, плагин Jenkins не делает этого очень надежно.

kubectl развертывание статуса развертывания app-deployment --namespace app-namespace --watch --timeout=5m

Мы также заметили, что может случиться так, что развертывание может привести к ошибке, и служба все равно будет создана на последующем шаге, что приведет к сбою приложения, но это еще один случай, который нам нужно выяснить, как решить, вероятно, связанный с плагином Jenkins.

Наш развертывание YAML выглядит так:

apiVersion: приложения/v1
вид: развертывание
метаданные:
  имя: приложение-синий
  пространство имен: приложение
  ярлыки: {app.kubernetes.io/managed-by: graphite-jenkins-gke}
спецификация:
  progressDeadlineSeconds: 600
  реплики: 3
  селектор:
    matchLabels: {приложение: app-blue}
  шаблон:
    метаданные:
      labels: {приложение: app-blue}
    спецификация:
      automountServiceAccountToken: правда
      контейнеры:
        изображение: eu.gcr.io/container-registry-project/app:latest
        imagePullPolicy: всегда
        имя: приложение
        порты:
        - {containerPort: 8080, имя: http, протокол: TCP}
        живостьзонд:
          httpПолучить:
            путь: /здоровье
            порт: 8080
          начальные секунды задержки: 15
          периодСекунды: 10
        готовностьзонд:
          httpПолучить:
            дорожка: /
            порт: 8080
          начальные секунды задержки: 15
          периодСекунды: 5
        Ресурсы:
          ограничения: {процессор: 500 м, эфемерное хранилище: 1Gi, память: 512Mi}
          запросы: {процессор: 500 м, эфемерное хранилище: 1 ГБ, память: 512 МБ}
        безопасностьКонтекст:
          allowPrivilegeEscalation: ложь
          возможности:
            падение: [NET_RAW]
          привилегированный: ложь
          readOnlyRootFilesystem: ложь
          рунаснонрут: ложь
      политика перезапуска: всегда
      schedulerName: планировщик по умолчанию
      serviceAccount: приложение
      serviceAccountName: приложение

Наш служба YAML выглядит так:

апиВерсия: v1
вид: сервис
метаданные:
  имя: служба приложений
  пространство имен: приложение
спецификация:
  селектор:
    приложение: синее приложение
  порты:
    - протокол: TCP
      порт: 80
      целевой порт: 8080

Мы просто переключаем селектор - приложение: в сервисе на приложение-синий или приложение-зеленый развертывание, чтобы переключиться на новое развертывание, но всегда получаем небольшое окно ошибок при этом, кто-нибудь знает, что мы делаешь неправильно?

Sergiusz avatar
флаг lv
Вы пытались увеличить initialDelay для readinessProbe?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.