Kev soj ntsuam nyob hauv Kubernetes tuaj yeem txaus ntshai

Nco tseg. txhais.: Tus kws tshaj lij los ntawm Zalando, Henning Jacobs, tau rov pom cov teeb meem ntawm Kubernetes cov neeg siv kom nkag siab lub hom phiaj ntawm kev ua neej nyob (thiab kev npaj txhij) kev soj ntsuam thiab lawv siv kom raug. Yog li ntawd, nws tau sau nws cov kev xav nyob rau hauv daim ntawv no capacious, uas thaum kawg yuav dhau los ua ib feem ntawm K8s cov ntaub ntawv.

Kev soj ntsuam nyob hauv Kubernetes tuaj yeem txaus ntshai

Kev kuaj mob, paub hauv Kubernetes li kev tshawb nrhiav kev ua neej (piv txwv li, cov lus hais, "kev sim ua kom muaj sia nyob" - kwv yees li cov lus txhais.), yuav ua tau txaus ntshai heev. Kuv pom zoo kom zam lawv yog tias ua tau: qhov kev zam tsuas yog thaum lawv tsim nyog tiag tiag thiab koj paub meej txog qhov tshwj xeeb thiab qhov tshwm sim ntawm lawv siv. Daim ntawv tshaj tawm no yuav tham txog kev ua neej nyob thiab kev kuaj xyuas kev npaj txhij, thiab tseem yuav qhia rau koj txog qhov xwm txheej twg nqi nws thiab koj yuav tsum tsis txhob siv lawv.

Kuv cov npoj yaig Sandor tsis ntev los no tau tshaj tawm hauv Twitter qhov feem ntau yuam kev uas nws ntsib, suav nrog cov uas cuam tshuam txog kev siv kev npaj txhij / kev soj ntsuam kev ua neej:

Kev soj ntsuam nyob hauv Kubernetes tuaj yeem txaus ntshai

Configured tsis raug livenessProbe tuaj yeem ua rau muaj qhov hnyav hnyav (snowball kaw + lub thawv ntev ntev / daim ntawv thov pib lub sijhawm) thiab ua rau lwm yam tsis zoo xws li kev cia siab poob (saib thiab kuv tsab xov xwm tsis ntev los no hais txog kev txwv tus naj npawb ntawm kev thov hauv K3s + ACME ua ke). Nws tseem phem dua thaum qhov kev sojntsuam muaj sia nyob ua ke nrog kev kuaj mob, uas yog cov ntaub ntawv sab nraud: ib qho DB tsis ua haujlwm yuav rov pib dua tag nrho koj cov ntim!

General lus "Tsis txhob siv cov kev tshawb fawb ua neej nyob" Hauv qhov no nws tsis pab ntau, yog li cia peb saib seb qhov kev npaj txhij thiab kev kuaj xyuas lub neej yog dab tsi.

Nco tseg: Feem ntau ntawm cov kev xeem hauv qab no yog thawj zaug suav nrog Zalando cov ntaub ntawv tsim tawm sab hauv.

Kev npaj txhij thiab kev ua neej nyob

Kubernetes muab ob lub tswv yim tseem ceeb hu ua cov kev tshawb fawb txog kev ua neej nyob thiab kev tshawb nrhiav kev npaj txhij. Lawv ua qee qhov kev ua haujlwm ib ntus - xws li xa HTTP thov, qhib TCP kev sib txuas, lossis ua tiav cov lus txib hauv lub thawv - kom paub meej tias daim ntawv thov ua haujlwm raws li qhov xav tau.

Kubernetes siv npaj kev soj ntsuamkom nkag siab thaum lub thawv ntim tau npaj los txais kev khiav tsheb. Lub plhaub taum pauv tau txiav txim siab npaj siv yog tias tag nrho nws cov ntim tau npaj txhij. Ib qho kev siv cov txheej txheem no yog los tswj cov pods uas siv los ua cov backends rau Kubernetes cov kev pabcuam (thiab tshwj xeeb tshaj yog Ingress).

