Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Abril 8 sa komperensya Saint HighLoad++ 2019, isip kabahin sa seksyon sa "DevOps and Operations", usa ka report nga "Pagpalapad ug pagpuno sa Kubernetes" gihatag, sa pagmugna diin ang tulo ka mga empleyado sa kompanya sa Flant miapil. Niini, naghisgot kami bahin sa daghang mga sitwasyon diin gusto namon nga mapalapad ug madugangan ang mga kapabilidad sa Kubernetes, apan kung diin wala kami nakit-an nga andam ug yano nga solusyon. Kami adunay gikinahanglan nga mga solusyon sa porma sa mga proyekto sa Open Source, ug kini nga pakigpulong gipahinungod usab kanila.

Pinaagi sa tradisyon, nalipay kami sa pagpresentar video sa report (50 ka minuto, labi pa ka impormasyon kaysa sa artikulo) ug ang panguna nga summary sa porma sa teksto. Lakaw!

Core ug mga pagdugang sa K8s

Giusab sa Kubernetes ang industriya ug mga pamaagi sa administrasyon nga dugay nang natukod:

  • Salamat sa iya mga abstraction, wala na kami naglihok nga adunay mga konsepto sama sa pag-set up sa usa ka config o pagpadagan sa usa ka command (Chef, Ansible...), apan gigamit ang paggrupo sa mga sudlanan, serbisyo, ug uban pa.
  • Makaandam kami mga aplikasyon nga wala maghunahuna bahin sa mga nuances sa piho nga site, diin kini ilunsad: hubo nga metal, panganod sa usa sa mga tighatag, ug uban pa.
  • Uban sa K8s dili ka na mas daling ma-access labing maayo nga mga praktis sa pag-organisar sa imprastraktura: mga teknik sa pag-scaling, pag-ayo sa kaugalingon, pagtugot sa sayup, ug uban pa.

Bisan pa, siyempre, ang tanan dili kaayo hapsay: Ang Kubernetes nagdala usab sa kaugalingon nga bag-ong mga hagit.

Kubernetes dili usa ka kombinasyon nga nagsulbad sa tanan nga mga problema sa tanan nga tiggamit. Core Ang Kubernetes ang responsable lamang sa usa ka set sa mga minimum nga gikinahanglan nga mga gimbuhaton nga anaa sa tanan cluster:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Ang Kubernetes core naghubit sa usa ka batakang hugpong sa mga primitives alang sa paggrupo sa mga sudlanan, pagdumala sa trapiko, ug uban pa. Naghisgot kami bahin kanila sa mas detalyado sa report 2 ka tuig na ang milabay.

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Sa laing bahin, ang K8s nagtanyag ug dagkong mga oportunidad sa pagpalapad sa anaa nga mga gimbuhaton, nga makatabang sa pagsira sa uban - espesipiko - panginahanglan sa user. Ang mga pagdugang sa Kubernetes mao ang responsibilidad sa mga tagdumala sa cluster, kinsa kinahanglan nga mag-install ug mag-configure sa tanan nga gikinahanglan aron makuha ang ilang cluster "sa husto nga porma" [aron masulbad ang ilang piho nga mga problema]. Unsang matanga sa mga pagdugang kini? Atong tan-awon ang pipila ka mga pananglitan.

Mga pananglitan sa mga add-on

Kung na-install na ang Kubernetes, matingala kita nga ang networking nga gikinahanglan kaayo alang sa interaksyon sa mga pod sa sulod sa usa ka node ug sa taliwala sa mga node wala molihok sa iyang kaugalingon. Ang Kubernetes kernel dili garantiya sa gikinahanglan nga mga koneksyon; hinoon, kini nagtino sa network interface (CNI) para sa ikatulong partido nga mga add-on. Kinahanglan natong i-install ang usa niini nga mga add-on, nga maoy responsable sa configuration sa network.

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Ang usa ka suod nga pananglitan mao ang mga solusyon sa pagtipig sa datos (lokal nga disk, network block device, Ceph...). Sa sinugdan sila anaa sa kinauyokan, apan sa pag-abot CSI ang sitwasyon nausab sa usa ka butang nga susama sa gihulagway na: ang interface anaa sa Kubernetes, ug ang pagpatuman niini anaa sa mga module sa ikatulo nga partido.

Ang ubang mga pananglitan naglakip sa:

  • Ingress- mga tigkontrol (tan-awa ang ilang pagrepaso sa atong bag-o nga artikulo).
  • sertipiko-manedyer:

    Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

  • Mga operator usa ka tibuok klase sa mga add-on (nga naglakip sa gihisgotan nga cert-manager), ilang gihubit ang primitive(s) ug controller(s). Ang lohika sa ilang trabaho limitado lamang sa atong imahinasyon ug nagtugot kanato sa paghimo sa andam na nga mga sangkap sa imprastraktura (pananglitan, usa ka DBMS) ngadto sa mga primitives, nga mas sayon ​​​​nga gamiton (kaysa sa usa ka set sa mga sudlanan ug sa ilang mga setting). Daghang mga operator ang nasulat - bisan kung daghan sa kanila ang dili pa andam alang sa produksiyon, kini usa ra ka oras:

    Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

  • Mga sukatan - laing ilustrasyon kung giunsa pagbulag sa Kubernetes ang interface (Metrics API) gikan sa pagpatuman (mga third-party nga add-on sama sa Prometheus adapter, Datadog cluster agent...).
  • Sa monitoring ug estadistika, diin sa praktis kita kinahanglan dili lamang Prometheus ug Grafana, apan usab kube-state-metrics, node-exporter, ug uban pa.

Ug kini dili usa ka kompleto nga lista sa mga pagdugang ... Pananglitan, sa kompanya sa Flant nga among gi-install karon 29 dugang (nga ang tanan nagmugna ug total nga 249 ka Kubernetes nga mga butang). Sa yanong pagkasulti, dili nato makita ang kinabuhi sa usa ka pungpong nga walay mga pagdugang.

Automation

Gidisenyo ang mga operator aron ma-automate ang naandang mga operasyon nga atong masugatan kada adlaw. Ania ang tinuod nga kinabuhi nga mga pananglitan diin ang pagsulat sa usa ka operator mahimong usa ka maayo kaayo nga solusyon:

  1. Adunay usa ka pribado (i.e. nanginahanglan usa ka pag-login) nga rehistro nga adunay mga imahe alang sa aplikasyon. Gituohan nga ang matag pod gihatagan usa ka espesyal nga sekreto nga nagtugot sa pag-authenticate sa rehistro. Ang among tahas mao ang pagsiguro nga kini nga sekreto makit-an sa namespace aron ang mga pod maka-download sa mga imahe. Mahimong adunay daghang mga aplikasyon (ang matag usa kinahanglan usa ka sekreto), ug kini mapuslanon nga kanunay nga i-update ang mga sekreto sa ilang kaugalingon, mao nga ang kapilian sa pagbutang sa mga sekreto pinaagi sa kamot giwagtang. Dinhi diin ang operator moabut aron sa pagluwas: naghimo kami usa ka controller nga maghulat nga makita ang namespace ug, base sa kini nga panghitabo, magdugang usa ka sekreto sa namespace.
  2. Himoa nga pinaagi sa default access gikan sa pods ngadto sa Internet gidili. Apan usahay kini gikinahanglan: lohikal alang sa mekanismo sa pagtugot sa pag-access nga molihok nga yano, nga wala magkinahanglan ug piho nga kahanas, pananglitan, pinaagi sa presensya sa usa ka piho nga label sa namespace. Sa unsang paagi makatabang kanato ang operator dinhi? Gibuhat ang usa ka controller nga naghulat nga makita ang label sa namespace ug gidugang ang angay nga palisiya alang sa pag-access sa Internet.
  3. Usa ka susama nga sitwasyon: pananglit kinahanglan namon nga magdugang usa ka piho buling, kon kini adunay susama nga label (nga adunay usa ka matang sa prefix). Ang mga aksyon sa operator klaro ...

Sa bisan unsang cluster, ang naandan nga mga buluhaton kinahanglan masulbad, ug husto mahimo kini gamit ang mga operator.

Pagsumaryo sa tanan nga mga istorya nga gihulagway, miabut kami sa konklusyon nga para sa komportable nga trabaho sa Kubernetes imong gikinahanglan: A) i-install ang mga add-on, b) pagpalambo sa mga operator (alang sa pagsulbad sa adlaw-adlaw nga mga buluhaton sa admin).

Giunsa pagsulat ang usa ka pahayag alang sa Kubernetes?

Sa kinatibuk-an, ang laraw yano ra:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

... apan kini nahimo nga:

  • Ang Kubernetes API kay dili importante nga butang nga nagkinahanglan ug daghang panahon aron ma-master;
  • Ang pagprograma dili usab para sa tanan (ang Go nga pinulongan gipili isip pinalabi nga pinulongan tungod kay adunay espesyal nga gambalay alang niini - Operator SDK);
  • Ang kahimtang parehas sa balangkas mismo.

Bottom line: sa pagsulat sa usa ka controller (operator) kinahanglan paggasto og mahinungdanong mga kapanguhaan sa pagtuon sa materyal. Makataronganon kini alang sa "dako" nga mga operator - ingnon ta, alang sa MySQL DBMS. Apan kung atong hinumdoman ang mga pananglitan nga gihulagway sa ibabaw (pagbutyag sa mga sekreto, pag-access sa mga pod sa Internet...), nga gusto usab natong buhaton sa husto, nan atong masabtan nga ang paningkamot nga gigasto labaw pa sa resulta nga atong gikinahanglan karon:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Sa kinatibuk-an, usa ka problema ang mitungha: paggasto og daghang mga kapanguhaan ug pangitaa ang husto nga himan alang sa pagsulat sa mga pahayag, o buhata kini sa kinaraan nga paagi (apan dali). Aron masulbad kini - aron makit-an ang usa ka pagkompromiso tali sa kini nga mga grabe - naghimo kami sa among kaugalingon nga proyekto: shell-operator (tan-awa usab ang iyang bag-o nga pahibalo sa hub).

Shell-operator

Giunsa niya pagtrabaho? Ang cluster adunay pod nga adunay usa ka Go binary nga adunay shell-operator. Sunod niini usa ka set sa mga kaw-it (dugang mga detalye bahin kanila - tan-awa sa ubos). Ang shell-operator mismo nag-subscribe sa pipila mga panghitabo sa Kubernetes API, sa diha nga kini naglansad sa katugbang nga mga kaw-it.

Giunsa pagkahibalo sa shell-operator kung unsang mga kaw-it ang tawagan kung unsang mga panghitabo? Kini nga impormasyon gipasa ngadto sa shell-operator pinaagi sa mga kaw-it sa ilang kaugalingon, ug sila nagbuhat niini sa yano kaayo.

Ang hook usa ka Bash script o bisan unsang uban nga executable file nga modawat sa usa ka argumento --config ug motubag sa JSON. Ang ulahi nagtino kung unsang mga butang ang interesado niini ug kung unsang mga panghitabo (alang niini nga mga butang) ang kinahanglan tubagon:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Akong iilustrar ang pagpatuman sa shell-operator sa usa sa among mga pananglitan - pagkadunot sa mga sekreto alang sa pag-access sa usa ka pribadong rehistro nga adunay mga hulagway sa aplikasyon. Kini naglangkob sa duha ka yugto.

Praktisa: 1. Pagsulat og kaw-it

Una sa tanan, sa kaw-it atong iproseso --config, nga nagpakita nga kami interesado sa mga namespace, ug ilabina, ang panahon sa ilang paglalang:

[[ $1 == "--config" ]] ; then
  cat << EOF
{
  "onKubernetesEvent": [
    {
      "kind": "namespace",
      "event": ["add"]
    }
  ]
}
EOF
…

Unsa kaha ang hitsura sa lohika? Simple usab:

…
else
  createdNamespace=$(jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH)
  kubectl create -n ${createdNamespace} -f - << EOF
Kind: Secret
...
EOF
fi

Ang una nga lakang mao ang pagpangita kung unsang namespace ang gibuhat, ug ang ikaduha mao ang paghimo niini gamit kubectl sekreto para niining namespace.

Praktisa: 2. Pag-assemble sa imahe

Ang nahabilin mao ang pagpasa sa gibuhat nga kaw-it sa shell-operator - unsaon pagbuhat niini? Ang shell-operator mismo moabut ingon usa ka imahe sa Docker, mao nga ang among tahas mao ang pagdugang sa hook sa usa ka espesyal nga direktoryo sa kini nga imahe:

FROM flant/shell-operator:v1.0.0-beta.1
ADD my-handler.sh /hooks

Ang nahabilin mao ang pagtigum niini ug pagduso niini:

$ docker build -t registry.example.com/my-operator:v1 .
$ docker push registry.example.com/my-operator:v1

Ang katapusan nga paghikap mao ang pag-deploy sa imahe sa cluster. Aron mahimo kini, magsulat kita deployment:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-operator
spec:
  template:
    spec:
      containers:
      - name: my-operator
        image: registry.example.com/my-operator:v1 # 1
      serviceAccountName: my-operator              # 2

Adunay duha ka punto nga hatagan pagtagad:

  1. timailhan sa bag-ong gibuhat nga larawan;
  2. Kini usa ka bahin sa sistema nga (sa labing gamay) nanginahanglan mga katungod sa pag-subscribe sa mga panghitabo sa Kubernetes ug paggahin sa mga sekreto sa mga namespace, mao nga maghimo kami usa ka ServiceAccount (ug usa ka hugpong sa mga lagda) alang sa kaw-it.

Resulta - nasulbad namo ang among problema mga paryente para sa mga Kubernetes sa paagi nga makamugna ug operator para sa pagkadunot sa mga sekreto.

Ang ubang mga bahin sa shell-operator

Aron limitahan ang mga butang sa imong gipili nga tipo nga magamit sa kaw-it, sila mahimong masala, pagpili sumala sa pipila ka mga label (o paggamit matchExpressions):

"onKubernetesEvent": [
  {
    "selector": {
      "matchLabels": {
        "foo": "bar",
       },
       "matchExpressions": [
         {
           "key": "allow",
           "operation": "In",
           "values": ["wan", "warehouse"],
         },
       ],
     }
     …
  }
]

Gihatag mekanismo sa deduplikasyon, nga - gamit ang usa ka jq filter - nagtugot kanimo sa pag-convert sa dagkong mga butang sa JSON ngadto sa gagmay, diin ang mga parameter lamang ang nagpabilin nga gusto namong bantayan alang sa mga kausaban.

Kung gitawag ang usa ka kaw-it, gipasa kini sa shell-operator datos sa butang, nga magamit sa bisan unsang panginahanglan.

Ang mga panghitabo nga nagpahinabog mga kaw-it dili limitado sa mga panghitabo sa Kubernetes: ang shell-operator naghatag suporta alang sa nagtawag sa mga kaw-it sa panahon (parehas sa crontab sa usa ka tradisyonal nga scheduler), ingon man usa ka espesyal nga panghitabo onStartup. Ang tanan niini nga mga panghitabo mahimong ikombinar ug i-assign sa samang kaw-it.

Ug duha pa ka bahin sa shell-operator:

  1. Kini molihok asynchronous nga. Tungod kay ang usa ka Kubernetes nga panghitabo (sama sa usa ka butang nga gimugna) nadawat, ang uban nga mga panghitabo (sama sa parehas nga butang nga gitangtang) mahimong mahitabo sa cluster, ug ang mga kaw-it kinahanglan nga mag-asoy niini. Kung ang kaw-it gipatuman nga adunay usa ka sayup, nan pinaagi sa default kini mahimo tawag pag-usab hangtud sa malampuson nga pagkompleto (kini nga kinaiya mahimong mausab).
  2. Nag-eksport kini metrics alang sa Prometheus, nga imong masabtan kung ang shell-operator nagtrabaho, hibal-i ang gidaghanon sa mga sayup alang sa matag kaw-it ug ang kasamtangan nga gidak-on sa pila.

Sa pag-summarize niini nga bahin sa report:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Pag-instalar sa mga add-on

Alang sa komportable nga pagtrabaho sa Kubernetes, ang panginahanglan sa pag-instalar sa mga add-on gihisgutan usab. Isulti ko kanimo ang bahin niini gamit ang panig-ingnan sa agianan sa among kompanya kung giunsa namon kini buhaton karon.

Nagsugod kami sa pagtrabaho kauban ang mga Kubernetes nga adunay daghang mga pungpong, ang bugtong dugang niini mao ang Ingress. Kinahanglan kini nga ma-install nga lahi sa matag cluster, ug naghimo kami daghang mga pag-configure sa YAML alang sa lainlaing mga palibot: hubo nga metal, AWS ...

Ingon nga adunay daghang mga pungpong, adunay daghang mga pag-configure. Dugang pa, gipauswag namo kini nga mga pag-configure sa ilang kaugalingon, ingon nga usa ka sangputanan diin sila nahimo nga heterogenous:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Aron mahan-ay ang tanan, nagsugod kami sa usa ka script (install-ingress.sh), nga nagkuha isip argumento sa matang sa cluster nga atong i-deploy, nakamugna sa gikinahanglan nga configuration sa YAML ug gilukot kini ngadto sa Kubernetes.

Sa laktud, ang atong dugang nga dalan ug ang pangatarungan nga nalangkit niini mao ang mosunod:

  • sa pagtrabaho uban sa YAML configurations, usa ka template engine gikinahanglan (sa unang mga hugna kini mao ang yano nga sed);
  • uban sa pagdugang sa gidaghanon sa mga pungpong, ang panginahanglan alang sa awtomatik nga pag-update miabut (ang pinakauna nga solusyon mao ang pagbutang sa script sa Git, pag-update niini gamit ang cron ug pagdagan niini);
  • usa ka susama nga script ang gikinahanglan alang sa Prometheus (install-prometheus.sh), bisan pa, nahibal-an sa kamatuoran nga kini nanginahanglan labi pa nga data sa pag-input, ingon man ang ilang pagtipig (sa maayong paagi - sentralisado ug sa usa ka kumpol), ug ang pipila nga mga datos (mga password) mahimong awtomatiko nga mabuhat:

    Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

  • ang risgo sa rolling out sa usa ka butang nga sayop ngadto sa usa ka nagtubo nga gidaghanon sa mga clusters kanunay nga nagtubo, mao nga kami nakaamgo nga installers (i.e. duha ka script: para sa Ingress ug Prometheus) gikinahanglan ang staging (daghang mga sanga sa Git, daghang mga cron aron ma-update kini sa katugbang nga: stable o test clusters);
  • с kubectl apply kini nahimong lisud sa pagtrabaho uban sa tungod kay kini dili deklaratibo ug makahimo lamang sa paghimo sa mga butang, apan dili mohimo og mga desisyon sa ilang kahimtang/pagtangtang kanila;
  • Nawala ang pipila ka mga gimbuhaton nga wala pa namo mapatuman niadtong panahona:
    • bug-os nga kontrol sa resulta sa mga pag-update sa cluster,
    • awtomatik nga pagdeterminar sa pipila ka mga parameter (input alang sa mga script sa pag-install) base sa datos nga makuha gikan sa cluster (discovery),
    • ang lohikal nga pag-uswag niini sa porma sa padayon nga pagdiskobre.

Among gipatuman kining tanan nga natigom nga kasinatian sulod sa gambalay sa among uban nga proyekto - addon-operator.

