Marun padanu nigba gbigbe ohun elo akọkọ lori Kubernetes

Marun padanu nigba gbigbe ohun elo akọkọ lori KubernetesIkuna nipasẹ Aris-Dreamer

Ọpọlọpọ eniyan gbagbọ pe o to lati jade ohun elo naa si Kubernetes (boya lilo Helm tabi pẹlu ọwọ) ati pe wọn yoo dun. Ṣugbọn kii ṣe pe o rọrun.

Egbe Mail.ru awọsanma Solutions tumọ nkan kan nipasẹ ẹlẹrọ DevOps Julian Gindi. O pin awọn ipalara ti ile-iṣẹ rẹ pade lakoko ilana ijira, ki o maṣe tẹsẹ lori rake kanna.

Igbesẹ Ọkan: Ṣiṣeto Awọn ibeere Pod ati Awọn idiwọn

Jẹ ki a bẹrẹ nipa siseto agbegbe mimọ ninu eyiti awọn podu wa yoo ṣiṣẹ. Kubernetes ṣe iṣẹ nla kan ti ṣiṣe eto awọn adarọ-ese ati mimu awọn ipo ikuna mimu. Ṣugbọn o han pe oluṣeto nigba miiran ko le gbe podu kan ti o ba ṣoro lati ṣe iṣiro iye awọn orisun ti o nilo lati ṣiṣẹ ni aṣeyọri. Eyi ni ibiti awọn ibeere fun awọn orisun ati awọn opin wa. Ọpọlọpọ ariyanjiyan wa nipa ọna ti o dara julọ lati ṣeto awọn ibeere ati awọn opin. Nigba miiran o kan lara gaan bi o ṣe jẹ aworan ju imọ-jinlẹ lọ. Eyi ni ọna wa.

Pod ibeere - Eyi ni iye akọkọ ti o lo nipasẹ oluṣeto lati gbe podu naa ni aipe.

Atiku Kubernetes iwe aṣẹ: Igbesẹ sisẹ ṣe ipinnu ṣeto awọn apa nibiti a le ṣeto podu naa. Fun apẹẹrẹ, àlẹmọ PodFitsResources ṣayẹwo boya ipade kan ni awọn orisun to lati ni itẹlọrun awọn ibeere orisun orisun kan pato.

A lo awọn ibeere ohun elo ki wọn le ṣee lo lati ṣe iṣiro iye awọn orisun ni otitọ Ohun elo naa nilo lati ṣiṣẹ daradara. Ni ọna yii oluṣeto le gbe awọn apa ni otitọ. Ni akọkọ a fẹ lati ṣeto awọn ibeere pẹlu ala lati rii daju pe adarọ-ese kọọkan ni iye awọn orisun to to, ṣugbọn a ṣe akiyesi pe awọn akoko ṣiṣeto pọ si ni pataki ati pe diẹ ninu awọn podu ko ni iṣeto ni kikun, bi ẹnipe ko si awọn ibeere orisun ti a gba fun wọn.

Ni ọran yii, oluṣeto nigbagbogbo yoo fa awọn adarọ-ese jade ati pe ko le ṣe atunto wọn nitori ọkọ ofurufu iṣakoso ko ni imọran iye awọn orisun ti ohun elo naa yoo nilo, paati bọtini kan ti ṣiṣe eto algorithm.

Pod ifilelẹ - Eyi jẹ opin ti o mọ julọ fun podu naa. O ṣe aṣoju iye ti o pọju ti awọn orisun ti iṣupọ yoo pin si eiyan naa.

Lẹẹkansi, lati osise iwe aṣẹ: Ti o ba ti a eiyan ni o ni a 4 GiB iranti iye ṣeto, ki o si kubelet (ati awọn eiyan asiko isise) yoo lagabara o. Akoko asiko ko gba eiyan laaye lati lo diẹ ẹ sii ju opin awọn orisun ti a sọ. Fun apẹẹrẹ, nigbati ilana kan ninu apoti kan ba gbiyanju lati lo diẹ sii ju iye iranti ti a gba laaye, ekuro eto fopin si ilana naa pẹlu aṣiṣe “jade kuro ninu iranti” (OOM).

A eiyan le nigbagbogbo lo diẹ ẹ sii oro ju pato ninu awọn oluşewadi ìbéèrè, sugbon ko le lo diẹ ẹ sii ju pato ninu awọn iye to. Iye yii nira lati ṣeto ni deede, ṣugbọn o ṣe pataki pupọ.

Bi o ṣe yẹ, a fẹ ki awọn ibeere orisun ti adarọ-ese lati yipada lori igbesi aye ilana kan laisi kikọlu pẹlu awọn ilana miiran ninu eto — iyẹn ni ibi-afẹde ti ṣeto awọn opin.

Laanu, Emi ko le fun awọn itọnisọna pato lori kini awọn iye lati ṣeto, ṣugbọn awa tikararẹ faramọ awọn ofin wọnyi:

  1. Lilo ohun elo idanwo fifuye, a ṣe afarawe ipele ti ijabọ ipilẹ ati ṣe atẹle lilo awọn orisun podu (iranti ati ero isise).
  2. A ṣeto awọn ibeere podu si iye kekere lainidii (pẹlu opin orisun ti o to awọn akoko 5 iye awọn ibeere) ati ṣe akiyesi. Nigbati awọn ibeere ba lọ silẹ pupọ, ilana naa ko le bẹrẹ, nigbagbogbo nfa awọn aṣiṣe asiko Go ohun ijinlẹ.

Ṣe akiyesi pe awọn opin orisun ti o ga julọ jẹ ki ṣiṣe ṣiṣe eto le nira nitori pe podu nilo ipade ibi-afẹde kan pẹlu awọn orisun to wa.

Fojuinu ipo kan nibiti o ni olupin wẹẹbu iwuwo fẹẹrẹ pẹlu opin awọn orisun ti o ga pupọ, sọ 4 GB ti iranti. Ilana yii yoo ni iwọn ni ita, ati pe module tuntun kọọkan yoo ni lati seto lori ipade pẹlu o kere ju 4GB ti iranti ti o wa. Ti ko ba si iru ipade bẹ, iṣupọ naa gbọdọ ṣafihan ipade tuntun kan lati ṣe ilana adarọ-ese yẹn, eyiti o le gba akoko diẹ. O ṣe pataki lati tọju iyatọ laarin awọn ibeere orisun ati awọn opin si o kere ju lati rii daju wiwọn iyara ati didan.

Igbesẹ Keji: Ṣiṣeto Igbesi aye ati Awọn idanwo imurasilẹ

Eyi jẹ koko-ọrọ arekereke miiran ti a maa n jiroro ni agbegbe Kubernetes. O ṣe pataki lati ni oye ti o dara ti Awọn idanwo igbesi aye ati imurasilẹ bi wọn ṣe n pese ẹrọ kan fun sọfitiwia lati ṣiṣẹ laisiyonu ati dinku akoko isinmi. Sibẹsibẹ, wọn le fa iṣẹ ṣiṣe to buruju si ohun elo rẹ ti ko ba tunto ni deede. Ni isalẹ ni ṣoki ti kini awọn ayẹwo mejeeji dabi.

Igbesi aye fihan boya awọn eiyan nṣiṣẹ. Ti o ba kuna, awọn kubelet pa eiyan ati ki o kan tun eto imulo ti wa ni sise fun o. Ti eiyan naa ko ba ni ipese pẹlu iwadii Liveness, lẹhinna ipo aiyipada yoo jẹ aṣeyọri - eyi ni ohun ti o sọ ninu Kubernetes iwe aṣẹ.

Awọn iwadii igbesi aye yẹ ki o jẹ olowo poku, afipamo pe wọn ko yẹ ki o jẹ ọpọlọpọ awọn orisun, nitori wọn nṣiṣẹ nigbagbogbo ati nilo lati sọ fun Kubernetes pe ohun elo naa nṣiṣẹ.

Ti o ba ṣeto aṣayan lati ṣiṣẹ ni gbogbo iṣẹju-aaya, eyi yoo ṣafikun ibeere 1 fun iṣẹju kan, nitorinaa ṣe akiyesi pe awọn orisun afikun yoo nilo lati mu ijabọ yii.

Ni ile-iṣẹ wa, awọn idanwo Liveness ṣayẹwo awọn paati pataki ti ohun elo kan, paapaa ti data naa (fun apẹẹrẹ, lati ibi ipamọ data jijin tabi kaṣe) ko ni iraye si ni kikun.

A ti ṣe atunto awọn ohun elo pẹlu aaye ipari “ilera” ti o da koodu idahun kan pada ti 200. Eyi jẹ itọkasi pe ilana naa nṣiṣẹ ati pe o lagbara lati ṣiṣẹ awọn ibeere (ṣugbọn kii ṣe ijabọ sibẹsibẹ).

Ayẹwo Agbara tọkasi boya awọn eiyan ti šetan lati sin awọn ibeere. Ti iwadii imurasilẹ ba kuna, oludari ipari yoo yọ adiresi IP adarọ-ese kuro lati awọn aaye ipari ti gbogbo awọn iṣẹ ti o baamu si podu naa. Eyi tun sọ ninu iwe Kubernetes.

Awọn iwadii imurasilẹ n gba awọn orisun diẹ sii nitori wọn gbọdọ firanṣẹ si ẹhin ni ọna ti o tọka pe ohun elo ti ṣetan lati gba awọn ibeere.

Ọpọlọpọ ariyanjiyan wa ni agbegbe nipa boya lati wọle si ibi ipamọ data taara. Fi fun ni oke (awọn sọwedowo ti wa ni ṣiṣe nigbagbogbo, ṣugbọn o le ṣe atunṣe), a pinnu pe fun diẹ ninu awọn ohun elo, imurasilẹ lati sin ijabọ nikan ni a ka lẹhin ti o rii daju pe awọn igbasilẹ ti pada lati ibi ipamọ data. Awọn idanwo imurasilẹ ti a ṣe apẹrẹ daradara ṣe idaniloju awọn ipele ti o ga julọ ti wiwa ati imukuro akoko idinku lakoko imuṣiṣẹ.

Ti o ba pinnu lati beere aaye data lati ṣe idanwo imurasilẹ ti ohun elo rẹ, rii daju pe ko gbowolori bi o ti ṣee ṣe. Jẹ ki a gba ibeere yii:

SELECT small_item FROM table LIMIT 1

Eyi ni apẹẹrẹ ti bii a ṣe tunto awọn iye meji wọnyi ni Kubernetes:

livenessProbe: 
 httpGet:   
   path: /api/liveness    
   port: http 
readinessProbe:  
 httpGet:    
   path: /api/readiness    
   port: http  periodSeconds: 2

O le ṣafikun diẹ ninu awọn aṣayan iṣeto ni afikun:

  • initialDelaySeconds - awọn aaya melo ni yoo kọja laarin ifilọlẹ ti eiyan ati ibẹrẹ awọn ayẹwo.
  • periodSeconds - nduro aarin laarin awọn ayẹwo gbalaye.
  • timeoutSeconds - nọmba awọn aaya lẹhin eyi ti a kà ẹyọ naa si pajawiri. Aago deede.
  • failureThreshold - nọmba awọn ikuna idanwo ṣaaju fifiranṣẹ ifihan agbara atunbere si adarọ ese naa.
  • successThreshold - nọmba awọn iwadii aṣeyọri ṣaaju ki adarọ-ese lọ sinu ipo ti o ṣetan (lẹhin ikuna, nigbati adarọ ese ba bẹrẹ tabi gba pada).

Igbesẹ mẹta: ṣeto awọn eto imulo nẹtiwọki aiyipada fun adarọ-ese

Kubernetes ni oju-aye nẹtiwọọki “alapin”; nipasẹ aiyipada, gbogbo awọn adarọ-ese ni ibasọrọ taara pẹlu ara wọn. Ni awọn igba miiran eyi kii ṣe ifẹ.

Ọrọ aabo ti o pọju ni pe ikọlu le lo ohun elo alailagbara kan lati firanṣẹ ijabọ si gbogbo awọn adarọ-ese lori nẹtiwọọki. Bi pẹlu ọpọlọpọ awọn agbegbe ti aabo, awọn opo ti o kere anfani kan nibi. Bi o ṣe yẹ, awọn eto imulo nẹtiwọọki yẹ ki o pato pato iru awọn asopọ laarin awọn adarọ-ese ti a gba laaye ati eyiti kii ṣe.