Kev tshawb nrhiav kev ua neej pab Kubernetes nkag siab thaum nws txog sijhawm rov pib lub thawv. Piv txwv li, xws li ib daim tshev tso cai rau koj los cuam tshuam lub kaw lus thaum daim ntawv thov tau daig hauv ib qho chaw. Rov pib lub thawv hauv lub xeev no pab tau daim ntawv thov tawm hauv av txawm tias tsis raug, tab sis nws kuj tuaj yeem ua rau cascading tsis ua haujlwm (saib hauv qab).

Yog tias koj sim xa daim ntawv thov hloov tshiab uas ua tsis tiav qhov kev kuaj xyuas kev ua neej / kev npaj txhij, nws qhov kev nthuav tawm yuav raug kaw thaum Kubernetes tos rau qhov xwm txheej Ready los ntawm tag nrho cov pods.

Piv Txwv:

Ntawm no yog ib qho piv txwv ntawm kev npaj kev soj ntsuam xyuas ib txoj hauv kev /health ntawm HTTP nrog rau qhov chaw pib (luv: 10 Seconds, timeout: 1 second, kev vam meej: 1, tsis ua hauj lwm pib:3):

# Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ описания deployment'Π°/стСка
podTemplate:
  spec:
    containers:
    - name: my-container
      # ...
      readinessProbe:
        httpGet:
          path: /health
          port: 8080

tswv yim pom zoo

  1. Rau microservices nrog HTTP endpoint (REST, thiab lwm yam) ib txwm txhais qhov kev sojntsuam npaj txhij, uas kuaj xyuas seb daim ntawv thov (pod) puas tau txais kev thauj mus los.
  2. Xyuas kom meej qhov kev sojntsuam npaj txhij npog qhov muaj ntawm qhov tseeb web server chaw nres nkoj:
    • siv cov chaw nres nkoj rau kev tswj hwm lub hom phiaj, hu ua "admin" lossis "kev tswj hwm" (piv txwv li, 9090), rau readinessProbe, xyuas kom meej tias qhov kawg nkaus tsuas yog rov OK yog tias thawj qhov chaw nres nkoj HTTP (xws li 8080) npaj tau txais kev khiav tsheb *;

      * Kuv paub tsawg kawg ib kis ntawm Zalando qhov twg qhov no tsis tshwm sim, piv txwv li. readinessProbe Kuv tau tshawb xyuas qhov chaw nres nkoj "kev tswj hwm", tab sis tus neeg rau zaub mov nws tus kheej tsis pib ua haujlwm vim muaj teeb meem thauj cov cache.

    • Txuas qhov kev sojntsuam txog kev npaj mus rau qhov chaw nres nkoj sib cais tuaj yeem ua rau qhov tseeb tias overload ntawm qhov chaw nres nkoj tseem ceeb yuav tsis cuam tshuam rau hauv kev kuaj mob (uas yog, lub pas dej ntawm lub server yog tag nrho, tab sis kev kuaj xyuas kev noj qab haus huv tseem qhia tau tias txhua yam zoo. ).
  3. Nco ntsoov tias Kev tshawb nrhiav kev npaj ua kom cov ntaub ntawv pib pib / tsiv teb tsaws;
    • Txoj hauv kev yooj yim tshaj plaws kom ua tiav qhov no yog hu rau HTTP server nkaus xwb tom qab pib ua tiav (piv txwv li, tsiv teb tsaws chaw los ntawm Flyway thiab lwm yam.); uas yog, es tsis txhob hloov qhov kev kuaj xyuas kev noj qab haus huv, tsuas yog tsis txhob pib lub web server kom txog thaum lub database migration tiav *.

      * Koj tseem tuaj yeem khiav database migrations los ntawm init ntim sab nraum lub pod. Kuv tseem yog tus kiv cua ntawm daim ntawv thov tus kheej, uas yog, cov uas nyob rau hauv daim ntawv thov ntim paub yuav ua li cas coj cov ntaub ntawv mus rau hauv lub xeev xav tau yam tsis muaj kev sib koom tes sab nraud.

  4. Siv httpGet rau kev npaj tshuaj ntsuam xyuas los ntawm cov chaw kuaj mob ib txwm muaj (piv txwv li, /health).
  5. Nkag siab qhov kev kuaj xyuas tsis raug (interval: 10s, timeout: 1s, successThreshold: 1, failureThreshold: 3):
    • lub neej ntawd xaiv txhais tau hais tias lub pod yuav dhau los tsis npaj tom qab li ntawm 30 vib nas this (3 ua tsis tau tejyam kuaj xyuas tsis zoo).
  6. Siv qhov chaw nres nkoj cais rau "admin" lossis "kev tswj hwm" yog tias cov txheej txheem thev naus laus zis (xws li Java / Caij nplooj ntoos hlav) tso cai rau nws, cais kev noj qab haus huv thiab kev ntsuas kev tswj xyuas los ntawm kev khiav tsheb tsis tu ncua:
    • tab sis tsis txhob hnov ​​qab txog point 2.
  7. Yog tias tsim nyog, kev soj ntsuam kev npaj tuaj yeem siv los ua kom sov / thauj cov cache thiab xa rov qab 503 tus lej cai kom txog thaum lub thawv sov:

