
ΠΡΡ ΡΠ°ΡΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΏΠΎΡΡΡΠΏΠ°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΡ: Β«Π₯ΠΎΡΠΈΠΌ ΠΊΠ°ΠΊ Amazon RDS, Π½ΠΎ Π΄Π΅ΡΠ΅Π²Π»Π΅Β»; Β«Π₯ΠΎΡΠΈΠΌ ΠΊΠ°ΠΊ RDS, Π½ΠΎ Π²Π΅Π·Π΄Π΅, Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅Β». Π§ΡΠΎΠ±Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ managed-ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Kubernetes, ΠΌΡ ΠΏΠΎΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π° ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ PostgreSQL (Stolon, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΎΡ Crunchy Data ΠΈ Zalando) ΠΈ ΡΠ΄Π΅Π»Π°Π»ΠΈ ΡΠ²ΠΎΠΉ Π²ΡΠ±ΠΎΡ.
ΠΡΠ° ΡΡΠ°ΡΡΡ β ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π½Π°ΠΌΠΈ ΠΎΠΏΡΡ ΠΈ Ρ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ (ΠΎΠ±Π·ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ), ΠΈ Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ (ΡΡΠΎ Π±ΡΠ»ΠΎ Π²ΡΠ±ΡΠ°Π½ΠΎ ΠΈ ΡΡΠΎ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ). ΠΠΎ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΡΠ²Π»ΡΡΡΡΡ ΠΊ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΌΠ΅Π½Π΅ RDSβ¦
Π§ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΊΠΎΠ΅ RDS
ΠΠΎΠ³Π΄Π° Π»ΡΠ΄ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ ΠΏΡΠΎ RDS, ΠΏΠΎ Π½Π°ΡΠ΅ΠΌΡ ΠΎΠΏΡΡΡ, ΠΎΠ½ΠΈ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΉ (managed) ΡΠ΅ΡΠ²ΠΈΡ Π‘Π£ΠΠ, ΠΊΠΎΡΠΎΡΠ°Ρ:
- Π»Π΅Π³ΠΊΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ;
- ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ ΡΠ½Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ ΠΈ Π²ΠΎΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΈΠ· Π½ΠΈΡ (ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ β Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ );
- ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΠΈ master-slave;
- ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ³Π°ΡΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ;
- ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π°ΡΠ΄ΠΈΡ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ/Π΄ΠΎΡΡΡΠΏΠ°ΠΌΠΈ.
ΠΡΠ»ΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡ Π²ΠΎΠΎΠ±ΡΠ΅, ΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ ΠΊ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π΅ΡΡΠΌΠ° ΡΠ°Π·Π½ΡΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡΡΡ Ρ ΡΡΠ»ΠΎΠ²Π½ΡΠΌ Ansible Π½Π°ΠΌ Π½Π΅ Π±Π»ΠΈΠ·ΠΎΠΊ. (Π ΡΡ ΠΎΠΆΠ΅ΠΌΡ Π²ΡΠ²ΠΎΠ΄Ρ ΠΏΡΠΈΡΠ»ΠΈ ΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΈΠ· 2GIS Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ Β«ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ ΠΎΡΠΊΠ°Π·ΠΎΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ PostgresΒ».)
ΠΠΌΠ΅Π½Π½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ β ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π·Π°Π΄Π°Ρ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅ Kubernetes. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ Π±Π°Π·Π°ΠΌ Π΄Π°Π½Π½ΡΡ , Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠΌ Π²Π½ΡΡΡΠΈ Kubernetes, ΡΠΆΠ΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» ΡΠ΅Ρ Π΄ΠΈΡ Β«Π€Π»Π°Π½ΡΠ°Β», , Π² .
NB: ΠΠ»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π½Π°ΡΡ Open Source-ΡΡΠΈΠ»ΠΈΡΡ . ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ Π±Π΅Π· Π·Π½Π°Π½ΠΈΠΉ Go, Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠ²ΡΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠΈΡΠ°Π΄ΠΌΠΈΠ½ΠΎΠ² ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ: Π½Π° Bash, Python ΠΈ Ρ.ΠΏ.
ΠΠ»Ρ PostgreSQL ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ K8s-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ²:
- Stolon;
- Crunchy Data PostgreSQL Operator;
- Zalando Postgres Operator.
ΠΠΎΡΠΌΠΎΡΡΠΈΠΌ Π½Π° Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΡΠ±ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ΅Ρ Π²Π°ΠΆΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ, ΡΡΠΎ ΡΠΆΠ΅ Π±ΡΠ»ΠΈ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ Π²ΡΡΠ΅, ΠΌΡ β ΠΊΠ°ΠΊ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΡ ΠΏΠΎ ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΈ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ Π² Kubernetes β ΡΠ°ΠΊΠΆΠ΅ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ:
- Π΄Π΅ΠΏΠ»ΠΎΠΉ ΠΈΠ· Git ΠΈ Ρ ;
- ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ pod anti-affinity;
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ node affinity ΠΈΠ»ΠΈ node selector;
- ΡΡΡΠ°Π½ΠΎΠ²ΠΊΡ tolerations;
- Π½Π°Π»ΠΈΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΡΠ½ΠΈΠ½Π³Π°;
- ΠΏΠΎΠ½ΡΡΠ½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΈ Π΄Π°ΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ.
ΠΠ΅ Π²Π΄Π°Π²Π°ΡΡΡ Π² Π΄Π΅ΡΠ°Π»ΠΈ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΈΠ· ΠΏΡΠ½ΠΊΡΠΎΠ² (ΡΠΏΡΠ°ΡΠΈΠ²Π°ΠΉΡΠ΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ , Π΅ΡΠ»ΠΈ ΠΎΡΡΠ°Π½ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎ Π½ΠΈΠΌ ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΡΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΉ ΡΡΠ°ΡΡΠΈ), ΠΎΡΠΌΠ΅ΡΡ Π² ΡΠ΅Π»ΠΎΠΌ, ΡΡΠΎ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½ΡΠΆΠ½Ρ Π΄Π»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ½ΠΊΠΎΠ³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ·Π»ΠΎΠ² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° Ρ ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ Π·Π°ΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΈΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π’Π°ΠΊ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π±Π°Π»Π°Π½ΡΠ° Π² Π²ΠΎΠΏΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΠΎΠΈΠΌΠΎΡΡΠΈ.
Π’Π΅ΠΏΠ΅ΡΡ β ΠΊ ΡΠ°ΠΌΠΈΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°ΠΌ PostgreSQL.
1. Stolon
ΠΎΡ ΠΈΡΠ°Π»ΡΡΠ½ΡΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Sorint.lab Π² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΈΠΉ ΡΡΠ°Π»ΠΎΠ½ ΡΡΠ΅Π΄ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Π΄Π»Ρ Π‘Π£ΠΠ. ΠΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΠ°ΡΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ: ΠΏΠ΅ΡΠ²ΡΠΉ Π΅Π³ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· ΡΠΎΡΡΠΎΡΠ»ΡΡ Π΅ΡΠ΅ Π² Π½ΠΎΡΠ±ΡΠ΅ 2015 Π³ΠΎΠ΄Π°(!), Π° GitHub-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡ Π²Π°ΡΡΠ°ΡΡ ΠΏΠΎΡΡΠΈ 3000 Π·Π²ΡΠ·Π΄Π°ΠΌΠΈ ΠΈ 40+ ΠΊΠΎΠ½ΡΡΠΈΠ±ΡΡΡΠΎΡΠ°ΠΌΠΈ.
Π Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ, Stolon β ΠΎΡΠ»ΠΈΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ΄ΡΠΌΠ°Π½Π½ΠΎΠΉ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ:

