Nid yw ein dwylo ar gyfer diflastod: adfer clwstwr Rook yn K8s

Nid yw ein dwylo ar gyfer diflastod: adfer clwstwr Rook yn K8s

Rydym yn wedi dweud yn barodPam rydyn ni'n hoffi Rook: mae'n symleiddio gweithio gyda storio mewn clystyrau Kubernetes yn sylweddol. Fodd bynnag, gyda'r symlrwydd hwn daw rhai cymhlethdodau. Gobeithiwn y bydd y deunydd newydd hwn yn eich helpu i ddeall y cymhlethdodau hyn yn well cyn iddynt godi.

Er mwyn gwneud darllen yn fwy diddorol, gadewch i ni ddechrau gyda canlyniadau problem ddamcaniaethol mewn clwstwr.

"Mae popeth ar goll!"

Dychmygwch eich bod wedi ffurfweddu a lansio Rook yn eich clwstwr K8s unwaith, ac mae wedi bod yn gweithio'n berffaith, ond ar ryw adeg "wych", mae'r canlynol yn digwydd:

  • Ni all podiau newydd osod delweddau RBD o Ceph.
  • Timau fel lsblk и df Dydyn nhw ddim yn gweithio ar nodau Kubernetes. Mae hyn yn golygu'n awtomatig bod rhywbeth o'i le gyda'r delweddau RBD sydd wedi'u gosod ar y nodau. Ni ellir eu darllen, sy'n dangos nad yw'r monitorau ar gael...
  • Ydy, does dim monitorau gweithredol yn y clwstwr. Ar ben hynny, does dim podiau OSD na phod MGR hyd yn oed.

Pan ddechreuwyd y pod rook-ceph-operator? Ddim yn bell yn ôl, cafodd ei ddefnyddio. Pam? Penderfynodd gweithredwr y Rook greu clwstwr newydd... Sut allwn ni adfer y clwstwr a'i ddata nawr?

Gadewch i ni ddechrau gyda dull hirach a mwy diddorol, gan gynnal ymchwiliad trylwyr i fewnolion Rook ac adfer ei gydrannau gam wrth gam. Wrth gwrs, mae yna ffordd fyrrach a mwy effeithiol hefyd: defnyddio copïau wrth gefn. Fel y gwyddom i gyd, mae dau fath o weinyddwyr: y rhai nad ydynt yn gwneud copïau wrth gefn, a'r rhai sy'n gwneud... Ond mwy am hynny ar ôl yr ymchwiliad.

Ychydig o Ymarfer, neu Ffordd Hir

Byddwn yn edrych o gwmpas ac yn adfer eich monitorau.

Felly, gadewch i ni edrych ar y rhestr o ConfigMaps: mae'r rhai sydd eu hangen ar gyfer copi wrth gefn rook-ceph-config и rook-config-overrideMaent yn ymddangos pan fydd y clwstwr wedi'i ddefnyddio'n llwyddiannus.

NBMewn fersiynau newydd, ar ôl eu mabwysiadu y PR hwnNid yw ConfigMaps bellach yn ddangosydd o lwyddiant defnyddio clwstwr.