Ceev faj

  1. Tsis txhob cia siab rau sab nraud (xws li cov ntaub ntawv warehouses) thaum khiav kev npaj txhij / kev sim ua neej nyob - qhov no tuaj yeem ua rau cascading tsis ua haujlwm:
    • Ua piv txwv, cia peb ua ib qho kev pabcuam REST nrog 10 pods nyob ntawm ib qho Postgres database: thaum daim tshev nyob ntawm kev sib txuas ua haujlwm rau DB, tag nrho 10 pods yuav ua tsis tau yog tias muaj kev ncua ntawm lub network / DB sab - feem ntau nws txhua qhov kawg yuav phem tshaj qhov nws ua tau;
    • Thov nco ntsoov tias Cov Ntaub Ntawv Caij Nplooj Ntoos Hlav tshawb xyuas cov ntaub ntawv sib txuas los ntawm lub neej ntawd *;

      * Qhov no yog tus cwj pwm tsis zoo ntawm Spring Data Redis (tsawg kawg yog lub sijhawm kawg kuv tau kuaj), uas ua rau "kev puas tsuaj loj" tsis ua haujlwm: thaum Redis tsis muaj sijhawm luv, tag nrho cov pods "crashed".

    • "sab nraud" hauv qhov kev nkag siab no tuaj yeem txhais tau tias lwm cov pods ntawm tib daim ntawv thov, uas yog, qhov zoo tshaj plaws daim tshev yuav tsum tsis txhob nyob ntawm lub xeev ntawm lwm cov pods ntawm tib pawg los tiv thaiv kev sib tsoo:
      • Cov txiaj ntsig tuaj yeem sib txawv rau cov ntawv thov nrog lub xeev faib (piv txwv li, hauv-nco caching hauv pods).
  2. Tsis txhob siv qhov kev sojntsuam muaj sia rau cov pods (tshwj xeeb yog rooj plaub thaum lawv tsim nyog tiag tiag thiab koj paub meej txog qhov tshwj xeeb thiab qhov tshwm sim ntawm lawv siv):
    • Kev sojntsuam muaj sia tuaj yeem pab rov qab cov thawv ntim khoom, tab sis txij li thaum koj muaj kev tswj hwm tag nrho koj daim ntawv thov, tej yam zoo li cov txheej txheem dai thiab kev tuag yuav tsum tsis txhob tshwm sim: qhov zoo tshaj plaws lwm txoj kev yog txhob txwm tsoo daim ntawv thov thiab coj rov qab mus rau lub xeev ruaj khov;
    • Kev sojntsuam tsis ua haujlwm yuav ua rau lub thawv rov pib dua, yog li muaj peev xwm ua rau muaj qhov tshwm sim ntawm kev thauj khoom cuam tshuam: rov pib lub thawv yuav ua rau poob qis (tsawg kawg rau lub sijhawm pib ntawm daim ntawv thov, hais 30-kawg vib nas this), ua rau qhov yuam kev tshiab , nce lub nra ntawm lwm lub ntim thiab ua rau muaj qhov ua tsis tiav, thiab lwm yam .;
    • Kev txheeb xyuas kev ua neej nyob ua ke nrog kev vam khom sab nraud yog qhov ua tsis tau zoo tshaj plaws ua ke, hem tias yuav ua tsis tiav: kev ncua me ntsis ntawm sab database yuav ua rau rov pib dua ntawm tag nrho koj cov ntim!
  3. Parameters ntawm kev ua neej nyob thiab kev npaj txhij yuav tsum sib txawv:
    • Koj tuaj yeem siv qhov kev sojntsuam txog kev muaj sia nyob nrog tib yam kev kuaj xyuas kev noj qab haus huv, tab sis muaj cov lus teb siab dua (failureThreshold), piv txwv li, muab cov xwm txheej tsis npaj tom qab 3 qhov kev sim thiab xav tias qhov kev sojntsuam muaj sia nyob tau ua tsis tiav tom qab 10 sim;
  4. Tsis txhob siv exec checks, txij li lawv tau txuam nrog cov teeb meem paub uas ua rau pom cov txheej txheem zombie:

