
Vi , hur/varför vi gillar Rook: det förenklar avsevÀrt arbetet med lagringslösningar i Kubernetes-kluster. Men med denna enkelhet följer ocksÄ vissa svÄrigheter. Vi hoppas att det nya materialet hjÀlper till att bÀttre förstÄ dessa svÄrigheter innan de uppstÄr.
För att göra lÀsningen mer intressant, lÄt oss börja med konsekvenser av den hypotetiska problematiken i klustret.
âAllt Ă€r förlorat!"
TÀnk dig att du en dag har konfigurerat och startat Rook i ditt K8s-kluster, och den fungerar som den ska, men vid nÄgot "underbart" ögonblick hÀnder följande:
- Nya poddar kan inte montera RBD-bilder frÄn Ceph.
- Kommandon som
lsblkochdffungerar inte pÄ Kubernetes-noder. Detta innebÀr automatiskt: "nÄgot Àr fel" med de monterade RBD-bilderna. De kan inte lÀsas, vilket tyder pÄ att monitorerna Àr otillgÀngliga... - Ja, det finns inga fungerande monitorer i klustret. Dessutom finns det inte ens nÄgra poddar med OSD eller en podd MGR.
NĂ€r podden startades : bland de betydande förĂ€ndringarna i Rook 1.0.0 relaterade till Ceph, kan man notera stödet för Ceph Nautilus och möjligheten att anvĂ€nda NFS för CephFS- eller RGW-behĂ„llare. Bland annat framhĂ€vs "mognaden" av stödet för EdgeFS till beta-nivĂ„.? ĐĐ” ŃаĐș ЎаĐČĐœĐŸ, ĐșаĐș Đ”ĐłĐŸ ĐŽĐ”ĐżĐ»ĐŸĐžĐ»Đž. ĐĐŸŃĐ”ĐŒŃ? Rook-operator ŃĐ”ŃОл ŃЎДлаŃŃ ĐœĐŸĐČŃĐč ĐșлаŃŃĐ”Ń⊠ĐаĐș жД ĐœĐ°ĐŒ ŃДпДŃŃ ĐČĐŸŃŃŃĐ°ĐœĐŸĐČĐžŃŃ ŃĐ°Đ±ĐŸŃŃ ĐșлаŃŃĐ”Ńа Đž ĐŽĐ°ĐœĐœŃĐ” ĐČ ĐœŃĐŒ?
Först ska vi ta en mer intressant och lÄng vÀg, och göra en noggrann utredning av Rooks "inuti" och steg-för-steg ÄterstÀllning av dess komponenter. SjÀlvklart finns det en kortare och mera korrekt vÀg: att anvÀnda sÀkerhetskopior. Som bekant delas administratörer in i tvÄ typer: de som inte gör sÀkerhetskopior och de som redan gör dem... Men mer om det efter utredningen.
Lite praktik, eller den lÄnga vÀgen
LÄt oss titta pÄ och ÄterstÀlla monitorerna
SÄ vi ser pÄ listan över ConfigMap:ar: dÀr finns de som behövs för sÀkerhetskopiering rook-ceph-config och rook-config-override. De visas vid en lyckad deployment av klustret.
NB: I nya versioner, efter antagandet av , har ConfigMap:ar slutat vara en indikator pÄ framgÄngsrik distribution av klustret.
För att fortsÀtta med vÄra ÄtgÀrder behöver vi en hÄrd omstart av alla servrar dÀr monterade RBD-bilder finns (ls /dev/rbd*). Det mÄste göras via sysrq (eller "till fots" i datacentret). Detta krav beror pÄ behovet av att avmontera de monterade RBD-bilderna, vilket en vanlig omstart inte gÄr att anvÀnda för (det skulle bli misslyckat att försöka avmontera dem pÄ ett normalt sÀtt).
Teatern börjar med klÀdhÀngaren och Ceph-klustret med monitorerna. LÄt oss titta pÄ dem.
Rook monterar sÄdana entiteter i monitorpodden:
Volymer:
rook-ceph-config:
Typ: ConfigMap (ett volym som fylls med en ConfigMap)
Namn: rook-ceph-config
rook-ceph-mons-keyring:
Typ: Secret (ett volym som fylls med en Secret)
SecretName: rook-ceph-mons-keyring
rook-ceph-log:
Typ: HostPath (ren vÀrd katalog volym)
SökvÀg: /var/lib/rook/kube-rook/log
ceph-daemon-data:
Typ: HostPath (ren vÀrd katalog volym)
SökvÀg: /var/lib/rook/mon-a/data
Monteringar:
/etc/ceph frÄn rook-ceph-config (ro)
/etc/ceph/keyring-store/ frÄn rook-ceph-mons-keyring (ro)
/var/lib/ceph/mon/ceph-a frÄn ceph-daemon-data (rw)
/var/log/ceph frÄn rook-ceph-log (rw) LÄt oss se vad som finns i hemligheten rook-ceph-mons-keyring:
typ: Secret
data:
keyring: LongBase64EncodedString=Vi dekodar och fÄr en vanlig keyring med rÀttigheter för administratören och monitorerna:
[mon.]
nyckel = AQAhT19dlUz0LhBBINv5M5G4YyBswyU43RsLxA==
rÀttigheter mon = "allow *"
[client.admin]
nyckel = AQAhT19d9MMEMRGG+wxIwDqWO1aZiZGcGlSMKp==
rÀttigheter mds = "allow *"
rÀttigheter mon = "allow *"
rÀttigheter osd = "allow *"
rÀttigheter mgr = "allow *" Kom ihÄg det. LÄt oss nu titta pÄ keyring i hemligheten rook-ceph-admin-keyring:
typ: Secret
data:
keyring: anotherBase64EncodedString=Vad finns i den?
[client.admin]
nyckel = AQAhT19d9MMEMRGG+wxIwDqWO1aZiZGcGlSMKp==
rÀttigheter mds = "allow *"
rÀttigheter mon = "allow *"
rÀttigheter osd = "allow *"
rÀttigheter mgr = "allow *" Samma. LÄt oss titta vidare⊠HÀr Àr till exempel en hemlighet rook-ceph-mgr-a-keyring:
[mgr.a]
nyckel = AQBZR19dbVeaIhBBXFYyxGyusGf8x1bNQunuew==
rÀttigheter mon = "allow *"
rÀttigheter mds = "allow *"
rÀttigheter osd = "allow *" Till slut hittar vi ytterligare nÄgra hemligheter i ConfigMap: rook-ceph-mon:
typ: Secret
data:
admin-secret: AQAhT19d9MMEMRGG+wxIwDqWO1aZiZGcGlSMKp==
cluster-name: a3ViZS1yb29r
fsid: ZmZiYjliZDMtODRkOS00ZDk1LTczNTItYWY4MzZhOGJkNDJhCg==
mon-secret: AQAhT19dlUz0LhBBINv5M5G4YyBswyU43RsLxA==Och detta Àr den ursprungliga listan med keyringar, dÀrifrÄn alla ovan nÀmnda hemligheter hÀmtas.
Som bekant (se dataDirHostPath pÄ ), lagrar Rook sÄdana data pÄ tvÄ stÀllen. SÄ lÄt oss gÄ till noderna för att se keyringarna som ligger i katalogerna som Àr monterade i pods med monitorer och OSD. För detta ÀndamÄl finner vi pÄ noder /var/lib/rook/mon-a/data/keyring och ser:
# cat /var/lib/rook/mon-a/data/keyring
[mon.]
key = AXAbS19d8NNUXOBB+XyYwXqXI1asIzGcGlzMGg==
caps mon = "allow *"Ăverraskande nog visade sig den hĂ€r hemligheten vara en annan â inte som i ConfigMap.
Men vad sÀgs om admin keyring? Den finns ocksÄ hos oss:
# 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 *"HÀr ligger problemet. Det intrÀffade ett slags fel: klustret Äterskapades⊠men i sjÀlva verket finns det inte.
Det blir tydligt att hemligheterna lagrar nyligen genererade keyringar, och de inte Àr frÄn vÄrt gamla kluster. DÀrför:
- tar vi keyringen frÄn monitorn frÄn filen
/var/lib/rook/mon-a/data/keyring(eller frÄn en backup); - Àndrar keyringen i hemligheten
rook-ceph-mons-keyring; - angiver keyringen frÄn admin och monitor i ConfigMap
rook-ceph-mon; - tar bort controllrarna för pods med monitorerna.
Ett mirakel lÄter inte vÀnta pÄ sig: monitorerna kommer att dyka upp och starta. Hurra, det Àr en början!
LÄt oss ÄterstÀlla OSD
Vi gĂ„r in i podden rook-operator: anropar ceph mon dump visar att alla monitorer Ă€r pĂ„ plats, och ceph -s â pĂ„ att de Ă€r i quorum. Men om vi ser pĂ„ OSD-trĂ€det (root@ceph01-q:~# ceph osd tree), kommer vi att se nĂ„got konstigt: OSD:erna började dyka upp, men de Ă€r tomma. Det verkar som att vi ocksĂ„ mĂ„ste Ă„terstĂ€lla dem pĂ„ nĂ„got sĂ€tt. Men hur?
Under tiden har det dykt upp de ConfigMap:ar som vi verkligen behöver rook-ceph-config och rook-config-override, samt mÄnga andra ConfigMap:ar med namn som rook-ceph-osd-$nodename-config. LÄt oss ta en titt pÄ dem:
kind: ConfigMap
data:
osd-dirs: '{"/mnt/osd1":16,"/mnt/osd2":18}'Det Àr inte rÀtt, allt Àr blandat!
Vi ska skala ner operatörens pod till noll, ta bort de genererade Deployment:erna av OSD-poddarna och fixa dessa ConfigMap:ar. Men var ska vi fÄ den korrekta OSD-kartan per noder?
- LÄt oss försöka grÀva igenom mapparna
/mnt/osd[1-2]pĂ„ noderna â i hopp om att vi kan fĂ„ nĂ„got dĂ€r. - I kataloget
/mnt/osd1det finns 2 underkataloger:osd0ochosd16. Sista â det Ă€r ju precis den ID som anges i ConfigMap (16)? - Vi kontrollerar storlekarna och ser att
osd0mycket störreosd16.
Vi kommer fram till att osd0 â det Ă€r den OSD som angavs som /mnt/osd1 i ConfigMap (eftersom vi anvĂ€nder .)
Steg för steg kontrollerar vi alla noder och rÀttar till ConfigMap:arna. Efter alla ÄtgÀrder kan vi starta Rook-operatorens pod och lÀsa dess loggar. Och i dem Àr allt fantastiskt:
- jag Àr klusteroperator;
- jag har hittat diskar pÄ noderna;
- jag har hittat monitorer;
- monitorerna har kommit överens, det vill sÀga bildat quorum;
- jag startar OSD-deployment:erâŠ
LÄt oss gÄ tillbaka till Rook-operatörens pod och kontrollera klustrets hÀlsa⊠ja, vi gjorde nÄgra smÄ misstag med namnen pÄ OSD pÄ vissa noder! Ingen fara: vi har rÀttat till ConfigMap:arna, tagit bort onödiga mappar frÄn nya OSD och kommit till det efterlÀngtade tillstÄndet HEALTH_OK!
Vi kontrollerar bilderna i poolen:
# 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
âŠAllt Ă€r pĂ„ plats â klustret Ă€r rĂ€ddat!
Jag Àr lat med att göra sÀkerhetskopior, eller Snabb vÀg
Om sÀkerhetskopior för Rook gjordes, blir ÄterstÀllningsproceduren betydligt enklare och handlar om följande:
- Skala ner Rook-operatorens deployment till noll;
- Ta bort alla deployment:er förutom Rook-operatorn;
- à terstÀll alla secret:er och ConfigMap:ar frÄn sÀkerhetskopian;
- Ă
terstÀll innehÄllet i mapparna
/var/lib/rook/mon-*pĂ„ noderna; - Ă
terstÀll (om vi av misstag har tappat bort dem) CRD
CephCluster,CephFilesystem,CephBlockPool,CephNFS,CephObjectStore; - Skala upp Rook-operatorns deployment till 1 igen.
Nyttiga tips
Gör sÀkerhetskopior!
Och för att undvika situationer dÀr ÄterstÀllning kan behövas:
- Innan stora arbeten med klustret, som innebÀr omstart av servrar, skala ner Rook-operatorn till noll sÄ att den inte gör nÄgot överflödigt.
- Till monitorerna i förvÀg .
- Ge uppmÀrksamhet Ät den preliminÀra
ROOK_MON_HEALTHCHECK_INTERVALochROOK_MON_OUT_TIMEOUT.
Avslutande
Det Àr meningslöst att diskutera att Rook, som en extra "skikt" (i den övergripande strukturen för lagringsorganisation i Kubernetes), bÄde förenklar mycket men ocksÄ tillför nya komplexiteter och potentiella problem i infrastrukturen. FrÄgan kvarstÄr att göra ett vÀl avvÀgt och motiverat val mellan dessa risker Ä ena sidan och den nytta som lösningen ger i just ditt fall Ä andra sidan.
För övrigt, nyligen i Rook-dokumentationen avsnittet "Adopt an existing Rook Ceph cluster into a new Kubernetes cluster". HÀr beskrivs mer i detalj vad som behöver göras för att flytta befintlig data till en ny Kubernetes-kluster eller ÄterstÀlla funktionaliteten i ett kluster som kollapsat av en eller annan anledning.
P.S.
LÀs Àven i vÄr blogg:
- «»;
- «»;
- «».
- «».
KĂ€lla: habr.com
