ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π½Π°Ρ
ΠΠ°Ρ ΡΠ΅ΡΠ΅ΠΏΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡΠ΅Ρ ΡΡΠ°ΡΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ MongoDB (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· 3 ΡΠ·Π»ΠΎΠ² ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π»ΠΈΠ±ΠΎ ΡΠΆΠ΅ Π² K8s, Π»ΠΈΠ±ΠΎ Π½Π° ΡΡΠ°ΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ ), Ρ ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΠΎΠ΅ Π² Kubernetes:
ΠΠ°ΠΊ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Π² Π½ΠΎΠ²ΡΠΉ production Π² Kubernetes?
Π’Π΅ΠΎΡΠΈΡ
ΠΠ±ΡΠΈΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌΡ Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ Ρ RabbitMQ.
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΠ΅ΡΠ²Π΅ΡΡ Ρ MongoDB ΠΈ Kubernetes Π½Π°Ρ
ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΠΈ. Π£Π·Π»Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° MongoDB Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°ΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΎΠ±ΠΎΠΉ ΠΏΠΎ IP ΡΡΠ°ΡΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² (Π³Π΄Π΅ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ ΡΡΠ°ΡΡΠ΅ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ MongoDB) ΠΈ ΠΏΠΎ DNS-ΠΈΠΌΠ΅Π½Π°ΠΌ podβΠΎΠ² Ρ MongoDB Π² K8s. ΠΠΎΡΡΠΎΠΌΡ Π½Π° ΠΆΠ΅Π»Π΅Π·Π½ΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
(ΡΠΎ ΡΡΠ°ΡΡΠΌΠΈ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΡΠΌΠΈ) ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ±ΡΠΎΡΠΈΡΡ ΠΌΠ°ΡΡΡΡΡΡ Π΄ΠΎ podβΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΈΡ
Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ DNS-ΡΠ΅ΡΠ²Π΅ΡΠ°, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ Π² Kubernetes (ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ Π½ΡΠΆΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π² /etc/hosts
, Ρ
ΠΎΡΡ Π² ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠ°ΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π»ΡΡΡΠ΅ ΠΈΠ·Π±Π΅Π³Π°ΡΡ).
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π³ β ΠΏΠΎΠ΄Π½ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ MongoDB Π² podβΠ°Ρ Kubernetes. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΠ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· 3 ΡΠ·Π»ΠΎΠ² ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ·Π΅Π» ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ podβΠ΅ K8s β Π²ΠΏΡΠΎΡΠ΅ΠΌ, ΠΈΡ ΡΠΈΡΠ»ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠΌ. Π ConfigMapβΠ΅ Π½Π°Π΄ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΌΠ°ΡΡΠ΅ΡΠ° MongoDB ΠΈΠ· ΡΡΠ°ΡΠΎΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ: ΡΠΎΠ³Π΄Π° ΡΠ·Π»Ρ MongoDB, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² podβΠ°Ρ Π² K8s, ΡΡΠ°Π·Ρ Π½Π°ΡΠ½ΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Ρ Π½ΠΈΠΌ.
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ podβΡ ΠΏΠΎΠ΄Π½ΠΈΠΌΡΡΡΡ, ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ MongoDB ΠΈΠ· 6 ΡΠ·Π»ΠΎΠ²:
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ podβΡ Π±ΡΠ΄ΡΡ Π΄ΠΎΠ»Π³ΠΎ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°ΡΡΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ pod Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ, Π° Π² ΠΌΠΎΠΌΠ΅Π½Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°.
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² MongoDB:
Π ΠΎΡΡΠ°Π½Π΅ΡΡΡ Π»ΠΈΡΡ ΡΠ΄Π°Π»ΠΈΡΡ ΡΡΠ°ΡΡΠ΅ ΡΠ·Π»Ρ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ΅ΡΠ° MongoDB, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΏΠ΅ΡΠ΅Π΅Π·Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ Π·Π°Π²Π΅ΡΡΡΠ½Π½ΡΠΌ:
Π’Π°ΠΊΡΡ ΡΡ
Π΅ΠΌΡ ΠΌΡ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π² production ΠΈ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π² ΡΠ°ΠΌΠΊΠ°Ρ
ΠΌΠΎΠ΄ΡΠ»Ρ ΠΊ
ΠΡΠΎΠ±ΡΠ΅ΠΌ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅
Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ
Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ:
- ΠΠ»Π°ΡΡΠ΅Ρ Kubernetes (ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΠΈ minikube);
- ΠΠ»Π°ΡΡΠ΅Ρ MongoDB (ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡ Π½Π° bare metal, ΠΈ ΡΠ΄Π΅Π»Π°Π½ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Π² Kubernetes ΠΈΠ· ΠΎΡΠΈΡΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Helm-ΡΠ°ΡΡΠ°).
Π ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠ°ΡΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Ρ MongoDB Π±ΡΠ΄Π΅Ρ Π½Π°Π·Π²Π°Π½ mongo-old
ΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Kubernetes, Π³Π΄Π΅ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΠΈ Π½ΠΎΠ²ΡΠΉ (mongo-new
).
ΠΠΎΡΠΎΠ²ΠΈΠΌ ΡΡΠ°ΡΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ
1. ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠ΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ ΡΡ Π΅ΠΌΡ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ, ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Β«ΡΡΠ°ΡΡΠΉΒ» (Ρ.Π΅. ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°ΡΠΈΠΉ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ) ΠΊΠ»Π°ΡΡΠ΅Ρ MongoDB ΠΏΡΡΠΌΠΎ Π² Kubernetes (Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ ΠΈ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ Π²Π½Π΅ K8s). ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΊΠ°ΡΠ°Π΅ΠΌ Helm-ΡΠ°ΡΡ:
helm fetch --untar stable/mongodb-replicaset
β¦ ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΡΠ΅ΠΌ Π΅Π³ΠΎ, Π½Π°ΡΡΡΠΎΠΈΠ² Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ:
auth:
enabled: true
adminUser: mongo
adminPassword: pa33w0rd
# metricsUser: metrics
# metricsPassword: password
# key: keycontent
# existingKeySecret:
# existingAdminSecret:
# exisitingMetricsSecret:
Π’Π°ΠΊΠΆΠ΅ Π² values.yaml
ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅.
2. Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ°ΡΡ:
helm install . --name mongo-old --namespace mongo-old
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½Π° ΡΠ΅ΡΡΠΎΠ²Π°Ρ Β«ΡΡΠ°ΡΠ°ΡΒ» ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΡ MongoDB:
kubectl --namespace=mongo-old get pods
ΠΠ°ΠΉΠ΄Π΅ΠΌ Π² pod Ρ Π΅Ρ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ ΠΈ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΡΠΎΠ²ΡΡ Π±Π°Π·Ρ:
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
ΠΠ°Ρ
ΠΎΠ΄Ρ Π² ΡΠ°Π·Π½ΡΠ΅ pod’Ρ, Ρ Π²ΡΡΡΠ½ΠΈΠ», ΡΡΠΎ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ mongo-old-mongodb-replicaset-0
. ΠΠΏΡΠΎΡΠ΅ΠΌ, Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π²ΠΎΠΏΡΠΎΡΠ° ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Helm-ΡΠ°ΡΡΠ° Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΊΠ°ΠΊ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ MASTER_POD
. Π ΠΌΠΎΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ (Π΄Π»Ρ mongo-old
ΠΈΠ· 3 ΡΠ·Π»ΠΎΠ²) ΠΎΠ½Π° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π²ΠΎΡ ΡΠ°ΠΊ:
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
ΠΠ° ΡΡΠΎΠΌ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ° ΡΡΠ°ΡΠΎΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ MongoDB, Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡΡΡΡ, Π³ΠΎΡΠΎΠ²Π°.
ΠΠΈΠ³ΡΠ°ΡΠΈΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° MongoDB
Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΠ½ΡΠΌ Π½ΠΎΠ²ΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΡ MongoDB, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Kubernetes ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² production.
NB: ΠΠ±ΡΠ°ΡΠ°Ρ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅ Π²Π΅ΡΡΠΈΡ MongoDB, ΡΡΠΎ ΠΈ ΡΠ°Π½ΡΡΠ΅. Π ΠΈΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π΅ΡΡΡ ΡΠΈΡΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
ΠΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΡΠ°Π·Π΄Π΅Π»ΠΎΠΌ (Π³Π΄Π΅ ΠΌΡ ΠΈΠΌΠΈΡΠΈΡΠΎΠ²Π°Π»ΠΈ Β«ΡΡΠ°ΡΡΡΒ» ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ MongoDB), Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΡΠ½ΡΡΡΠΉ Helm-ΡΠ°ΡΡ (ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ helm fetch
) ΠΈ Π½Π°ΡΡΡΠΎΠΈΠΌ Π°Π²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΈΡΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°ΠΉΠ» init/on-start.sh
, Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² Π½Π΅Π³ΠΎ Π½Π° 165 ΡΡΡΠΎΠΊΠ΅ Π°Π΄ΡΠ΅Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌ ΡΡΠ°ΠΏΠ΅ (ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ Π²Π°ΠΌ ΠΏΠΎ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ MongoDB Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΡΠ΅ΡΠ²Π΅ΡΠ°Ρ
):
peers='mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017'
ΠΡ Π³ΠΎΡΠΎΠ²Ρ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ MongoDB:
helm install . --name mongo-new --namespace mongo-new
ΠΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΡ, ΠΏΠΎΠΊΠ° ΡΡΠ°ΡΡΡΡΡ Π²ΡΠ΅ podβΡ (Π΅ΡΠ»ΠΈ Π΄Π°Π½Π½ΡΡ ΠΌΠ½ΠΎΠ³ΠΎ, ΡΠΎ ΠΈΡ Π·Π°ΠΏΡΡΠΊ ΠΌΠΎΠΆΠ΅Ρ Π΄Π»ΠΈΡΡΡΡ ΡΠ°ΡΠ°ΠΌΠΈ):
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π΅Π»Π°Π΅ΠΌ exec
Π² Π½ΠΎΠ²ΡΠΉ pod ΠΈ ΡΠΌΠΎΡΡΠΈΠΌ ΡΠΏΠΈΡΠΎΠΊ Π±Π°Π·:
kubectl --namespace=mongo-new exec -ti mongo-new-mongodb-replicaset-0 mongo
ΠΠ²Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ° MongoDB ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½Ρ Π² ΠΎΠ΄ΠΈΠ½, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· 6 ΡΠ·Π»ΠΎΠ².
ΠΠ° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ, Π½ΠΎ Π΄Π»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ ΠΎΡΡΠ°Π»ΠΎΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π³ΠΎΠ².
ΠΠ· ΡΠ°ΠΉΠ»Π° init/on-start.sh
Π² Π½ΠΎΠ²ΠΎΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΡ Π½Π°ΠΌΠΈ ΡΡΡΠΎΠΊΡ:
peers='mongo-old-mongodb-replicaset-0.mongo-old-mongodb-replicaset.mongo-old.svc.cluster.local:27017'
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΉΠ΄Π΅ΠΌ Π² ΡΡΠ°ΡΡΠΉ ΠΌΠ°ΡΡΠ΅Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈ Β«ΡΠ²Π΅ΡΠ³Π½Π΅ΠΌΒ» Π΅Π³ΠΎ β ΡΠΎΠ³Π΄Π° Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Π±ΡΠ΄Π΅Ρ Π½Π°Π·Π½Π°ΡΠ΅Π½ Π½ΠΎΠ²ΡΠΉ ΠΌΠ°ΡΡΠ΅Ρ. ΠΠ°Ρ ΠΎΠ΄ΠΈΠΌ Π² pod Ρ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ MongoDB:
kubectl --namespace=mongo-old exec -ti mongo-old-mongodb-replicaset-0 mongo
use admin
db.auth('mongo','password')
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ Ρ ΡΠ·Π»ΠΎΠ² ΠΈ ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΌΠ°ΡΡΠ΅ΡΠ°:
cfg = rs.conf()
cfg.members[5].priority = 2
rs.reconfig(cfg)
rs.stepDown(120)
Π’Π΅ΠΊΡΡΠΈΠΉ ΡΠ·Π΅Π» ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» Π±ΡΡΡ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ β ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ Π²ΡΠ±ΠΎΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΡ ΠΏΠΎΠΌΠ΅Π½ΡΠ»ΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΡ, ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ ΡΡΠ°Π½Π΅Ρ Π½ΡΠΆΠ½ΡΠΉ Π½Π°ΠΌ ΡΠ·Π΅Π».
NB: ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Ρ Π²ΡΠ΅Ρ
ΡΠ·Π»ΠΎΠ² MongoDB ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΡΠ°Π²Π΅Π½ 1. ΠΡΡΠ΅ ΠΌΡ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ Π΄ΠΎ 2 ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Ρ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ Π½Π°ΠΌ ΡΠ·Π»Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±ΡΠΈΠΌ ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ ΡΠΎΡΠ½ΠΎ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ»Π΅Π½ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½Ρ ΡΡΠΈ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡ Π² MongoDB, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π²
ΠΡΠΊΠ»ΡΡΠΈΠΌ ΡΡΠ°ΡΡΡ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΡ MongoDB, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΉΠ΄Π΅ΠΌ Π² ΠΌΠ°ΡΡΠ΅Ρ Π½ΠΎΠ²ΠΎΠΉ ΠΈ ΡΠ΄Π°Π»ΠΈΠΌ ΡΡΠ°ΡΡΠ΅ ΡΠ·Π»Ρ:
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")
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΈΡΠ°ΡΡ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΠΎΠΉ: ΠΌΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΠ»ΠΈΡΡ ΡΠΎ ΡΡΠ°ΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° MongoDB Π½Π° Π½ΠΎΠ²ΡΠΉ!
ΠΡΠΎΠ³ΠΈ
ΠΠΏΠΈΡΠ°Π½Π½Π°Ρ ΡΡ Π΅ΠΌΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°Π΅Π², ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ MongoDB ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Π΅Ρ Π°ΡΡ Π² Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ.
ΠΠΎΠΆΠ°Π»ΡΠΉ, Π³Π»Π°Π²Π½ΡΠΉ Π½ΡΠ°Π½Ρ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠ΅ β ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΏΡΠΎΠ±ΡΠΎΡΠ° IP-Π°Π΄ΡΠ΅ΡΠΎΠ² Π½ΠΎΠ²ΡΡ
pod’ΠΎΠ² Π½Π° ΡΠ΅ΡΠ²Π΅ΡΡ ΡΡΠ°ΡΠΎΠΉ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ MongoDB, Π΅ΡΠ»ΠΈ ΠΎΠ½Π° Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π²Π½Π΅ K8s, ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΈΡ
Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΡ Π² DNS (ΠΈΠ»ΠΈ /etc/hosts
). Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΈ ΡΠ°Π³ΠΈ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΠ»Π° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π°ΠΌΠΈ ΠΈΠΌΡΠ½ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ Kubernetes-ΠΊΠ»Π°ΡΡΠ΅ΡΠ°.
P.S.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- Β«
ΠΠ΅ΡΠΏΡΠΎΡΡΠΎΠΉΠ½Π°Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ RabbitMQ Π² Kubernetes Β»; - Β«
ΠΠ°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Kubernetes (ΠΎΠ±Π·ΠΎΡ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π΄ΠΎΠΊΠ»Π°Π΄Π°) Β»; - Β«
K8s tips & tricks: Π£ΡΠΊΠΎΡΡΠ΅ΠΌ bootstrap Π±ΠΎΠ»ΡΡΠΈΡ Π±Π°Π· Π΄Π°Π½Π½ΡΡ Β».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com