Txoj kev xaus

  • Siv cov cuab yeej npaj txhij los txiav txim siab thaum twg lub plhaub taum npaj tau txais kev khiav tsheb.
  • Siv cov kev sojntsuam muaj sia tsuas yog thaum lawv xav tau tiag tiag.
  • Kev siv tsis raug ntawm kev npaj txhij / kev sojntsuam muaj sia tuaj yeem ua rau txo qhov muaj thiab ua tsis tiav.

Kev soj ntsuam nyob hauv Kubernetes tuaj yeem txaus ntshai

Cov ntaub ntawv ntxiv ntawm lub ncauj lus

Hloov tshiab No.1 ntawm 2019-09-29

Hais txog init ntim rau database migration: Cov lus hauv qab ntxiv.

EJ ceeb toom kuv hais txog PDB: ib qho ntawm cov teeb meem nrog kev kuaj xyuas lub neej yog qhov tsis muaj kev sib koom tes ntawm cov pods. Kubernetes muaj Pod Disruption Budgets (PDB) txhawm rau txwv tus naj npawb ntawm kev ua tsis tiav ib qho kev thov tuaj yeem ntsib, tab sis cov tshev tsis suav nrog PDB. Qhov zoo tshaj plaws, peb tuaj yeem qhia K8s rau "Restart ib lub pod yog tias nws qhov kev xeem tsis ua haujlwm, tab sis tsis txhob rov pib dua txhua yam kom tsis txhob ua qhov phem dua."

Bryan muab nws zoo kawg nkaus: "Siv kev soj ntsuam kev ua neej nyob thaum koj paub tseeb tias dab tsi qhov zoo tshaj plaws ua yog tua daim ntawv thov"(dua, tsis txhob nqa mus).

Kev soj ntsuam nyob hauv Kubernetes tuaj yeem txaus ntshai

Hloov tshiab No.2 ntawm 2019-09-29

Hais txog kev nyeem cov ntaub ntawv ua ntej siv: Kuv tsim qhov kev thov sib xws (feature thov) ntxiv cov ntaub ntawv hais txog kev sojntsuam muaj sia.

PS los ntawm tus txhais lus

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib