вход kubernetes на время ожидания GKE и 502 во время развертывания - PullRequest
0 голосов
/ 04 мая 2018

Мне трудно понять, почему вход на GKE возвращает 502 ошибки и время ожидания при развертывании в проекте.

Чтобы лучше понять проблему, я настроил базовое привет приложение , которое использует тот же рабочий процесс.

Вот полный манифест:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: helloapp
  labels:
    app: helloapp
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: helloapp
    spec:
      containers:
      - name: helloapp
        image: gcr.io/${GCLOUD_PROJECT_ID}/helloapp:${HELLOAPP_VERSION}
        imagePullPolicy: Always
        ports:
        - name: http-server
          containerPort: 8080

        readinessProbe:
          httpGet:
            path: /sys/health
            port: 8080

        livenessProbe:
          httpGet:
            path: /sys/health
            port: 8080

---

apiVersion: v1
kind: Service
metadata:
  name: helloapp
  labels:
    app: helloapp
spec:
  type: NodePort
  externalTrafficPolicy: Local
  ports:
    - port: 80
      targetPort: http-server
  selector:
    app: helloapp

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: helloapp-http
spec:
  backend:
    serviceName: helloapp
    servicePort: 80

, который содержит вход, сервис и настроенный зонд для контейнеров.

Приложение является простым приложением, написанным на Go .

Во время развертывания, если я блокирую входную проверку работоспособности моего приложения, и я замечаю:

HTTP/1.1 502     9.02 secs:     332 bytes ==> GET  /sys/health
HTTP/1.1 502     9.10 secs:     332 bytes ==> GET  /sys/health
HTTP/1.1 200     4.70 secs:     473 bytes ==> GET  /sys/health
HTTP/1.1 200     4.56 secs:     475 bytes ==> GET  /sys/health
HTTP/1.1 200     0.01 secs:     475 bytes ==> GET  /sys/health
HTTP/1.1 200     0.01 secs:     476 bytes ==> GET  /sys/health
HTTP/1.1 200     0.03 secs:     475 bytes ==> GET  /sys/health
HTTP/1.1 200     0.01 secs:     474 bytes ==> GET  /sys/health
HTTP/1.1 200     4.58 secs:     475 bytes ==> GET  /sys/health
HTTP/1.1 200     4.51 secs:     474 bytes ==> GET  /sys/health
HTTP/1.1 200     0.01 secs:     475 bytes ==> GET  /sys/health
HTTP/1.1 200     0.01 secs:     475 bytes ==> GET  /sys/health
HTTP/1.1 200     4.83 secs:     474 bytes ==> GET  /sys/health
HTTP/1.1 502     9.07 secs:     332 bytes ==> GET  /sys/health
HTTP/1.1 200     0.02 secs:     475 bytes ==> GET  /sys/health

Через несколько минут (обычно 5-10) он правильно останавливает и перенаправляет запросы.

Информация о кластере:

  • Kubernetes версия: 1.8.8
  • Облачная платформа Google
  • g1-маленький

1 Ответ

0 голосов
/ 08 мая 2018

Все хорошо с вашими конфигами. Похоже, у вас возникла проблема во время запуска вашего го-приложения: циклический перебор в вашем сервисе отправляет некоторые запросы незапущенному приложению в модуле, что приводит к ошибке с кодом 502.

Как долго ваше приложение запускается в модуле? Вы можете добавить initialDelaySeconds, чтобы исправить ошибку.

spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: helloapp
    spec:
      containers:
      - name: helloapp
        image: gcr.io/${GCLOUD_PROJECT_ID}/helloapp:${HELLOAPP_VERSION}
        imagePullPolicy: Always
        ports:
        - name: http-server
          containerPort: 8080

        readinessProbe:
          httpGet:
            path: /sys/health
            port: 8080
            initialDelaySeconds: 60

        livenessProbe:
          httpGet:
            path: /sys/health
            port: 8080
            initialDelaySeconds: 120
...