I gyflawni camau gweithredu pellach, mae angen i ni ailgychwyn yn galed yr holl weinyddion sydd wedi gosod delweddau RBD (ls /dev/rbd*). Rhaid gwneud hyn drwy sysrq (neu "ar droed" yn y ganolfan ddata). Mae'r gofyniad hwn yn angenrheidiol i ddatgysylltu RBDs wedi'u gosod, ac ni fydd ailgychwyn safonol yn gweithio ar eu cyfer (bydd yn ceisio'u dad-osod yn normal yn aflwyddiannus).

Mae theatr yn dechrau gyda rac cotiau, ac mae clwstwr Ceph yn dechrau gyda monitorau. Gadewch i ni edrych arnyn nhw.

Mae Rook yn gosod yr endidau canlynol yn y pod monitro:

Volumes:
 rook-ceph-config:
   Type:      ConfigMap (a volume populated by a ConfigMap)
   Name:      rook-ceph-config
 rook-ceph-mons-keyring:
   Type:        Secret (a volume populated by a Secret)
   SecretName:  rook-ceph-mons-keyring
 rook-ceph-log:
   Type:          HostPath (bare host directory volume)
   Path:          /var/lib/rook/kube-rook/log
 ceph-daemon-data:
   Type:          HostPath (bare host directory volume)
   Path:          /var/lib/rook/mon-a/data
Mounts:
  /etc/ceph from rook-ceph-config (ro)
  /etc/ceph/keyring-store/ from rook-ceph-mons-keyring (ro)
  /var/lib/ceph/mon/ceph-a from ceph-daemon-data (rw)
  /var/log/ceph from rook-ceph-log (rw)

Gadewch i ni weld beth sy'n gyfrinach rook-ceph-mons-keyring:

kind: Secret
data:
 keyring: LongBase64EncodedString=

Rydym yn datgodio ac yn cael allweddell reolaidd gyda hawliau ar gyfer gweinyddwyr a monitorau:

[mon.]
       key = AQAhT19dlUz0LhBBINv5M5G4YyBswyU43RsLxA==
       caps mon = "allow *"
[client.admin]
       key = AQAhT19d9MMEMRGG+wxIwDqWO1aZiZGcGlSMKp==
       caps mds = "allow *"
       caps mon = "allow *"
       caps osd = "allow *"
       caps mgr = "allow *"

Gadewch i ni gofio. Nawr, gadewch i ni edrych ar y gadwyn allweddi yn y dirgel. rook-ceph-admin-keyring:

kind: Secret
data:
 keyring: anotherBase64EncodedString=

Beth sydd ynddo?

[client.admin]
       key = AQAhT19d9MMEMRGG+wxIwDqWO1aZiZGcGlSMKp==
       caps mds = "allow *"
       caps mon = "allow *"
       caps osd = "allow *"
       caps mgr = "allow *"

Yr un peth yma. Gadewch i ni weld eto... Dyma gyfrinach, er enghraifft. rook-ceph-mgr-a-keyring:

[mgr.a]
       key = AQBZR19dbVeaIhBBXFYyxGyusGf8x1bNQunuew==
       caps mon = "allow *"
       caps mds = "allow *"
       caps osd = "allow *"

Yn y pen draw, rydym yn dod o hyd i ychydig mwy o gyfrinachau yn y ConfigMap. rook-ceph-mon:

kind: Secret
data:
 admin-secret: AQAhT19d9MMEMRGG+wxIwDqWO1aZiZGcGlSMKp==
 cluster-name: a3ViZS1yb29r
 fsid: ZmZiYjliZDMtODRkOS00ZDk1LTczNTItYWY4MzZhOGJkNDJhCg==
 mon-secret: AQAhT19dlUz0LhBBINv5M5G4YyBswyU43RsLxA==

A dyma'r rhestr wreiddiol gyda chylchoedd allweddi, lle mae'r holl gyfrinachau a ddisgrifir uchod yn dod.

Fel y gwyddys (gweler dataDirHostPath в dogfennaeth), Mae Rook yn storio'r data hwn mewn dau le. Felly, gadewch i ni fynd i'r nodau i edrych ar y cylchoedd allweddi sydd wedi'u storio yn y cyfeiriaduron sydd wedi'u gosod yn y podiau gyda monitorau ac OSDs. I wneud hyn, byddwn yn dod o hyd i [cylchoedd allweddi] ar y nodau. /var/lib/rook/mon-a/data/keyring a byddwn yn gweld:

# cat /var/lib/rook/mon-a/data/keyring
[mon.]
       key = AXAbS19d8NNUXOBB+XyYwXqXI1asIzGcGlzMGg==
       caps mon = "allow *"

Yn sydyn yma trodd y gyfrinach allan i fod yn wahanol - nid fel yn ConfigMaps.

Beth am y cylch allweddi gweinyddol? Mae gennym ni hwnnw hefyd:

# cat /var/lib/rook/kube-rook/client.admin.keyring
[client.admin]
       key = AXAbR19d8GGSMUBN+FyYwEqGI1aZizGcJlHMLgx= 
       caps mds = "allow *"
       caps mon = "allow *"
       caps osd = "allow *"
       caps mgr = "allow *"

Dyna'r broblem. Roedd rhyw fath o nam: cafodd y clwstwr ei ail-greu... ond mewn gwirionedd, nid oedd.

Mae'n dod yn amlwg bod y cyfrinachau'n cynnwys allweddellau newydd eu creu, ac maen nhw dim o'n hen glwstwr. Felly:

  • Rydym yn cymryd y cylch allweddi monitor o ffeil /var/lib/rook/mon-a/data/keyring (neu o gopi wrth gefn);
  • Newidiwch y gadwyn allweddi yn gyfrinachol rook-ceph-mons-keyring;
  • cofrestru'r allweddell o'r gweinyddwr a monitro yn ConfigMap rook-ceph-mon;
  • Rydym yn tynnu rheolyddion pod gyda monitorau.

Ni fydd y wyrth yn hir i ddod: bydd y monitorau'n ymddangos ac yn dechrau gweithio. Hwre, mae dechrau wedi'i wneud!

Byddwn yn adfer yr OSD

Awn ni i'r pod rook-operatorher ceph mon dump yn dangos bod yr holl fonitorau yn eu lle, a ceph -s - eu bod mewn cworwm. Fodd bynnag, os edrychwch ar goeden yr OSD (ceph osd tree), fe welwn ni rywbeth rhyfedd: mae OSDs wedi dechrau ymddangos, ond maen nhw'n wag. Mae'n ymddangos bod angen eu hadfer nhw rywsut hefyd. Ond sut?

Yn y cyfamser, mae'r ConfigMaps wedi caffael y nodweddion yr oeddem eu hangen mor daer. rook-ceph-config и rook-config-override, yn ogystal â llawer o Fapiau Cyfluniad eraill gydag enwau fel rook-ceph-osd-$nodename-configGadewch i ni edrych arnyn nhw:

kind: ConfigMap
data:
 osd-dirs: '{"/mnt/osd1":16,"/mnt/osd2":18}'

Mae popeth yn anghywir, mae popeth wedi'i gymysgu!

Gadewch i ni raddio'r pod gweithredwr i sero, dileu'r Deployments pod a gynhyrchwyd gydag OSD, a thrwsio'r ConfigMaps hyn. Ond o ble rydyn ni'n eu cael nhw? cywir Map OSD yn ôl nodau?

  • Gadewch i ni geisio cloddio drwy'r cyfeiriaduron eto. /mnt/osd[1-2] ar y clymau - yn y gobaith y gallwn ddal gafael ar rywbeth yno.
  • Yn y catalog /mnt/osd1 Mae 2 is-gyfeiriadur: osd0 и osd16. Yr un olaf yw'r union ID a bennwyd yn ConfigMap (16)?
  • Gadewch i ni wirio'r dimensiynau a gweld hynny osd0 llawer mwy osd16.

Rydym yn dod i'r casgliad bod osd0 - dyma'r OSD gofynnol, a nodwyd fel /mnt/osd1 yn ConfigMap (oherwydd ein bod ni'n defnyddio OSD sy'n seiliedig ar gyfeiriadur.)

Gam wrth gam, rydym yn gwirio'r holl nodau ac yn golygu'r ConfigMaps. Ar ôl cwblhau'r holl gyfarwyddiadau, gallwn lansio'r pod gweithredwr Rook a darllen ei logiau. Ac mae popeth yn edrych yn wych:

  • Gweithredwr clwstwr ydw i;
  • Fe wnes i ddod o hyd i ddisgiau ar y nodau;
  • Des i o hyd i fonitorau;
  • daeth y monitoriaid yn ffrindiau, h.y. ffurfion nhw gworwm;
  • Rwy'n rhedeg gosodiadau OSD...

Gadewch i ni fewngofnodi'n ôl i'r pod gweithredwr Rook a gwirio iechyd y clwstwr... ie, roedden ni braidd yn anghywir gyda'n henwau OSD ar rai nodau! Dim problem: fe wnaethon ni addasu'r ConfigMaps eto, tynnu'r cyfeiriaduron ychwanegol o'r OSDs newydd, a chyrraedd y cyflwr hir-ddisgwyliedig. HEALTH_OK!

Gadewch i ni edrych ar y delweddau yn y pwll:

# rbd ls -p kube
pvc-9cfa2a98-b878-437e-8d57-acb26c7118fb
pvc-9fcc4308-0343-434c-a65f-9fd181ab103e
pvc-a6466fea-bded-4ac7-8935-7c347cff0d43
pvc-b284d098-f0fc-420c-8ef1-7d60e330af67
pvc-b6d02124-143d-4ce3-810f-3326cfa180ae
pvc-c0800871-0749-40ab-8545-b900b83eeee9
pvc-c274dbe9-1566-4a33-bada-aabeb4c76c32
…

Mae popeth yn ei le - mae'r clwstwr wedi'i achub!

Dw i'n rhy ddiog i wneud copïau wrth gefn, neu'r ffordd gyflym

Os gwnaed copïau wrth gefn ar gyfer Rook, byddai'r weithdrefn adfer yn llawer symlach ac yn crynhoi i'r canlynol:

  1. Rydym yn graddio'r defnydd o weithredwr Rook i sero;
  2. Rydym yn tynnu pob defnydd ac eithrio'r gweithredwr Rook;
  3. Rydym yn adfer yr holl gyfrinachau a ConfigMaps o gopi wrth gefn;
  4. Adfer cynnwys cyfeiriadur /var/lib/rook/mon-* ar y nodau;
  5. Rydym yn adfer (os caiff ei golli'n sydyn) CRD CephCluster, CephFilesystem, CephBlockPool, CephNFS, CephObjectStore;
  6. Rydym yn graddio'r defnydd o weithredwr Rook yn ôl i 1.

Awgrymiadau Defnyddiol

Gwneud copïau wrth gefn!

Ac i osgoi sefyllfaoedd lle mae angen adferiad ohonynt:

  1. Cyn cyflawni gwaith clwstwr ar raddfa fawr sy'n cynnwys ailgychwyn gweinyddion, graddiwch y gweithredwr Rook i sero fel nad yw'n gwneud unrhyw beth ychwanegol.
  2. Ar fonitorau ymlaen llaw ychwanegu nodAffinedd.
  3. Rhowch sylw i'r rhagarweiniol gosod terfynau amser ROOK_MON_HEALTHCHECK_INTERVAL и ROOK_MON_OUT_TIMEOUT.

Yn hytrach na i gasgliad

Does dim pwynt dadlau bod Rook, fel haen ychwanegol (yng nghynllun trefniadaeth storio Kubernetes cyffredinol), yn symleiddio llawer o bethau ac yn cyflwyno cymhlethdodau newydd a phroblemau seilwaith posibl. Yr unig beth sydd ar ôl i'w wneud yw gwneud dewis cytbwys a gwybodus rhwng y risgiau hyn, ar y naill law, a'r manteision y mae'r ateb yn eu cynnig i'ch sefyllfa benodol, ar y llaw arall.

Gyda llaw, yn ddiweddar yn nogfennaeth y Rook ychwanegwyd Mae'r adran "Mabwysiadu clwstwr Rook Ceph presennol i glwstwr Kubernetes newydd" yn disgrifio'n fanylach beth sydd angen ei wneud i fudo data presennol i glwstwr Kubernetes newydd neu i adfer clwstwr sydd wedi methu am un rheswm neu'i gilydd.

PS

Darllenwch hefyd ar ein blog:

Ffynhonnell: hab.com

Prynu gwesteio dibynadwy ar gyfer gwefannau sydd â diogelwch DDoS, gweinyddwyr VPS VDS 🔥 Prynu cynnal gwefannau dibynadwy gyda diogelwch DDoS, gweinyddion VPS VDS | ProHoster