Iṣilọ lainidi ti MongoDB si Kubernetes

Iṣilọ lainidi ti MongoDB si Kubernetes

Nkan yii tẹsiwaju wa to šẹšẹ ohun elo nipa ijira RabbitMQ ati igbẹhin si MongoDB. Niwọn bi a ti ṣetọju ọpọlọpọ awọn Kubernetes ati awọn iṣupọ MongoDB, a wa si iwulo ti ara lati gbe data lati fifi sori ẹrọ kan si omiiran ati ṣe laisi akoko isinmi. Awọn oju iṣẹlẹ akọkọ jẹ kanna: gbigbe MongoDB lati foju / olupin hardware si Kubernetes tabi gbigbe MongoDB laarin iṣupọ Kubernetes kanna (lati aaye orukọ kan si omiiran).

Ohunelo wa jẹ ipinnu fun awọn ọran nibiti iṣupọ MongoDB atijọ wa (fun apẹẹrẹ, ti awọn apa 3 ati ti o wa boya tẹlẹ ninu K8s tabi lori awọn olupin agbalagba) pẹlu eyiti ohun elo kan ti gbalejo ni Kubernetes nṣiṣẹ:

Iṣilọ lainidi ti MongoDB si Kubernetes

Bawo ni a ṣe le gbe iru iṣupọ kan si iṣelọpọ tuntun ni Kubernetes?

Yii

Algorithm ijira gbogbogbo jẹ iru si eyiti a ṣalaye ninu ipo pẹlu RabbitMQ.

O ṣe pataki lati ṣe akiyesi pe gbigbe nilo pe MongoDB ati awọn olupin Kubernetes wa lori nẹtiwọọki kanna. Awọn apa iṣupọ MongoDB yoo ṣe ibasọrọ pẹlu ara wọn ni lilo IP ti awọn olupin atijọ (nibiti awọn fifi sori ẹrọ MongoDB atijọ wa) ati nipasẹ awọn orukọ DNS ti awọn adarọ-ese pẹlu MongoDB ni K8s. Nitorinaa, lori awọn olupin ohun elo (pẹlu awọn fifi sori ẹrọ atijọ) iwọ yoo nilo lati dari awọn ipa-ọna si awọn adarọ-ese, lẹhinna tunto wọn lati lo olupin DNS ti n ṣiṣẹ ni Kubernetes (tabi forukọsilẹ awọn orukọ pataki ninu /etc/hosts, biotilejepe ni apapọ o jẹ dara lati yago fun yi seese).

Igbesẹ t’okan ni lati gbe iṣupọ MongoDB dide ni awọn adarọ-ese Kubernetes. Ninu ọran tiwa, iṣupọ data ni awọn apa 3 ati ipade kọọkan wa ni ipo K8s lọtọ - sibẹsibẹ, nọmba wọn le yatọ. Ninu ConfigMap o nilo lati pato adirẹsi ti MongoDB titunto si lati fifi sori ẹrọ atijọ: lẹhinna awọn apa MongoDB ti o wa ni awọn pods ni K8s yoo bẹrẹ mimuuṣiṣẹpọ pẹlu rẹ lẹsẹkẹsẹ.

Lẹhin ti gbogbo awọn adarọ-ese ti wa ni oke, iṣupọ MongoDB kan ti awọn apa 6 ti ṣẹda:

Iṣilọ lainidi ti MongoDB si Kubernetes

Jọwọ ṣe akiyesi pe awọn adarọ-ese yoo gba akoko pipẹ lati dide, niwọn igba ti a ṣe ifilọlẹ podu kọọkan ni titan, ati ni akoko ifilọlẹ o mu data ṣiṣẹpọ lati ọdọ oluwa.

O le yipada ohun elo rẹ lati lo awọn olupin MongoDB tuntun:

Iṣilọ lainidi ti MongoDB si Kubernetes

Gbogbo ohun ti o ku ni lati yọ awọn apa atijọ kuro ninu iṣupọ MongoDB, lẹhin eyi gbigbe le jẹ pe o pe:

Iṣilọ lainidi ti MongoDB si Kubernetes