Π‘ ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Π² Π΄ΠΎΠΊΠ»Π°Π΄Π΅ ΠΈΠ»ΠΈ . Π ΡΠ΅Π»ΠΎΠΌ ΠΆΠ΅, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΎΠ½ ΡΠΌΠ΅Π΅Ρ Π²ΡΡ ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅: failover, ΠΏΡΠΎΠΊΡΠΈ Π΄Π»Ρ ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π±ΡΠΊΠ°ΠΏΡβ¦ ΠΡΠΈΡΠ΅ΠΌ ΠΏΡΠΎΠΊΡΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΡΡΡΠΏ ΡΠ΅ΡΠ΅Π· ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²ΠΈΡ endpoint β Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π΄Π²ΡΡ
Π΄ΡΡΠ³ΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ
Π΄Π°Π»ΡΡΠ΅ (Ρ Π½ΠΈΡ
ΠΏΠΎ Π΄Π²Π° ΡΠ΅ΡΠ²ΠΈΡΠ° Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π±Π°Π·Π΅).
ΠΠ΄Π½Π°ΠΊΠΎ Ρ Stolon , ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ Π΅Π³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ°ΠΊ Π΄Π΅ΠΏΠ»ΠΎΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠΎ ΠΈ Π±ΡΡΡΡΠΎ β Β«ΠΊΠ°ΠΊ Π³ΠΎΡΡΡΠΈΠ΅ ΠΏΠΈΡΠΎΠΆΠΊΠΈΒ» β ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π‘Π£ΠΠ Π² Kubernetes. Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠΈΠ»ΠΈΡΡ stolonctl, Π΄Π΅ΠΏΠ»ΠΎΠΉ β ΡΠ΅ΡΠ΅Π· Helm-ΡΠ°ΡΡ, Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π·Π°Π΄Π°ΡΡΡΡ Π² ConfigMap.
Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π½Π΅ ΠΎΡΠ΅Π½Ρ-ΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ (Π²Π΅Π΄Ρ ΠΎΠ½ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ CRD). ΠΠΎ Ρ Π΄ΡΡΠ³ΠΎΠΉ β ΡΡΠΎ Π³ΠΈΠ±ΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ ΡΠ΅ΡΡΡΡΡ Π² K8s ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π²Π°ΠΌ ΡΠ΄ΠΎΠ±Π½ΠΎ.
Π Π΅Π·ΡΠΌΠΈΡΡΡ, Π»ΠΈΡΠ½ΠΎ Π΄Π»Ρ Π½Π°Ρ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΡΡ Π·Π°Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ°ΡΡ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΠ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΡΠ°Π»ΠΈ ΠΈΡΠΊΠ°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ.
2. Crunchy Data PostgreSQL Operator
, ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠ³ΠΎ Π°ΠΌΠ΅ΡΠΈΠΊΠ°Π½ΡΠΊΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ°ΠΏΠ°, Π²ΡΠ³Π»ΡΠ΄Π΅Π» Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ. ΠΠ³ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½Π°Ρ ΠΈΡΡΠΎΡΠΈΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΈΠ·Π° Π² ΠΌΠ°ΡΡΠ΅ 2017 Π³ΠΎΠ΄Π°, Ρ ΡΠ΅Ρ ΠΏΠΎΡ GitHub-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΠΎΠ»ΡΡΠΈΠ» ΡΡΡΡ ΠΌΠ΅Π½Π΅Π΅ 1300 Π·Π²ΡΠ·Π΄ ΠΈ 50+ ΠΊΠΎΠ½ΡΡΠΈΠ±ΡΡΡΠΎΡΠΎΠ². ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΠ΅Π»ΠΈΠ· ΠΎΡ ΡΠ΅Π½ΡΡΠ±ΡΡ Π±ΡΠ» ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ Π½Π° ΡΠ°Π±ΠΎΡΡ Ρ Kubernetes 1.15β1.18, OpenShift 3.11+ ΠΈ 4.4+, GKE ΠΈ VMware Enterprise PKS 1.3+.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° Crunchy Data PostgreSQL Operator ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ Π·Π°ΡΠ²Π»Π΅Π½Π½ΡΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡΠΌ:

Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ ΡΠ΅ΡΠ΅Π· ΡΡΠΈΠ»ΠΈΡΡ pgo, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½Π° Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Custom Resources Π΄Π»Ρ Kubernetes. ΠΠΎΡΡΠΎΠΌΡ Π½Π°Ρ ΠΊΠ°ΠΊ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΎΡΠ°Π΄ΠΎΠ²Π°Π»:
- Π΅ΡΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΠ΅Π· CRD;
- ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ (ΡΠΎΠΆΠ΅ ΡΠ΅ΡΠ΅Π· CRD);
- ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ β ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ² Π΄Π»Ρ PostgreSQL ΠΈ ΡΡΠΈΠ»ΠΈΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π½Π΅ΠΉ (Π²ΠΊΠ»ΡΡΠ°Ρ pgBackRest, pgAudit, ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΠΈΠ· contrib ΠΈ Ρ.Π΄.).
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΏΡΡΠΊΠΈ Π½Π°ΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΡ Crunchy Data Π²ΡΡΠ²ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ:
- ΠΠ΅ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ tolerations β ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ nodeSelector.
- Π‘ΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ podβΡ Π±ΡΠ»ΠΈ ΡΠ°ΡΡΡΡ DeploymentβΠ°, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΌΡ Π΄Π΅ΠΏΠ»ΠΎΠΈΠ»ΠΈ stateful-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ StatefulSet, DeploymentβΡ Π½Π΅ ΡΠΌΠ΅ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΄ΠΈΡΠΊΠΈ.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π·Π°Π±Π°Π²Π½ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ°ΠΌ: Π½Π° ΡΠ΅ΡΡΠΎΠ²ΠΎΠΉ ΡΡΠ΅Π΄Π΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ 3 ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Ρ ΠΎΠ΄Π½ΠΈΠΌ Π΄ΠΈΡΠΊΠΎΠΌ local storage, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠΎΠΎΠ±ΡΠ°Π», ΡΡΠΎ 3 ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ ΡΠ°Π±ΠΎΡΠ°ΡΡ (Ρ ΠΎΡΡ ΡΡΠΎ Π±ΡΠ»ΠΎ Π½Π΅ ΡΠ°ΠΊ).
ΠΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π³ΠΎ Π³ΠΎΡΠΎΠ²Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π»Π΅Π³ΠΊΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ pgAdmin ΠΈ pgBounce, Π° Π² ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΏΡΠ΅Π΄Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Grafana ΠΈ Prometheus. Π Π½Π΅Π΄Π°Π²Π½Π΅ΠΌ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΡΠ΅Π½Π½Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ , Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ΅ΠΌΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ Π½Π°Π³Π»ΡΠ΄Π½ΡΡ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΌΠ΅ΡΡΠΈΠΊ ΠΏΠΎ PgSQL Β«ΠΈΠ· ΠΊΠΎΡΠΎΠ±ΠΊΠΈΒ».
Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΡΡΡΠ°Π½Π½ΡΠΉ Π²ΡΠ±ΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ Kubernetes-ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΡΠΈΠ²Π΅Π» Π½Π°Ρ ΠΊ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π°ΠΉΡΠΈ ΠΈΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅.
3. Zalando Postgres Operator
ΠΡΠΎΠ΄ΡΠΊΡΡ Zalando Π½Π°ΠΌ ΠΈΠ·Π²Π΅ΡΡΠ½Ρ Π΄Π°Π²Π½ΠΎ: Π΅ΡΡΡ ΠΎΠΏΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Zalenium ΠΈ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΡ ΠΏΡΠΎΠ±ΠΎΠ²Π°Π»ΠΈ β ΠΈΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠ΅ HA-ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ PostgreSQL. Π ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π» ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΅Π³ΠΎ Π°Π²ΡΠΎΡΠΎΠ² β ΠΠ»Π΅ΠΊΡΠ΅ΠΉ ΠΠ»ΡΠΊΠΈΠ½ β Π² ΡΡΠΈΡΠ΅ , ΠΈ Π½Π°ΠΌ ΠΎΠ½ ΠΏΡΠΈΠ³Π»ΡΠ½ΡΠ»ΡΡ.
ΠΡΠΎ ΡΠ°ΠΌΠΎΠ΅ ΠΌΠΎΠ»ΠΎΠ΄ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π² ΡΡΠ°ΡΡΠ΅: ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅Π»ΠΈΠ· ΡΠΎΡΡΠΎΡΠ»ΡΡ Π² Π°Π²Π³ΡΡΡΠ΅ 2018 Π³ΠΎΠ΄Π°. ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π°ΠΆΠ΅ Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΡ ΡΠ΅Π»ΠΈΠ·ΠΎΠ², ΠΏΡΠΎΠ΅ΠΊΡ ΠΏΡΠΎΡΡΠ» Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΡΡ, ΡΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ΅Π΄ΠΈΠ² ΠΏΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Crunchy Data Ρ 1300+ Π·Π²ΡΠ·Π΄Π°ΠΌΠΈ Π½Π° GitHub ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΊΠΎΠ½ΡΡΠΈΠ±ΡΡΡΠΎΡΠΎΠ² (70+).
Β«ΠΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌΒ» ΡΡΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ:
- Patroni ΠΈ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ,
- β Π΄Π»Ρ Π±ΡΠΊΠ°ΠΏΠΎΠ²,
- β Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ.
ΠΠΎΡ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΎΡ Zalando:

ΠΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Custom Resources, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ StatefulSet ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, Π΄ΠΎΠ±Π°Π²Π»ΡΡ Π² pod ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ sidecarβΡ. ΠΡΡ ΡΡΠΎ β Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ»ΡΡ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΎΡ Crunchy Data.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΎΡ Zalando ΠΌΡ Π²ΡΠ±ΡΠ°Π»ΠΈ ΡΡΠ΅Π΄ΠΈ 3 ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ², Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΎ Π½ΠΈΠΆΠ΅, ΡΡΠ°Π·Ρ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
ΠΡΠ°ΠΊΡΠΈΠΊΠ° Ρ Postgres Operator ΠΎΡ Zalando
ΠΠ΅ΠΏΠ»ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ: Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΈΠ· Ρ GitHub ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ YAML-ΡΠ°ΠΉΠ»Ρ ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ . ΠΠ°ΠΊ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ .
ΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠΎΠΈΡ ΠΎΠ·Π°Π±ΠΎΡΠΈΡΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΎΠΉ . ΠΠ½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡΡ ΡΠ΅ΡΠ΅Π· ConfigMap postgres-operator Π² ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅ ΠΈΠΌΡΠ½, ΠΊΡΠ΄Π° Π²Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ. ΠΠΎΠ³Π΄Π° Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Π½Π°ΡΡΡΠΎΠ΅Π½Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ PostgreSQL.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π΄Π΅ΠΏΠ»ΠΎΠΉ Ρ Π½Π°Ρ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
apiVersion: acid.zalan.do/v1
kind: postgresql
metadata:
name: staging-db
spec:
numberOfInstances: 3
patroni:
synchronous_mode: true
postgresql:
version: "12"
resources:
limits:
cpu: 100m
memory: 1Gi
requests:
cpu: 100m
memory: 1Gi
sidecars:
- env:
- name: DATA_SOURCE_URI
value: 127.0.0.1:5432
- name: DATA_SOURCE_PASS
valueFrom:
secretKeyRef:
key: password
name: postgres.staging-db.credentials
- name: DATA_SOURCE_USER
value: postgres
image: wrouesnel/postgres_exporter
name: prometheus-exporter
resources:
limits:
cpu: 500m
memory: 100Mi
requests:
cpu: 100m
memory: 100Mi
teamId: staging
volume:
size: 2Gi
ΠΠ°Π½Π½ΡΠΉ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡ Π΄Π΅ΠΏΠ»ΠΎΠΈΡ ΠΊΠ»Π°ΡΡΠ΅Ρ ΠΈΠ· 3 ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² Ρ sidecar Π² Π²ΠΈΠ΄Π΅ , Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΡΠ½ΠΈΠΌΠ°Π΅ΠΌ ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, Π²ΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΡΠΎΡΡΠΎ, ΠΈ ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ².
Π‘ΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π° Π²Π΅Π±-ΠΏΠ°Π½Π΅Π»Ρ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ β . ΠΠ½Π° ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΡΠ΄Π°Π»ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π±ΡΠΊΠ°ΠΏΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ.

Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠ² PostgreSQL

Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠΊΠ°ΠΏΠ°ΠΌΠΈ
ΠΡΡΠ³ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° . ΠΠ°Π½Π½ΡΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠ»ΠΈ Π² PostgreSQL, ΠΈΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΏΠΈΡΠΊΠ° ΠΈΠΌΡΠ½ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ API ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²Π΅ΡΠ½ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΠΎΠ»ΠΈ.
ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅
ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π²ΡΠΊΠΎΡΠ΅ Π²ΡΡΠ²ΠΈΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²Π΅ΡΠΎΠΌΡΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ²:
- ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ nodeSelector;
- Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΠΊΠ»ΡΡΠΈΡΡ Π±ΡΠΊΠ°ΠΏΡ;
- ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π· Π½Π΅ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ;
- ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² Π½Π΅Π°ΠΊΡΡΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ.
Π ΡΡΠ°ΡΡΡΡ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ. ΠΠ°ΡΠ½ΡΠΌ Ρ ΠΊΠΎΠ½ΡΠ° β ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ.
Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΠ΅ΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΡΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ Π±ΡΠΊΠ°ΠΏ ΠΈ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡ Π±ΡΠΊΠ°ΠΏΠ½ΡΠΉ Π±Π°ΠΊΠ΅Ρ ΠΊ Operator UI. ΠΠ± ΡΡΠΎΠΌ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ Π²ΡΠΊΠΎΠ»ΡΠ·Ρ, Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΅ΡΡΡ Π² :
- Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ΅ΠΊΡΠ΅Ρ;
- ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ
pod_environment_secret_nameΠ² CRD Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° ΠΈΠ»ΠΈ Π² ConfigMap (Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ ΡΠ΅ΡΠΈΠ»ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ).
ΠΠ΄Π½Π°ΠΊΠΎ, ΠΊΠ°ΠΊ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ, Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠΌΠΈ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠ°ΠΌΠΈ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ Π½Π΅ΠΉ β ΡΠΌ. Π½ΠΈΠΆΠ΅.
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π΄Π»Ρ Π±ΡΠΊΠ°ΠΏΠ°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ β wal_s3_bucket ΠΈ ΠΊΠ»ΡΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π² AWS S3, ΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π±ΡΠΊΠ°ΠΏΠΈΡΡ Π²ΡΡ: Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·Ρ Π² production, Π½ΠΎ ΠΈ staging. ΠΠ°Ρ ΡΡΠΎ Π½Π΅ ΡΡΡΡΠΎΠΈΠ»ΠΎ.
Π ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΊ Spilo, ΡΡΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Docker-ΠΎΠ±ΡΡΡΠΊΠΎΠΉ Π΄Π»Ρ PgSQL ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°, Π²ΡΡΡΠ½ΠΈΠ»ΠΎΡΡ: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ WAL_S3_BUCKET ΠΏΡΡΡΡΠΌ, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΎΡΠΊΠ»ΡΡΠΈΠ² Π±ΡΠΊΠ°ΠΏΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΊ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠ°Π΄ΠΎΡΡΠΈ Π½Π°ΡΡΠ»ΡΡ ΠΈ , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΡΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠ»ΠΈ Π² ΡΠ²ΠΎΠΉ ΡΠΎΡΠΊ. Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ enableWALArchiving: false Π² ΡΠ΅ΡΡΡΡ ΠΊΠ»Π°ΡΡΠ΅ΡΠ° PostgreSQL.
ΠΠ°, Π±ΡΠ»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ½Π°ΡΠ΅, Π·Π°ΠΏΡΡΡΠΈΠ² 2 ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°: ΠΎΠ΄ΠΈΠ½ Π΄Π»Ρ staging (Π±Π΅Π· Π±ΡΠΊΠ°ΠΏΠΎΠ²), Π° Π²ΡΠΎΡΠΎΠΉ β Π΄Π»Ρ production. ΠΠΎ ΡΠ°ΠΊ ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΎΠ΄Π½ΠΈΠΌ.
ΠΠΊ, ΠΌΡ Π½Π°ΡΡΠΈΠ»ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π² Π±Π°Π·Ρ Π΄ΠΎΡΡΡΠΏ Π΄Π»Ρ S3 ΠΈ Π±ΡΠΊΠ°ΠΏΡ Π½Π°ΡΠ°Π»ΠΈ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΠ°ΠΊ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΡΠ°Π½ΠΈΡΡ Π±ΡΠΊΠ°ΠΏΠΎΠ² Π² Operator UI?

