Puncte:0

Fereastra de eroare de implementare GKE Kubernetes albastru/verde

drapel ua

Avem un cluster de containere cu modul: Autopilot care rulează în GKE. În prezent, primim erori într-o fereastră scurtă când efectuăm o implementare „albastru/verde” de la Jenkins.

Când trecem serviciul la noua implementare, există o fereastră sub 100 ms care va genera următoarea eroare.

<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>

Presupun că acest lucru se datorează faptului că unul dintre pod-uri nu a fost pornit încă, dar încă începe să direcționeze traficul către implementare.

Verificăm dacă implementarea este lansată după ce implementarea este creată astfel.

Cu pluginul Jenkins: https://github.com/jenkinsci/google-kubernetes-engine-plugin Avem verifică implementările atribut setat la Adevărat.

Etapa([
  $class: „KubernetesEngineBuilder”,
  projectId: env.PROJECT_ID,
  clusterName: env.CLUSTER_NAME,
  spațiu de nume: env.NAMESPACE,
  locație: env.CLUSTER_LOCATION,
  manifestPattern: „./apps/app/deployments/green.yaml”,
  credentialsId: env.APP_CREDENTIALS_ID,
  verifyDeployments: adevărat
])

Am inclus și o a doua verificare pentru a verifica cu adevărat dacă implementarea este lansată. Aparent, pluginul Jenkins nu pare să facă acest lucru în mod foarte fiabil.

starea lansării kubectl implementare app-deployment --namespace app-namespace --watch --timeout=5m

De asemenea, am observat că se poate întâmpla ca implementarea să poată eroa și să fie creat un serviciu oricum un pas ulterior, care va bloca aplicația, dar acesta este un alt caz pe care trebuie să ne dăm seama cum să rezolvăm, probabil legat de pluginul Jenkins.

Al nostru implementare YAML arata asa:

apiVersion: apps/v1
fel: Desfăşurare
metadate:
  nume: aplicație-albastru
  spațiu de nume: aplicație
  etichete: {app.kubernetes.io/managed-by: graphite-jenkins-gke}
specificație:
  progresDeadlineSecunde: 600
  replici: 3
  selector:
    matchLabels: {app: app-blue}
  șablon:
    metadate:
      etichete: {app: app-blue}
    specificație:
      automountServiceAccountToken: adevărat
      containere:
        imagine: eu.gcr.io/container-registry-project/app:latest
        imagePullPolicy: Întotdeauna
        nume: aplicație
        porturi:
        - {containerPort: 8080, nume: http, protocol: TCP}
        livenessProbe:
          httpGet:
            cale: /sănătate
            port: 8080
          initialDelaySeconds: 15
          perioadaSecunde: 10
        ReadinessProbe:
          httpGet:
            cale: /
            port: 8080
          initialDelaySeconds: 15
          perioadaSecunde: 5
        resurse:
          limite: {cpu: 500m, stocare efemeră: 1Gi, memorie: 512Mi}
          solicitări: {cpu: 500m, efemer-storage: 1Gi, memorie: 512Mi}
        securityContext:
          allowPrivilegeEscalation: false
          capacitati:
            drop: [NET_RAW]
          privilegiat: fals
          readOnlyRootFilesystem: false
          runAsNonRoot: false
      restartPolicy: Întotdeauna
      schedulerName: planificator implicit
      serviceCont: app
      serviceAccountName: app

Al nostru serviciu YAML arata asa:

apiVersion: v1
fel: Serviciu
metadate:
  nume: serviciul de aplicație
  spațiu de nume: aplicație
specificație:
  selector:
    aplicație: aplicație-albastru
  porturi:
    - protocol: TCP
      port: 80
      targetPort: 8080

Pur și simplu comutăm selectorul - aplicație: în serviciu, la implementarea aplicației-albastru sau a aplicației-verde pentru a trece la noua implementare, dar primim întotdeauna o mică fereastră de erori când facem acest lucru, oricine are idee ce suntem faci gresit?

Sergiusz avatar
drapel lv
Ați încercat să măriți initialDelay pe readinessProbe?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.