Nyob zoo sawv daws! Kuv lub npe yog Oleg Sidorenkov, Kuv ua haujlwm ntawm DomClick ua tus thawj coj hauv pab pawg. Peb tau siv lub voos xwmfab muag rau ntau tshaj peb xyoos, thiab lub sijhawm no peb tau ntsib ntau lub sijhawm nthuav dav nrog nws. Hnub no kuv yuav qhia koj yuav ua li cas, nrog txoj hauv kev zoo, koj tuaj yeem nyem qhov kev ua tau zoo dua ntawm vanilla Kubernetes rau koj pawg. Npaj txhij mus!
Koj txhua tus paub zoo tias Kubernetes yog qhov qhib qhov qhib qhov qhib rau lub thawv orchestration; zoo, los yog 5 binaries uas ua khawv koob los ntawm kev tswj lub neej voj voog ntawm koj microservices nyob rau hauv ib puag ncig neeg rau zaub mov. Tsis tas li ntawd, qhov no yog cov cuab yeej hloov tau yooj yim uas tuaj yeem sib sau ua ke zoo li Lego tus tsim qauv rau kev hloov kho siab tshaj plaws rau ntau txoj haujlwm.
Thiab txhua yam zoo li zoo: pov cov servers rau hauv pawg, zoo li cov taws rau hauv lub qhov cub, thiab tsis paub kev tu siab. Tab sis yog tias koj yog rau ib puag ncig, ces koj yuav xav tias: "Kuv yuav ua li cas thiaj li tua hluav taws hauv qhov cub thiab khuv xim lub hav zoov?" Hauv lwm lo lus, yuav ua li cas thiaj nrhiav tau txoj hauv kev los txhim kho infrastructure thiab txo cov nqi.
1. Cia li taug qab pab neeg thiab daim ntawv thov kev pab
Ib qho ntawm feem ntau banal tab sis txoj kev siv tau zoo yog kev qhia txog kev thov / txwv. Cais cov ntawv thov los ntawm namespaces, thiab namespaces los ntawm pab pawg txhim kho. Teem daim ntawv thov ua ntej deploying qhov tseem ceeb rau kev noj processor lub sij hawm, nco, ephemeral cia.
Txhawm rau daws qhov teeb meem zoo sib xws, koj tuaj yeem sau ib lub cuab yeej, piv txwv li qhov no, uas tuaj yeem khaws thiab ua raws li lub xeev cov ntaub ntawv hais kom ua.
2. Xaiv qhov zoo tshaj plaws cov ntaub ntawv cia
Ntawm no kuv xav kov rau lub ntsiab lus ntawm cov ntim tsis tu ncua thiab disk subsystem ntawm Kubernetes tus neeg ua haujlwm nodes. Kuv vam tias tsis muaj leej twg siv "Cube" ntawm HDD hauv kev tsim khoom, tab sis qee zaum txawm tias ib txwm SSD twb tsis txaus. Peb tau ntsib cov teeb meem zoo li no uas cov cav tau tua cov disk los ntawm kev ua haujlwm I / O, thiab tsis muaj ntau qhov kev daws teeb meem ntawm no:
Siv cov kev ua tau zoo SSDs lossis hloov mus rau NVMe (yog tias koj tswj koj tus kheej kho vajtse).
Txo cov theem ntawm kev nkag.
Ua "ntse" ntsuas ntawm cov pods uas rape lub disk (podAntiAffinity).
Lub screenshot saum toj no qhia tau tias muaj dab tsi tshwm sim hauv nginx-ingress-controller nrog lub disk thaum nkag mus_logs tau qhib (~ 12k logs / sec). Xws li lub xeev, ntawm chav kawm, tuaj yeem ua rau degradation ntawm txhua daim ntawv thov ntawm node.
Raws li rau PV, alas, kuv tsis tau sim txhua yam. kev saib Cov ntim tsis tu ncua. Siv qhov kev xaiv zoo tshaj plaws uas haum rau koj. Nws muaj keeb kwm tshwm sim hauv peb lub teb chaws tias ib feem me me ntawm cov kev pabcuam xav tau RWX ntim, thiab ntev dhau los lawv tau pib siv NFS cia rau txoj haujlwm no. pheej yig thiab ... txaus. Tau kawg, peb noj shit nrog nws - noj qab nyob zoo, tab sis peb kawm yuav ua li cas qhib nws, thiab nws lub taub hau tsis mob lawm. Thiab yog tias ua tau, hloov mus rau S3 khoom cia.
3. Tsim cov duab zoo
Nws yog qhov zoo tshaj plaws los siv cov duab ua kom zoo tshaj plaws kom Kubernetes tuaj yeem nqa lawv sai dua thiab ua rau lawv ua tau zoo dua.
Optimization txhais tau tias cov duab:
tsuas muaj ib daim ntawv thov lossis ua ib qho haujlwm nkaus xwb;
me me, vim tias cov duab loj yog kis tau zoo dua hauv lub network;
muaj kev noj qab haus huv thiab kev npaj txhij txog qhov kawg uas Kubernetes tuaj yeem siv los nqis tes ua thaum lub sijhawm poob;
siv lub thawv-phooj ywg ua haujlwm (xws li Alpine lossis CoreOS) uas tiv taus ntau dua rau kev teeb tsa tsis raug;
siv ntau theem tsim kom koj tsuas tuaj yeem xa cov ntawv sau ua ke thiab tsis yog cov khoom siv nrog.
Muaj ntau yam cuab yeej thiab cov kev pab cuam uas tso cai rau koj mus xyuas thiab optimize cov duab ntawm ya. Nws yog ib qho tseem ceeb kom nco ntsoov khaws lawv mus txog hnub tim thiab nyab xeeb. Raws li qhov tshwm sim, koj tau txais:
Txo lub network thauj khoom ntawm tag nrho pawg.
Txo lub sij hawm pib lub thawv.
Qhov loj me ntawm koj tag nrho Docker npe.
4. Siv DNS cache
Yog hais tias peb tham txog cov loads siab, ces tsis muaj tuning DNS system ntawm pawg, lub neej yog zoo nkauj phem. Ib zaug dhau los, Kubernetes cov neeg tsim khoom txhawb nqa lawv cov kev daws teeb meem kube-dns. Nws kuj tau siv nyob rau hauv peb lub teb chaws, tab sis cov software no tsis tau tshwj xeeb mloog thiab tsis muab qhov yuav tsum tau ua, txawm hais tias, nws zoo li, txoj hauj lwm yog yooj yim. Tom qab ntawd coredns tshwm sim, uas peb tau hloov pauv thiab tsis paub txog kev tu siab, tom qab ntawd nws tau los ua qhov kev pabcuam DNS hauv K8s. Qee lub sij hawm, peb loj hlob mus txog 40 txhiab rps rau DNS system, thiab qhov kev daws teeb meem no kuj tsis txaus. Tab sis, los ntawm lub caij nyoog muaj hmoo, Nodelocaldns tuaj tawm, aka node hauv zos cache, aka NodeLocal DNSCache.
Vim li cas peb thiaj siv nws? Muaj kab laum nyob rau hauv Linux ntsiav uas, thaum muaj ntau yam nkag los ntawm conntrack NAT dhau UDP, ua rau muaj kev sib tw rau kev sau ntawv rau cov rooj conntrack, thiab ib feem ntawm kev khiav tsheb los ntawm NAT ploj (txhua qhov kev mus los ntawm Kev Pabcuam yog NAT). Nodelocaldns daws qhov teeb meem no los ntawm kev tshem tawm NAT thiab hloov kho mus rau TCP kev sib txuas mus rau sab saud DNS, nrog rau caching upstream DNS queries hauv zos (suav nrog luv luv 5 thib ob tsis zoo cache).
5. Scale pods horizontally thiab vertically txiav
Koj puas tuaj yeem hais nrog kev ntseeg siab tias tag nrho koj cov microservices tau npaj rau kev nce ob mus rau peb zaug? Yuav ua li cas faib cov peev txheej zoo rau koj daim ntawv thov? Ua kom ob peb lub plhaub taum ua haujlwm ntau dhau ntawm kev ua haujlwm tuaj yeem rov ua dua, thiab ua kom lawv rov qab los ntawm kev pheej hmoo poob qis los ntawm kev nce tsheb mus rau qhov kev pabcuam. Lub ntsiab lus golden pab kom ua tiav qhov kev sau ntawm kev sib npaug xws li kev pabcuam Kab rov tav Pod Autoscaler ΠΈ Vertical Pod Autoscaler.
VPA tso cai rau koj tuaj yeem nce qhov kev thov / txwv ntawm koj lub ntim rau hauv lub pod raws li kev siv tiag tiag. Nws yuav pab tau li cas? Yog tias koj muaj Pods uas yog vim li cas tsis tuaj yeem ntsuas tawm kab rov tav (uas tsis yog kev ntseeg siab), ces koj tuaj yeem sim ntseeg VPA los hloov nws cov peev txheej. Nws qhov tshwj xeeb yog qhov kev pom zoo raws li keeb kwm thiab cov ntaub ntawv tam sim no los ntawm metric-server, yog li yog tias koj tsis xav hloov kev thov / txwv tsis pub siv, koj tuaj yeem saib xyuas cov kev pom zoo rau koj cov ntim thiab ua kom zoo dua cov chaw kom txuag CPU thiab nco. hauv pawg.
Duab los ntawm https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231
Tus teem sijhawm hauv Kubernetes yog ib txwm ua raws li kev thov. Txawm tus nqi koj muab tso rau qhov twg, tus teem sijhawm yuav saib rau qhov tsim nyog raws li nws. Tus nqi txwv yog xav tau los ntawm kublet thiaj li paub tias thaum twg yuav throttle los yog tua ib lub pod. Thiab txij li qhov tseem ceeb tsuas yog qhov kev thov tus nqi, VPA yuav ua haujlwm nrog nws. Thaum twg koj ntsuas koj daim ntawv thov ntsug, koj txhais tau tias qhov kev thov yuav tsum yog dab tsi. Thiab yuav ua li cas rau cov kev txwv thaum ntawd? Qhov no parameter kuj yuav proportionally scaled.
Raws li hais saum toj no, qhov no yog proportional scaling raws li qhov kev thov / txwv ratio nyob rau hauv lub manifest:
CPU: 200m β 300m: piv 1: 1.75;
Nco: 250Mi β 500Mi: 1:2 piv.
Nrog rau HPA, ces lub mechanism ntawm kev ua hauj lwm yog pob tshab. Cov theem pib yog teem rau kev ntsuas xws li processor thiab nco, thiab yog tias qhov nruab nrab ntawm tag nrho cov replicas tshaj qhov pib, ces daim ntawv thov ntsuas los ntawm +1 pod kom txog thaum tus nqi poob qis dua qhov pib, los yog kom txog rau thaum lub siab tshaj plaws ntawm replicas.
Duab los ntawm https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231
Ntxiv rau qhov kev ntsuas ib txwm muaj xws li CPU thiab Memory, koj tuaj yeem teeb tsa qhov pib ntawm koj qhov kev cai Prometheus metrics thiab ua haujlwm nrog lawv yog tias koj xav tias qhov no yog qhov tseeb tshaj plaws los txiav txim siab thaum twg los ntsuas koj daim ntawv thov. Thaum daim ntawv thov ua kom ruaj khov hauv qab qhov kev ntsuas qhov ntsuas, HPA yuav pib ntsuas cov pods mus rau qhov tsawg kawg nkaus ntawm cov khoom siv rov ua dua lossis kom txog thaum lub load ua tau raws li qhov chaw pib.
Tsis yog tag nrho cov nodes khiav ntawm tib lub hardware, thiab tsis yog txhua lub pods yuav tsum tau khiav cov kev siv suav-intensive. Kubernetes tso cai rau koj los qhia qhov tshwj xeeb ntawm nodes thiab pods siv Node Affinity ΠΈ Pod Affinity.
Yog tias koj muaj cov nodes uas tsim nyog rau kev ua haujlwm suav nrog, tom qab ntawd rau kev ua haujlwm siab tshaj plaws, nws yog qhov zoo dua los khi cov ntawv thov rau cov nodes tsim nyog. Txhawm rau ua qhov no, siv nodeSelector nrog node label.
Wb hais tias koj muaj ob lub nodes: ib tug nrog CPUType=HIGHFREQ thiab ib tug loj tus naj npawb ntawm ceev cores, lwm nrog MemoryType=HIGHMEMORY nco ntau dua thiab ua haujlwm sai dua. Txoj kev yooj yim tshaj plaws yog muab lub pod xa mus rau ib lub pob HIGHFREQlos ntawm kev ntxiv rau ntu spec ib tug selector zoo li no:
β¦
nodeSelector:
CPUType: HIGHFREQ
Ib txoj hauv kev kim dua thiab tshwj xeeb los ua qhov no yog siv nodeAffinity hauv teb affinity ΡΠ°Π·Π΄Π΅l ua spec. Muaj ob txoj kev xaiv:
preferredDuringSchedulingIgnoredDuringExecution: soft setting (tus teem caij yuav sim xa mus rau cov nodes tshwj xeeb, thiab yog tias nws ua tsis tiav, nws yuav sim xa mus rau qhov muaj nyob tom ntej).
Koj tuaj yeem teev cov syntax tshwj xeeb rau kev tswj cov ntawv sau npe, piv txwv li, In, NotIn, Exists, DoesNotExist, Gt los yog Lt. Txawm li cas los xij, nco ntsoov tias txoj hauv kev nyuaj hauv cov npe ntev ntawm cov ntawv yuav ua rau kev txiav txim siab qeeb hauv qhov xwm txheej tseem ceeb. Hauv lwm lo lus, tsis txhob nyuaj.
Raws li tau hais los saum toj no, Kubernetes tso cai rau koj los teeb tsa kev khi ntawm cov pods tam sim no. Ntawd yog, koj tuaj yeem ua rau qee cov pods ua haujlwm ua ke nrog lwm cov pods hauv tib thaj chaw muaj (tseem ceeb rau huab) lossis cov nodes.
Π podAffinity liaj teb affinity ΡΠ°Π·Π΄Π΅l ua spec tib daim teb muaj nyob rau hauv cov ntaub ntawv ntawm nodeAffinity: requiredDuringSchedulingIgnoredDuringExecutionΠΈ preferredDuringSchedulingIgnoredDuringExecution. Qhov txawv tsuas yog qhov ntawd matchExpressions yuav khi cov pods rau ib lub pob uas twb tau khiav ib lub plhaub nrog daim ntawv lo.
Ntau Kubernetes muaj ib daim teb podAntiAffinity, uas, nyob rau hauv sib piv, tsis khi ib tug pod rau ib tug node nrog tshwj xeeb pods.
Hais txog cov lus qhia nodeAffinity Cov lus qhia tib yam tuaj yeem muab tau: sim ua kom cov kev cai yooj yim thiab muaj txiaj ntsig, tsis txhob sim overload lub pod specification nrog cov txheej txheem nyuaj. Nws yog ib qho yooj yim heev los tsim ib txoj cai uas tsis haum rau cov xwm txheej ntawm pawg, muab cov khoom thauj ntxiv rau lub sijhawm teem sijhawm thiab ua rau kev ua haujlwm tag nrho.
Qhov no tsis tau txhais hais tias thaum lub sij hawm rov qab ua dua tshiab, lub pod yuav ntaus raws nraim qhov node, qhov no tsis yog Node Affinity mechanism thiab nodeSelector. Tab sis los ntawm kev sib txuas ntau yam nta, koj tuaj yeem ua tiav qhov kev teeb tsa yooj yim heev.
8. Teem Pod Deployment Priority
Tsuas yog vim tias koj tau teeb tsa kev sib txuas ntawm pod-rau-node tsis tau txhais hais tias txhua lub pods yuav tsum tau kho nrog tib qhov tseem ceeb. Piv txwv li, tej zaum koj yuav xav xa ib co Pods ua ntej lwm tus.
Kubernetes muaj ntau txoj hauv kev los teeb tsa Pod Priority thiab Preemption. Kev teeb tsa muaj ntau qhov chaw: khoom PriorityClassthiab cov lus piav qhia priorityClassNamenyob rau hauv lub pod specification. Xav txog ib qho piv txwv:
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-priority
value: 99999
globalDefault: false
description: "This priority class should be used for very important pods only"
Peb tsim PriorityClass, muab nws lub npe, piav qhia, thiab tus nqi.Siab dua value, qhov tseem ceeb dua. Tus nqi tuaj yeem yog ib qho 32-ntsis tus lej tsawg dua lossis sib npaug rau 1. Cov nqi siab dua yog tshwj tseg rau lub hom phiaj tseem ceeb ntawm cov pods, uas feem ntau tsis tuaj yeem preempted.Kev ntiab tawm tsuas yog tshwm sim yog tias lub plhaub tseem ceeb tshaj plaws tsis muaj qhov chaw tig rov qab, ces qee qhov ntawm cov pods los ntawm ib qho ntawm qhov tshwj xeeb yuav raug tshem tawm. Yog tias qhov txheej txheem no nruj dhau rau koj, ces koj tuaj yeem ntxiv qhov kev xaiv preemptionPolicy: Never, thiab tom qab ntawd yuav tsis muaj preemption, lub plhaub taum pauv yuav yog thawj zaug hauv kab thiab tos tus neeg teem caij mus nrhiav kev pab dawb rau nws.
Tom ntej no, peb tsim ib lub pod, uas peb qhia lub npe priorityClassName:
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
role: myrole
spec:
containers:
- name: web
image: nginx
ports:
- name: web
containerPort: 80
protocol: TCP
priorityClassName: high-priority
Koj tuaj yeem tsim ntau qhov tseem ceeb hauv chav kawm raws li koj nyiam, txawm hais tias nws raug pom zoo kom tsis txhob nqa nrog qhov no (hais, txwv koj tus kheej kom qis, nruab nrab thiab qhov tseem ceeb).
Yog li, yog tias tsim nyog, koj tuaj yeem ua kom muaj txiaj ntsig ntawm kev xa cov kev pabcuam tseem ceeb, xws li nginx-ingress-controller, coredns, thiab lwm yam.
9. Ua kom zoo dua koj pawg ETCD
ETCD tuaj yeem hu ua lub hlwb ntawm tag nrho pawg. Nws yog ib qho tseem ceeb heev kom tswj tau qhov kev khiav hauj lwm ntawm cov ntaub ntawv no nyob rau theem siab, txij li qhov ceev ntawm kev khiav hauj lwm hauv "Cube" nyob ntawm nws. Tus qauv tsim nyog, thiab tib lub sijhawm, qhov kev daws teeb meem zoo yuav yog kom khaws ETCD pawg ntawm tus tswv ntawm lub hauv paus kom muaj qhov ncua sij hawm tsawg kawg rau kube-apiserver. Yog tias qhov no tsis tuaj yeem ua tau, ces tso ETCD kom ze li sai tau, nrog bandwidth zoo ntawm cov neeg koom. Kuj xyuam xim rau ntau npaum li cas ntawm ETCD tuaj yeem poob tawm yam tsis muaj kev puas tsuaj rau pawg.
Nco ntsoov tias kev nce ntau dhau ntawm cov neeg koom hauv pawg tuaj yeem ua rau muaj kev zam txim rau qhov kev ua tau zoo, txhua yam yuav tsum nyob rau hauv kev sib haum xeeb.
Yog tias peb tham txog kev teeb tsa kev pabcuam, ces muaj ob peb cov lus pom zoo:
Tweak ob peb yam yog tias koj tau kis ib pawg ntawm ob khub DCs lossis koj lub network thiab disks tawm ntau yam uas xav tau (koj tuaj yeem nyeem. S, SΡS,).
xaus
Kab lus no piav qhia txog cov ntsiab lus uas peb pab neeg sim ua raws. Qhov no tsis yog cov lus piav qhia ib kauj ruam ntawm kev nqis tes ua, tab sis cov kev xaiv uas tuaj yeem siv tau los ua kom zoo tshaj qhov nyiaj siv ua haujlwm ntawm pawg. Nws yog qhov tseeb tias txhua pawg yog qhov tshwj xeeb ntawm nws tus kheej, thiab cov kev daws teeb meem sib txawv tuaj yeem sib txawv, yog li nws yuav nthuav kom tau txais cov lus qhia los ntawm koj: koj saib xyuas koj pawg Kubernetes li cas, koj ua li cas txhim kho nws cov kev ua tau zoo. Qhia koj qhov kev paub hauv cov lus, nws yuav nthuav kom paub nws.