Nigbagbogbo a lo ero yii ni iṣelọpọ ati, fun irọrun ti lilo, a ṣe imuse rẹ laarin module fun addoni-onišẹ (awa laipe kede), eyiti ngbanilaaye awọn atunto MongoDB aṣoju lati pin kaakiri ọpọlọpọ awọn iṣupọ. A gbero lati ṣe atẹjade awọn modulu wa laipẹ, ṣugbọn fun bayi a ṣafihan awọn itọnisọna lọtọ pẹlu eyiti o le gbiyanju ojutu ti a dabaa ni iṣe laisi lilo oniṣẹ ẹrọ addon.

Jẹ ki a gbiyanju rẹ ni iṣe

awọn ibeere

Awọn ibeere:

  • Kubernetes iṣupọ (minikube yoo tun ṣiṣẹ);
  • iṣupọ MongoDB (le ṣe ran lọ sori irin igboro, ati ṣe bi iṣupọ deede ni Kubernetes lati iwe aṣẹ Helm osise).

Ninu apẹẹrẹ ni isalẹ, iṣupọ MongoDB atijọ yoo jẹ orukọ mongo-old ati fi sori ẹrọ ni iṣupọ Kubernetes kanna, nibiti a yoo fi sori ẹrọ tuntun nigbamii (mongo-new).

Ngbaradi iṣupọ atijọ

1. Fun apẹẹrẹ ti n ṣe afihan ero ti a ṣalaye ni iṣe, jẹ ki a ṣẹda “atijọ” (ie, koko ọrọ si ijira) MongoDB iṣupọ taara ni Kubernetes (ni otitọ, o le wa lori awọn olupin lọtọ ni ita ti K8s). Lati ṣe eyi, ṣe igbasilẹ iwe apẹrẹ Helm:

helm fetch --untar stable/mongodb-replicaset

... ki o si ṣatunkọ rẹ diẹ nipa siseto aṣẹ:

auth:
  enabled: true
  adminUser: mongo
  adminPassword: pa33w0rd
  # metricsUser: metrics
  # metricsPassword: password
  # key: keycontent
  # existingKeySecret:
  # existingAdminSecret:
  # exisitingMetricsSecret:

tun ni values.yaml o le tunto awọn iwe-ẹri ati pupọ diẹ sii.

2. Fi sori ẹrọ chart naa:

helm install . --name mongo-old --namespace mongo-old

Lẹhin eyi, idanwo “atijọ” fifi sori ẹrọ ti MongoDB yoo ṣe ifilọlẹ:

kubectl --namespace=mongo-old get pods

Iṣilọ lainidi ti MongoDB si Kubernetes

Jẹ ki a lọ sinu podu pẹlu oluwa rẹ ki o ṣẹda aaye data idanwo kan:

kubectl --namespace=mongo-old exec -ti mongo-old-mongodb-replicaset-0 mongo
use admin
db.auth('mongo','password')
use music
db.artists.insert({ artistname: "The Tea Party" })
show dbs

Iṣilọ lainidi ti MongoDB si Kubernetes

Lilọ sinu awọn adarọ-ese oriṣiriṣi, Mo rii pe oluwa wa mongo-old-mongodb-replicaset-0. Sibẹsibẹ, fun ojutu irọrun diẹ sii si ọran yii, lẹhin fifi sori iwe-aṣẹ Helm, aṣẹ kan ti han lori bii o ṣe le pinnu. MASTER_POD. Ninu ọran mi (fun mongo-old ti awọn apa 3) o dabi eyi:

for ((i = 0; i < 3; ++i)); do kubectl exec --namespace mongo-old mongo-old-mongodb-replicaset-$i -- sh -c 'mongo --eval="printjson(rs.isMaster())"'; done

Ni aaye yii, igbaradi ti fifi sori MongoDB atijọ, data eyiti yoo gbe, ti ṣetan.

Gbe Iṣipopada MongoDB kan

Bayi jẹ ki a gbe fifi sori ẹrọ tuntun ti MongoDB, eyiti yoo wa ni Kubernetes ati lilo nipasẹ ohun elo ni iṣelọpọ.

NBJọwọ ṣe akiyesi pe ẹya kanna ti MongoDB gbọdọ ṣee lo bi iṣaaju. Bibẹẹkọ, eewu ti awọn iṣoro ibamu wa.

Nipa afiwe pẹlu apakan ti tẹlẹ (nibiti a ti ṣe adaṣe fifi sori ẹrọ MongoDB “atijọ”), jẹ ki a mu iwe-aṣẹ Helm ti a mẹnuba tẹlẹ (pẹlu aṣẹ naa helm fetch) ati tunto aṣẹ, bakanna bi awọn paramita miiran, ti o ba lo. Ni afikun, a yoo ṣe atunṣe faili naa init/on-start.sh, fifi kun fun igba diẹ lori laini 165 adirẹsi oluwa ti o gba ni igbesẹ iṣaaju (tabi ti a mọ fun ọ lati fifi MongoDB sori olupin kọọkan):