Fun apẹẹrẹ, ni isalẹ ni eto imulo ti o rọrun ti o kọ gbogbo ijabọ ti nwọle fun aaye orukọ kan pato:

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:  
 name: default-deny-ingress
spec:  
 podSelector: {}  
 policyTypes:  
   - Ingress

Wiwo atunto yii:

Marun padanu nigba gbigbe ohun elo akọkọ lori Kubernetes
(https://miro.medium.com/max/875/1*-eiVw43azgzYzyN1th7cZg.gif)
Alaye diẹ sii nibi.

Igbesẹ mẹrin: ihuwasi aṣa nipa lilo awọn kio ati awọn apoti init

Ọkan ninu awọn ibi-afẹde akọkọ wa ni lati pese awọn imuṣiṣẹ si Kubernetes laisi akoko isinmi fun awọn idagbasoke. Eyi nira nitori ọpọlọpọ awọn aṣayan wa fun tiipa awọn ohun elo ati idasilẹ awọn orisun ti wọn lo.

Awọn iṣoro pataki dide pẹlu Nginx. A ṣe akiyesi pe nigba ti wọn gbe awọn podu wọnyi lọ lẹsẹsẹ, awọn asopọ ti nṣiṣe lọwọ ti lọ silẹ ṣaaju aṣeyọri aṣeyọri.

Lẹhin iwadii nla lori ayelujara, o han pe Kubernetes ko duro fun awọn asopọ Nginx lati mu ararẹ kuro ṣaaju ki o to fopin si podu naa. Lilo kio idaduro-ṣaaju, a ṣe imuse iṣẹ ṣiṣe atẹle ati yọkuro kuro ni akoko isinmi patapata:

lifecycle: 
 preStop:
   exec:
     command: ["/usr/local/bin/nginx-killer.sh"]

Ṣugbọn nginx-killer.sh:

#!/bin/bash
sleep 3
PID=$(cat /run/nginx.pid)
nginx -s quit
while [ -d /proc/$PID ]; do
   echo "Waiting while shutting down nginx..."
   sleep 10
done

Ilana ti o wulo pupọ julọ ni lilo awọn apoti init lati mu ibẹrẹ ti awọn ohun elo kan pato. Eyi jẹ iwulo paapaa ti o ba ni ilana ijira data ti o lekoko ti o nilo lati ṣiṣẹ ṣaaju ki ohun elo naa to bẹrẹ. O tun le pato opin orisun ti o ga julọ fun ilana yii laisi ṣeto iru opin kan fun ohun elo akọkọ.

Eto miiran ti o wọpọ ni lati wọle si awọn aṣiri ninu apoti init ti o pese awọn iwe-ẹri wọnyẹn si module akọkọ, eyiti o ṣe idiwọ iraye si laigba aṣẹ si awọn aṣiri lati module ohun elo akọkọ funrararẹ.

Gẹgẹbi igbagbogbo, sọ lati inu iwe: Awọn apoti Init lailewu ṣiṣẹ koodu aṣa tabi awọn ohun elo ti yoo bibẹẹkọ dinku aabo ti aworan eiyan ohun elo. Nipa titọju awọn irinṣẹ ti ko wulo lọtọ, o ni opin oju ikọlu ti aworan eiyan ohun elo.

Igbesẹ Karun: Ṣiṣeto Kernel

Ni ipari, jẹ ki a sọrọ nipa ilana ilọsiwaju diẹ sii.

Kubernetes jẹ pẹpẹ ti o rọ pupọ ti o jẹ ki o ṣiṣẹ awọn ẹru iṣẹ ni ọna ti o rii pe o yẹ. A ni nọmba ti awọn ohun elo iṣẹ ṣiṣe giga ti o jẹ aladanla awọn orisun pupọ. Lẹhin ṣiṣe idanwo fifuye nla, a ṣe awari pe ohun elo kan n tiraka lati mu ẹru ijabọ ti a nireti nigbati awọn eto aiyipada Kubernetes wa ni ipa.

Bibẹẹkọ, Kubernetes gba ọ laaye lati ṣiṣẹ eiyan ti o ni anfani ti o yi awọn aye kernel pada fun adarọ-ese kan pato. Eyi ni ohun ti a lo lati yi nọmba ti o pọ julọ ti awọn asopọ ṣiṣi pada:

initContainers:
  - name: sysctl
     image: alpine:3.10
     securityContext:
         privileged: true
      command: ['sh', '-c', "sysctl -w net.core.somaxconn=32768"]

Eyi jẹ ilana ilọsiwaju diẹ sii ti a ko nilo nigbagbogbo. Ṣugbọn ti ohun elo rẹ ba n tiraka lati koju ẹru iwuwo, o le gbiyanju tweaking diẹ ninu awọn eto wọnyi. Awọn alaye diẹ sii lori ilana yii ati ṣeto awọn iye oriṣiriṣi - bi nigbagbogbo ninu awọn osise iwe aṣẹ.

Ni ipari

Lakoko ti Kubernetes le dabi ẹnipe ojutu ti a ti ṣetan lati inu apoti, awọn igbesẹ bọtini diẹ wa ti o nilo lati mu lati jẹ ki awọn ohun elo rẹ ṣiṣẹ laisiyonu.

Ni gbogbo ijira Kubernetes rẹ, o ṣe pataki lati tẹle “iwọn idanwo fifuye”: ṣe ifilọlẹ ohun elo naa, ṣe idanwo fifuye, ṣakiyesi awọn metiriki ati ihuwasi iwọn, ṣatunṣe iṣeto ti o da lori data yẹn, lẹhinna tun ọmọ naa tun.

Jẹ ojulowo nipa ijabọ ti o nireti ati gbiyanju lati Titari kọja rẹ lati rii iru awọn paati wo ni akọkọ. Pẹlu ọna aṣetunṣe yii, diẹ ninu awọn iṣeduro ti a ṣe akojọ le to lati ṣaṣeyọri aṣeyọri. Tabi o le nilo isọdi ti o jinlẹ.

Nigbagbogbo beere ara rẹ ibeere wọnyi:

  1. Awọn orisun melo ni awọn ohun elo jẹ ati bawo ni iwọn didun yii yoo ṣe yipada?
  2. Kini awọn ibeere igbelowọn gidi? Elo ni ijabọ app yoo mu ni apapọ? Kini nipa ijabọ tente oke?
  3. Igba melo ni iṣẹ naa nilo lati ṣe iwọn ni petele? Bawo ni yarayara ṣe awọn adarọ-ese tuntun nilo lati mu wa lori ayelujara lati gba ijabọ?
  4. Bawo ni awọn podu ti wa ni pipade ni deede? Ṣe eyi nilo rara? Ṣe o ṣee ṣe lati ṣaṣeyọri imuṣiṣẹ laisi akoko isinmi?
  5. Bawo ni o ṣe le dinku awọn ewu aabo ati idinwo ibajẹ lati eyikeyi awọn adarọ-ese ti o gbogun? Njẹ awọn iṣẹ eyikeyi ni awọn igbanilaaye tabi iwọle ti wọn ko nilo?

Kubernetes n pese pẹpẹ iyalẹnu ti o fun ọ laaye lati lo awọn iṣe ti o dara julọ fun gbigbe awọn ẹgbẹẹgbẹrun awọn iṣẹ ṣiṣẹ ni iṣupọ kan. Sibẹsibẹ, ohun elo kọọkan yatọ. Nigba miiran imuse nilo iṣẹ diẹ diẹ sii.

O da, Kubernetes pese iṣeto pataki lati ṣaṣeyọri gbogbo awọn ibi-afẹde imọ-ẹrọ. Lilo apapo awọn ibeere orisun ati awọn opin, Igbesi aye ati Awọn iwadii imurasilẹ, awọn apoti init, awọn ilana nẹtiwọọki, ati yiyi ekuro aṣa, o le ṣaṣeyọri iṣẹ giga pẹlu ifarada ẹbi ati iwọn iyara.

Kini ohun miiran lati ka:

  1. Awọn iṣe ti o dara julọ ati awọn iṣe ti o dara julọ fun ṣiṣiṣẹ awọn apoti ati Kubernetes ni awọn agbegbe iṣelọpọ.
  2. Awọn irinṣẹ 90+ ti o wulo fun Kubernetes: imuṣiṣẹ, iṣakoso, ibojuwo, aabo ati diẹ sii.
  3. Ikanni wa ni ayika Kubernetes ni Telegram.

orisun: www.habr.com

Fi ọrọìwòye kun