Addon-operator

Gibase kini sa nahisgutan na nga shell-operator. Ang tibuuk nga sistema ingon niini:

Ang mosunod gidugang sa shell-operator hooks:

  • pagtipig sa mga kantidad,
  • Helm nga tsart,
  • component nga nag-monitor sa mga kantidad sa tindahan ug - kung adunay mga pagbag-o - gihangyo si Helm nga i-roll pag-usab ang tsart.

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Sa ingon, mahimo kitang mo-react sa usa ka panghitabo sa Kubernetes, maglunsad og usa ka kaw-it, ug gikan niini nga kaw-it makahimo kita og mga pagbag-o sa pagtipig, pagkahuman ang tsart ma-download pag-usab. Sa resulta nga diagram, among gibulag ang hugpong sa mga kaw-it ug ang tsart ngadto sa usa ka bahin, nga among gitawag module:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Mahimong adunay daghang mga module, ug sa kanila gidugang namon ang mga global nga kaw-it, usa ka tindahan sa mga kantidad sa kalibutan, ug usa ka sangkap nga nag-monitor sa kini nga global nga tindahan.

Karon, kung adunay mahitabo sa Kubernetes, mahimo naton kini nga reaksyon gamit ang usa ka global hook ug usbon ang usa ka butang sa global nga tindahan. Kini nga pagbag-o mamatikdan ug mahimong hinungdan nga ang tanan nga mga module sa cluster ma-roll out:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Kini nga laraw nagtagbaw sa tanan nga mga kinahanglanon alang sa pag-instalar sa mga add-on nga gipahayag sa ibabaw:

  • Ang Helm maoy responsable sa pagka-templating ug pagkadeklaratibo.
  • Ang isyu sa auto-update nasulbad gamit ang usa ka global hook, nga moadto sa registry sa usa ka eskedyul ug, kung makakita kini og bag-ong sistema nga imahe didto, i-roll kini (ie "kaugalingon").
  • Ang mga setting sa pagtipig sa cluster gipatuman gamit ConfigMap, nga naglangkob sa nag-unang datos alang sa mga storage (sa pagsugod kini gikarga sa mga storage).
  • Ang mga problema sa paghimo og password, pagdiskobre ug padayon nga pagdiskobre nasulbad gamit ang mga kaw-it.
  • Nakab-ot ang staging salamat sa mga tag, nga gisuportahan ni Docker gikan sa kahon.
  • Ang resulta gimonitor gamit ang metrics diin atong masabtan ang status.

Kini nga tibuok nga sistema gipatuman sa porma sa usa ka binary sa Go, nga gitawag og addon-operator. Kini naghimo sa diagram nga tan-awon nga mas simple:

Pagpalapad ug pagpuno sa Kubernetes (pagsusi ug taho sa video)

Ang nag-unang bahin niini nga diagram usa ka hugpong sa mga module (gi-highlight sa gray sa ubos). Karon makasulat na kami og module para sa gikinahanglan nga add-on nga adunay gamay nga paningkamot ug siguroha nga kini ma-install sa matag cluster, ma-update ug motubag sa mga panghitabo nga gikinahanglan niini sa cluster.

"Flant" gamit addon-operator sa 70+ Kubernetes clusters. Kasamtangang kahimtang - alpha nga bersyon. Karon nag-andam kami og dokumentasyon aron buhian ang beta, apan sa pagkakaron sa repositoryo mga pananglitan nga anaa, sa basehan nga mahimo ka makahimo sa imong kaugalingon nga addon.

Asa nako makuha ang mga module para sa addon-operator? Ang pagmantala sa among librarya mao ang sunod nga yugto alang kanamo; plano namon nga buhaton kini sa ting-init.

Mga video ug mga slide

Video gikan sa pasundayag (~50 ka minuto):

Presentasyon sa report:

PS

Ang ubang mga taho sa among blog:

Mahimong interesado ka usab sa mosunod nga mga publikasyon:

Source: www.habr.com

Idugang sa usa ka comment