Π Operator UI ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ 3 ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅:
-
SPILO_S3_BACKUP_BUCKET -
AWS_ACCESS_KEY_ID -
AWS_SECRET_ACCESS_KEY
ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡΠΊΠ°ΠΏΠ°ΠΌΠΈ ΡΡΠ°Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ, ΡΡΠΎ Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΏΡΠΎΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎ staging, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ² Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΡΠ΄Π° ΡΡΠ΅Π·Ρ Ρ production Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠΊΡΠΈΠΏΡΠΎΠ².
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ»ΡΡΠ° Π½Π°Π·ΡΠ²Π°Π»Π°ΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ Teams API ΠΈ ΡΠΈΡΠΎΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π°Π· ΠΈ ΡΠΎΠ»Π΅ΠΉ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ ΡΠΎΠ»ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π»ΠΈ ΠΏΡΠ°Π² ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Ρ ΠΏΡΠ°Π²Π°ΠΌΠΈ Π½Π° ΡΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠ³ ΡΠΈΡΠ°ΡΡ Π½ΠΎΠ²ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ.
ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ? ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΠΊΠΎΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ GRANT, ΠΎΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π²ΡΠ΅Π³Π΄Π°. ΠΡΡΡ 2 ΠΌΠ΅ΡΠΎΠ΄Π°: syncPreparedDatabases ΠΈ syncDatabases. Π syncPreparedDatabases β Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π² ΡΠ΅ΠΊΡΠΈΠΈ preparedDatabases Π΅ΡΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ defaultRoles ΠΈ defaultUsers Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠ»Π΅ΠΉ, β ΠΏΡΠ°Π²Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ. ΠΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΏΠ°ΡΡΠ°, ΡΡΠΎΠ±Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠ°Π²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ»ΠΈΡΡ.
Π ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π² Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ Π΄Π»Ρ Π½Π°Ρ Π΄ΠΎΡΠ°Π±ΠΎΡΠΊΠ°Ρ β , Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΠΈΠΉ Node Affinity Π² ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΡΠΉ StatefulSet. ΠΠ°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π·Π°ΡΠ°ΡΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΡ ΡΠΎΠΊΡΠ°ΡΠ°ΡΡ ΡΠ°ΡΡ ΠΎΠ΄Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ spot-ΠΈΠ½ΡΡΠ°Π½ΡΡ, Π° Π½Π° Π½ΠΈΡ ΡΠ²Π½ΠΎ Π½Π΅ ΡΡΠΎΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ ΠΠ. ΠΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΅ΡΠΈΡΡ ΠΈ ΡΠ΅ΡΠ΅Π· tolerations, Π½ΠΎ Π½Π°Π»ΠΈΡΠΈΠ΅ Node Affinity Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎΡΡΡ.
Π§ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ?
ΠΠΎ ΠΈΡΠΎΠ³Π°ΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΌΡ ΡΠΎΡΠΊΠ½ΡΠ»ΠΈ Postgres Operator ΠΎΡ Zalando Π² , Π³Π΄Π΅ ΠΎΠ½ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎ ΡΡΠΎΠ»Ρ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΌΠΈ ΠΏΠ°ΡΡΠ°ΠΌΠΈ. Π Π΄Π»Ρ ΠΏΡΡΠ΅Π³ΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΡΠΎΠ±ΡΠ°Π»ΠΈ ΠΈ .
Π‘ΠΏΠΈΡΠΎΠΊ PR, ΠΏΡΠΈΠ½ΡΡΡΡ Π² ΡΠΎΡΠΊ:
- ;
- ;
- ;
- .
ΠΡΠ΄Π΅Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΡ ΡΡΠΈ PR, ΡΡΠΎΠ±Ρ ΠΎΠ½ΠΈ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² upstream ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° (1.6).
ΠΠΎΠ½ΡΡ! ΠΡΡΠΎΡΠΈΡ ΡΡΠΏΠ΅Ρ Π° Ρ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠ΅ΠΉ production
ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Patroni, Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΈΠ³ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΆΠΈΠ²ΠΎΠΉ production Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΡΠΎΠ΅ΠΌ.
Spilo ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π΅Π»Π°ΡΡ standby-ΠΊΠ»Π°ΡΡΠ΅ΡΡ ΡΠ΅ΡΠ΅Π· S3-Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° Ρ , ΠΊΠΎΠ³Π΄Π° Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ Π»ΠΎΠ³ PgSQL ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² S3, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠΊΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΎΠΉ. ΠΠΎ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Wal-E Π² ΡΡΠ°ΡΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅? Π Π΅ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΆΠ΅ Π½Π° Ρ Π°Π±ΡΠ΅.
ΠΠ° ΠΏΠΎΠΌΠΎΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ PostgreSQL. ΠΠ΄Π½Π°ΠΊΠΎ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π²Π΄Π°Π²Π°ΡΡΡΡ Π² Π΄Π΅ΡΠ°Π»ΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎβ¦ Π½Π°Ρ ΠΏΠ»Π°Π½ ΠΏΠΎΡΠ΅ΡΠΏΠ΅Π» ΡΠΈΠ°ΡΠΊΠΎ.
ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² ΠΠ Π±ΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΡΠ°Π±Π»ΠΈΡ Ρ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅, ΠΊ ΡΠΎΠΌΡ ΠΆΠ΅, ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠΎΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ ΠΈ ΡΠ΄Π°Π»ΡΠ»ΠΈΡΡ. Ρ copy_data, ΠΊΠΎΠ³Π΄Π° Π½ΠΎΠ²Π°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π²ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°, ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΡΠΏΠ΅Π²Π°Π»Π° Π·Π° ΠΌΠ°ΡΡΠ΅ΡΠΎΠΌ. ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ Π½Π΅Π΄Π΅Π»Ρ, Π½ΠΎ ΡΠ°ΠΊ ΠΈ Π½Π΅ Π΄ΠΎΠ³Π½Π°Π»ΠΎ ΠΌΠ°ΡΡΠ΅Ρ. Π ΠΈΡΠΎΠ³Π΅, ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΏΠΎΠΌΠΎΠ³Π»Π° ΠΊΠΎΠ»Π»Π΅Π³ ΠΈΠ· Avito: ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ pg_dump. ΠΠΏΠΈΡΡ Π½Π°Ρ (Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΠ°Π±ΠΎΡΠ°Π½Π½ΡΠΉ) Π²Π°ΡΠΈΠ°Π½Ρ ΡΡΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°.
ΠΠ΄Π΅Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ»ΠΎΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ. Π Π½Π°Π»ΠΈΡΠΈΠΈ Π±ΡΠ»ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ productionβΠ°. ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΡΡΠ΅Π½ΡΠ½ΡΠΉ dump ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΈΠ· ΠΌΠ°ΡΡΠ΅ΡΠ°.
Π ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ , ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ, Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Ρ ΠΎΡΡΠΎΠ²:
- master β ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ;
- replica1 β ΠΏΠΎΡΠΎΠΊΠΎΠ²Π°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ° Π½Π° ΡΡΠ°ΡΠΎΠΌ production;
- replica2 β Π½ΠΎΠ²Π°Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°.
ΠΠ»Π°Π½ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ
1. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π° Π²ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ Π² ΡΡ
Π΅ΠΌΠ΅ public Π±Π°Π·Ρ dbname:
psql -h master -d dbname -c "CREATE PUBLICATION dbname FOR ALL TABLES;"
2. CΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ»ΠΎΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΠΌΠ°ΡΡΠ΅ΡΠ΅:
psql -h master -c "select pg_create_logical_replication_slot('repl', 'pgoutput');"
3. ΠΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΡΡΠ°ΡΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅:
psql -h replica1 -c "select pg_wal_replay_pause();"
4. ΠΠΎΠ»ΡΡΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Ρ ΠΌΠ°ΡΡΠ΅ΡΠ°:
psql -h master -c "select replay_lsn from pg_stat_replication where client_addr = 'replica1';"
5. Π‘Π½ΠΈΠΌΠ΅ΠΌ dump ΡΠΎ ΡΡΠ°ΡΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ. ΠΡΠ΄Π΅ΠΌ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΡΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΡΡΠΊΠΎΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ:
pg_dump -h replica1 --no-publications --no-subscriptions -O -C -F d -j 8 -f dump/ dbname
6. ΠΠ°Π³ΡΡΠ·ΠΈΠΌ dump Π½Π° Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ:
pg_restore -h replica2 -F d -j 8 -d dbname dump/
7. ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π΄Π°ΠΌΠΏΠ° ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅:
psql -h replica1 -c "select pg_wal_replay_resume();"
7. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π° Π½ΠΎΠ²ΠΎΠΉ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ΅:
psql -h replica2 -c "create subscription oldprod connection 'host=replica1 port=5432 user=postgres password=secret dbname=dbname' publication dbname with (enabled = false, create_slot = false, copy_data = false, slot_name='repl');"
8. ΠΠΎΠ»ΡΡΠΈΠΌ oid ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ:
psql -h replica2 -d dbname -c "select oid, * from pg_subscription;"
9. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π±ΡΠ» ΠΏΠΎΠ»ΡΡΠ΅Π½ oid=1000. ΠΡΠΈΠΌΠ΅Π½ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ ΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ΅:
psql -h replica2 -d dbname -c "select pg_replication_origin_advance('pg_1000', 'AA/AAAAAAAA');"
10. ΠΠ°ΠΏΡΡΡΠΈΠΌ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ:
psql -h replica2 -d dbname -c "alter subscription oldprod enable;"
11. ΠΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΡΠ°ΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ, ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°Π±ΠΎΡΠ°ΡΡ:
psql -h replica2 -d dbname -c "select * from pg_replication_origin_status;"
psql -h master -d dbname -c "select slot_name, restart_lsn, confirmed_flush_lsn from pg_replication_slots;"
12. ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΈ Π±Π°Π·Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ²Π΅ΡΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅.
13. ΠΠΎΡΠ»Π΅ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠΈ Π½Π°Π΄ΠΎ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ .
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΠ°ΠΊΠΎΠΌΡ ΠΏΠ»Π°Π½Ρ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ»ΠΎ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°ΠΌΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΠΏΠ΅ΡΠ°ΡΠΎΡΡ Kubernetes ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΏΡΠΎΡΡΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΡΠ²Π΅Π΄Ρ ΠΈΡ ΠΊ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ K8s-ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, Π΄ΠΎΠ±ΠΈΠ²ΡΠΈΡΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ Ρ ΠΈΡ ΠΏΠΎΠΌΠΎΡΡΡ, ΡΡΠΎΠΈΡ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ½Π΅ΡΡΠΈ ΠΈ ΡΡΠ΄ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΡ Π½ΡΠ°Π½ΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΊ Π²ΡΠ±ΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Ρ ΡΠΌΠΎΠΌ.
Π Π°ΡΡΠΌΠΎΡΡΠ΅Π² ΡΡΠΈ ΡΠ°ΠΌΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Kubernetes-ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π΄Π»Ρ PostgreSQL, ΠΌΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ Π²ΡΠ±ΠΎΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΎΡ Zalando. Π Ρ Π½ΠΈΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΡΡΠ΄Π½ΠΎΡΡΠΈ, Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ°Π΄ΠΎΠ²Π°Π», ΡΠ°ΠΊ ΡΡΠΎ ΠΌΡ ΠΏΠ»Π°Π½ΠΈΡΡΠ΅ΠΌ ΡΠ°ΡΡΠΈΡΠΈΡΡ ΡΡΠΎΡ ΠΎΠΏΡΡ ΠΈ Π½Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΈΠ½ΡΡΠ°Π»Π»ΡΡΠΈΠΈ PgSQL. ΠΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΎΠΏΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡ ΠΎΠΆΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ β Π±ΡΠ΄Π΅ΠΌ ΡΠ°Π΄Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ !
P.S.
Π§ΠΈΡΠ°ΠΉΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π² Π½Π°ΡΠ΅ΠΌ Π±Π»ΠΎΠ³Π΅:
- «»;
- «»;
- «».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com