peers='mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017'

A ti ṣetan lati ṣẹda fifi sori MongoDB tuntun kan:

helm install . --name mongo-new --namespace mongo-new

A duro titi gbogbo awọn adarọ-ese yoo bẹrẹ (ti data ba wa pupọ, lẹhinna ifilọlẹ wọn le gba awọn wakati):

Iṣilọ lainidi ti MongoDB si Kubernetes

Bayi a ṣe exec si adarọ ese tuntun ki o wo atokọ ti awọn data data:

kubectl --namespace=mongo-new exec -ti mongo-new-mongodb-replicaset-0 mongo

Iṣilọ lainidi ti MongoDB si Kubernetes

Awọn iṣupọ MongoDB meji ni idapo sinu ọkan, ti o ni awọn apa 6.

Ni aaye yii, o le yi ohun elo pada si iṣupọ tuntun, ṣugbọn awọn igbesẹ diẹ lo wa lati pari iṣiwa naa.

Lati faili init/on-start.sh ninu fifi sori tuntun a yọ laini ti a ṣafikun:

peers='mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017'

Nisisiyi ẹ ​​​​jẹ ki a lọ si oluwa iṣupọ atijọ ki o si "ju" rẹ - lẹhinna a yoo yan oluwa tuntun si iṣupọ naa. A lọ sinu podu pẹlu MongoDB titunto si:

kubectl --namespace=mongo-old exec -ti mongo-old-mongodb-replicaset-0 mongo
use admin
db.auth('mongo','password')

Lẹhin iyẹn, a yipada awọn pataki ti awọn apa ati yi awọn oluwa pada:

cfg = rs.conf()
cfg.members[5].priority = 2
rs.reconfig(cfg)
rs.stepDown(120)

Ipade ti o wa lọwọlọwọ ti dẹkun lati jẹ oga – ibode tuntun ni yoo yan. Niwọn igba ti a ti yipada awọn pataki, ipade ti a nilo yoo di oluwa.

NB: Nipa aiyipada, gbogbo awọn apa MongoDB ni pataki ti 1. Loke, a gbe pataki ti ipade ti a nilo lati 2. Nitorinaa, ọmọ ẹgbẹ kan ti iṣupọ tuntun dajudaju di ọga gbogbogbo. O le ka diẹ sii nipa bii awọn ọna ṣiṣe wọnyi ṣe n ṣiṣẹ ni MongoDB ninu iwe.

Jẹ ki a mu fifi sori MongoDB atijọ kuro, lẹhinna lọ si oluṣeto tuntun ki o paarẹ awọn apa atijọ:

rs.remove("mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017")
rs.remove("mongo-old-mongodb-replicaset-1.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017")
rs.remove("mongo-old-mongodb-replicaset-2.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017")

Lẹhin eyi, a le ka ijira naa pe: a ti yipada ni aṣeyọri lati iṣupọ MongoDB atijọ si tuntun!

Awọn esi

Eto ti a ṣapejuwe dara fun gbogbo awọn ọran nigbati o nilo lati jade MongoDB tabi nirọrun gbe si iṣupọ tuntun kan.

Boya nuance akọkọ nigbati gbigbe ni iwulo lati dari awọn adirẹsi IP ti awọn adarọ-ese tuntun si awọn olupin ti fifi sori MongoDB atijọ, ti o ba wa ni ita ti K8s, ati lati lorukọ wọn ni deede ni DNS (tabi /etc/hosts). Ninu apẹẹrẹ, awọn igbesẹ wọnyi ko nilo, niwọn igba ti iṣiwa naa waye laarin awọn aaye orukọ oriṣiriṣi ti iṣupọ Kubernetes kanna.

PS

Ka tun lori bulọọgi wa:

orisun: www.habr.com

Ra alejo gbigba igbẹkẹle fun awọn aaye pẹlu aabo DDoS, awọn olupin VPS VDS 🔥 Ra gbigbalejo oju opo wẹẹbu ti o gbẹkẹle pẹlu aabo DDoS, awọn olupin VPS VDS | ProHoster