ΠΠ½Π΅Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π½Π° GitOps, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΊΠ°ΠΊ ΡΠ΅Π·ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift. ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΠΎ ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ° Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ. .

ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, GitOps Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° pull-Π·Π°ΡΠ²ΠΊΠΈ Π² Git. Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° GitOps ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ Π΅Π΄ΠΈΠ½Π΅Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΠΊΠ°ΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠΎΠ²Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌΠΈ ΠΈ ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ Π½Π° ΠΎΠ΄ΠΈΡ.
ΠΠ΄Π΅ΡΡΠ° Π·Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΠΌΠΎΡΡ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² GitOps Π½Π΅ Π΅ Π½ΠΎΠ²Π°, ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ ΠΎΡΠ΄Π°Π²Π½Π° ΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΡΠΎΠΊΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°. GitOps ΠΏΡΠΎΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ (ΠΏΡΠ΅Π³Π»Π΅Π΄ΠΈ, pull-Π·Π°ΡΠ²ΠΊΠΈ, ΡΠ°Π³ΠΎΠ²Π΅ ΠΈ Ρ.Π½.) ΠΏΡΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°, ΠΊΠ°ΠΊΡΠΎ Π² ΡΠ»ΡΡΠ°Ρ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄.
ΠΠ° GitOps Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° Π°ΠΊΠ°Π΄Π΅ΠΌΠΈΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ»Π°, Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΎ Π½Π°Π±ΠΎΡ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈ, Π½Π° ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° ΡΠ°Π·ΠΈ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°:
- ΠΠ΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎΡΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π² Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ (ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΠΈ Π΄Ρ.).
- ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΡΡΠ΅Π· pull-Π·Π°ΡΠ²ΠΊΠΈ.
- Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ΅ΡΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΡΠ΅Π· push-Π·Π°ΡΠ²ΠΊΠΈ Π² Git.
ΠΡΠΈΠ½ΡΠΈΠΏΠΈ Π½Π° GitOps
- ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π°Ρ ΠΊΠ°ΡΠΎ ΠΈΠ·Ρ ΠΎΠ΄Π΅Π½ ΠΊΠΎΠ΄
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄, Π·Π°ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½Π° ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π° Π² Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΡΠ»ΡΠΆΠΈ ΠΊΠ°ΡΠΎ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΈΡΡΠΈΠ½Π°ΡΠ°. Π’Π°ΠΊΡΠ² ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½ΠΎ ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ (rollout) ΠΈ Π²ΡΡΡΠ°Π½Π΅ Π½Π°Π·Π°Π΄ (rollback) Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅.
- ΠΠ΅Π»Π°Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΡΠ΅ Π·Π°Π΄Π°Π²Π°Ρ ΠΈ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Ρ Π² Git.
Π‘ΡΡ ΡΠ°Π½ΡΠ²Π°ΠΉΠΊΠΈ ΠΈ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°ΠΉΠΊΠΈ ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ Π² Git, ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΏΡΠΈΠ»Π°Π³Π°ΠΌΠ΅ ΠΈ Π²ΡΡΡΠ°ΠΌΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈΡΠ΅ Π½Π° Git Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ Π·Π° ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΎΡΡΡΠ° Π²ΡΡΡ Ρ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΡΠ²ΡΡΠ΄ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π°Π²ΡΠ΅Π½ΡΠΈΡΠ½ΠΎΡΡ.
- ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΌΠΎΠ³Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° pull-Π·Π°ΡΠ²ΠΊΠΈ.
Π‘ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Git pull-Π·Π°ΡΠ²ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π΄ΡΡΠ³ΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° Π΅ΠΊΠΈΠΏΠ° ΠΈΠ»ΠΈ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΏΡΠ΅Π· CI ΡΠ΅ΡΡΠΎΠ²Π΅.
Π Π² ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π΅ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ°Π·Π΄Π°Π²Π°ΠΌΠ΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠΈ ΠΏΡΠ°Π²Π° Π½Π°Π»ΡΠ²ΠΎ ΠΈ Π½Π°Π΄ΡΡΠ½ΠΎ. ΠΠ° Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΡΠ΅ commit Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡΠ° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ ΠΏΡΠ°Π²Π° Π² Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΡΠ΅Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
- ΠΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ Π½Π΅ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΈΡ Π΄ΡΠΈΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ.
ΠΠΎΠ³Π°ΡΠΎ ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π² Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΎΡΡΠ°Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° Π½Π°ΠΌΠ΅ΡΠΈΠΌ ΡΠΎΡΡΡΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π΄Π° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ° Π΄Π°Π»ΠΈ ΡΠ΅ΠΊΡΡΠΎΡΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° ΠΆΠ΅Π»Π°Π½ΠΎΡΠΎ. ΠΠΊΠΎ Π½Π΅ Π΅ ΡΠ°ΠΊΠ°, ΡΠΎΠ·ΠΈ ΡΠΎΡΡΡΠ΅Ρ ΡΡΡΠ±Π²Π° β Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ β ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ Π΄Π° ΠΎΡΡΡΡΠ°Π½ΠΈ Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ΡΠΎ, ΠΈΠ»ΠΈ Π΄Π° Π½ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠΈ Π·Π° Π΄ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅.
GitOps ΠΌΠΎΠ΄Π΅Π»ΠΈ Π·Π° OpenShift.
On-Cluster Resource Reconciller.
Π‘ΠΏΠΎΡΠ΅Π΄ ΡΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ° ΠΈΠΌΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ, ΠΊΠΎΠΉΡΠΎ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° ΡΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Kubernetes ΡΠ΅ΡΡΡΡΠΈ (YAML ΡΠ°ΠΉΠ»ΠΎΠ²Π΅) Π² Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Ρ ΡΠ΅Π°Π»Π½ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π½Π° ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΡΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΡΡ ΠΈΠ·ΠΏΡΠ°ΡΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½Π΅ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡΡΠ°. Π’ΠΎΠ·ΠΈ GitOps ΠΌΠΎΠ΄Π΅Π» ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² Anthos Config Management ΠΈ Weaveworks Flux.

External Resource Reconciler (Push).
Π’ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΡΠ°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ°, ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΈ Π·Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π² ΠΏΠ°ΡΠΈΡΠ΅ βGit ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ β Kubernetes ΠΊΠ»Π°ΡΡΠ΅Ρβ. Π Π°Π·Π»ΠΈΠΊΠ°ΡΠ° ΡΡΠΊ Π΅, ΡΠ΅ Π½Π΅ Π΅ Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½ ΠΊΠ»Π°ΡΡΠ΅Ρ Π΄Π° ΠΈΠΌΠ° ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ. ΠΠ°ΡΠΈΡΠ΅ βGit β ΠΊΠ»Π°ΡΡΠ΅Ρ k8sβ ΡΠ΅ΡΡΠΎ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΠΊΠ°ΡΠΎ CRD ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ (custom resources definition), Π² ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠΏΠΈΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ. Π ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠΈΡΠ΅ ΡΡΠ°Π²Π½ΡΠ²Π°Ρ Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π·Π°Π΄Π°Π΄Π΅Π½ Π² CRD, Ρ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° Kubernetes ΠΊΠ»Π°ΡΡΠ΅ΡΠ°, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠΎ ΡΠ° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π² CRD, ΠΈ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ΅ΠΌΠ°Ρ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΡΠ°Π²Π½ΡΠ²Π°Π½Π΅ΡΠΎ. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΡΠΎΠ·ΠΈ GitOps ΠΌΠΎΠ΄Π΅Π» ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ArgoCD.

GitOps Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift.
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΌΡΠ»ΡΠΈΠΊΠ»Π°ΡΡΠ΅ΡΠ½Π° Kubernetes ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°.
Π‘ ΡΠ°Π·ΡΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Kubernetes ΠΈ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΌΡΠ»ΡΠΈΠΎΠ±Π»Π°ΡΠ½ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΡΡΠ΅Π΄Π½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ OpenShift ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π°ΡΠ°ΡΡΠ²Π°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΠ΅ΡΠΈΡΠ΅ΡΠΈΠΉΠ½ΠΈΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ, ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΠ°Π·Π³ΡΡΡΠ°Ρ Π² ΡΡΠΎΡΠΈΡΠΈ ΠΈ Π΄ΠΎΡΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΡΠΎΠΉ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΡΠΎ ΠΎΠ±Π»Π°ΠΊΠΎ ΠΈ on-premise.
ΠΡΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡ:
- ΠΠ° ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°, ΡΠ΅ ΠΊΠ»ΡΡΡΠ΅ΡΠΈΡΠ΅ ΡΠ° Π² ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ (ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³, Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ° ΠΈ Ρ.Π½.)
- ΠΠ° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΠΎΡΠ½ΠΎΠ²ΠΎ (ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΡ) ΠΊΠ»ΡΡΡΠ΅ΡΠΈ ΠΏΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
- ΠΠ° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ ΠΏΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
- ΠΠ° ΡΠ΅ Π½Π°Π»Π°Π³Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift.
- ΠΠ° ΡΠ΅ Π²ΡΡΡΠ°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift.
- ΠΠ° ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°Ρ ΡΠ°Π±Π»ΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈ.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
Π Ρ ΠΎΠ΄Π° Π½Π° ΠΆΠΈΠ·Π½Π΅Π½ΠΈΡ ΡΠΈ ΡΠΈΠΊΡΠ» ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΡΠ΅ΡΡΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ ΠΏΡΠ΅Π· Π²Π΅ΡΠΈΠ³Π° ΠΎΡ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ (dev, stage ΠΈ Ρ.Π½.), ΠΏΡΠ΅Π΄ΠΈ Π΄Π° Π΄ΠΎΡΡΠΈΠ³Π½Π°Ρ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° Π½Π°Π»ΠΈΡΠ½ΠΎΡΡ ΠΈ ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡ, ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°Π²Π΅Π΄Π½ΡΠΆ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ° on-premise ΠΈΠ»ΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅Π³ΠΈΠΎΠ½ΠΈ Π½Π° ΠΏΡΠ±Π»ΠΈΡΠ½Π°ΡΠ° ΠΎΠ±Π»Π°ΡΠ½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°.
ΠΡΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π½Π°Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ:
- ΠΠ° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π±ΠΈΠ½Π°ΡΠ½ΠΈΡΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ Ρ.Π½.) ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ (dev, stage ΠΈ Ρ.Π½.).
- ΠΠ° ΡΠ΅ Π½Π°Π»Π°Π³Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° (Π±ΠΈΠ½Π°ΡΠ½ΠΈΡΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ Ρ.Π½.) Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift.
- ΠΠ° ΡΠ΅ Π²ΡΡΡΠ°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π΄ΠΎ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
Π‘ΡΠ΅Π½Π°ΡΠΈΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° OpenShift GitOps
1. ΠΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΎΡ Git-ΡΠ΅ΠΏΠΎ
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift Π² Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° Π³ΠΈ ΠΏΡΠΈΠ»Π°Π³Π°, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π»Π΅ΡΠ½ΠΎ ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΡΡ Π² ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ Π½Π° ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½ΠΎ Π² Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.
2. Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Ρ Secret Manager
ΠΠ΄ΠΌΠΈΠ½Ρ ΡΠ΅ ΠΌΡ Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ° secret-ΠΎΠ±Π΅ΠΊΡΠΈ Π½Π° OpenShift Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΡΠΎΡΡΡΠ΅Ρ ΠΊΠ°ΡΠΎ Vault, Π·Π° Π΄Π° Π³ΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ.
3. ΠΠΎΠ½ΡΡΠΎΠ» Π½Π° Π΄ΡΠ΅ΠΉΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅
ΠΠ΄ΠΌΠΈΠ½ΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°ΠΌΠΎ Π·Π°, Π°ΠΊΠΎ OpenShift GitOps ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ ΠΎΡΠΊΡΠΈΠ²Π° ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π²Π° Π·Π° ΡΠ°Π·ΠΌΠΈΠ½Π°Π²Π°Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π°Π»Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΡΠ΅Π·ΠΈ, Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎ Π΄Π° ΡΠ΅Π°Π³ΠΈΡΠ° Π½Π° Π΄ΡΠ΅ΠΉΡΠ°.
4. ΠΠ·Π²Π΅ΡΡΠΈΡ Π·Π° Π΄ΡΠ΅ΠΉΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
Π’Π΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΈΡΠΊΠ° Π±ΡΡΠ·ΠΎ Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ Π·Π° ΡΠ»ΡΡΠ°ΠΈ Π½Π° Π΄ΡΠ΅ΠΉΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π±ΡΡΠ·ΠΎ Π΄Π° Π²Π·Π΅ΠΌΠ΅ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈ ΠΌΠ΅ΡΠΊΠΈ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ.
5. Π ΡΡΠ½Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ Π΄ΡΠ΅ΠΉΡ
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΠ° Π΄Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ° ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift Ρ Git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π΄ΡΠ΅ΠΉΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅, Π·Π° Π΄Π° Π²ΡΡΠ½Π΅ Π±ΡΡΠ·ΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅.
6. ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ Π΄ΡΠ΅ΠΉΡ
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ ΡΡΡΠΎ Π΄Π° Π½Π°ΡΡΡΠΎΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Ρ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΏΡΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° Π΄ΡΠ΅ΠΉΡ, Π·Π° Π΄Π° ΠΎΡΠΈΠ³ΡΡΠΈ, ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π²ΠΈΠ½Π°Π³ΠΈ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π² Git.
7. ΠΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ° β Π΅Π΄Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠ° OpenShift Π² Π΅Π΄Π½ΠΎ Git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π΄Π° Π³ΠΈ ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΠΎ ΠΈΠ·Π±ΠΎΡ ΠΏΡΠΈ Π½ΡΠΆΠ΄Π°.
8. ΠΠ΅ΡΠ°ΡΡ ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° (Π½Π°ΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅)
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ (stage, prod, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ Ρ.Π½. Ρ Π½Π°ΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅). ΠΠ½Π°ΡΠ΅ ΠΊΠ°Π·Π°Π½ΠΎ, ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ β Π·Π° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π·Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ Π·Π°Π΄Π°Π΄Π΅ Π² Git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ βΠΡΠΎΠ΄Π°ΠΊΡΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ (prod) β ΠΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X β ΠΡΠΎΠ΄Π°ΠΊΡΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Xβ, ΡΠΎ Π·Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΎΠ±ΡΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠ΄Π°ΠΊΡΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ.
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X.
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° ΠΏΡΠΎΠ΄Π°ΠΊΡΡΠ½ ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X.
9. Π¨Π°Π±Π»ΠΎΠ½ΠΈ ΠΈ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ΅ Π½Π°Π±ΠΎΡΠ° ΠΎΡ Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈ ΠΏΠΎ-ΡΠΈΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ, ΠΊΡΠΌ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈ.
10. ΠΠ·Π±ΠΈΡΠ°ΡΠ΅Π»Π½ΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΡΠΌ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ.
11. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ
ΠΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠΌ Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π° ΠΈΠΌΠ°Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° ΠΈΠ·Π±ΠΈΡΠ°Ρ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (Helm Chart, ΡΠΈΡΡ Kubernetes yaml ΠΈ Ρ.Π½.), Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΡΠΌΠ°Ρ Π·Π° Π²ΡΡΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ GitOps Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift
ArgoCD
ArgoCD ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΌΠΎΠ΄Π΅Π» Π½Π° Π²ΡΠ½ΡΠ½ΠΎ ΡΡΠ³Π»Π°ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ UI Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ ΠΈ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΠΏΠΎ ΡΡ Π΅ΠΌΠ°ΡΠ° βΠ΅Π΄Π½ΠΎ ΠΊΡΠΌ ΠΌΠ½ΠΎΠ³ΠΎβ. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΠΊ Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π΅ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΏΡΠΈ Π½Π΅ΡΠ°Π±ΠΎΡΠ΅Ρ ArgoCD.
Flux
Flux ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΌΠΎΠ΄Π΅Π» Π½Π° ΡΡΠ³Π»Π°ΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ ΠΏΠΎΡΠ°Π΄ΠΈ ΡΠΎΠ²Π° Π½ΡΠΌΠ° ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈΡΠ΅ Ρ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΠ»Π°Π±Π°ΡΠ° ΡΡΡΠ°Π½Π°. ΠΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΠ°Π΄ΠΈ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΎΡΡΠ°Π²Π° Π΄ΠΎΡΠΈ ΠΊΠΎΠ³Π°ΡΠΎ Π΅Π΄ΠΈΠ½ ΠΊΠ»ΡΡΡΠ΅Ρ Π΅ ΠΈΠ·Π²ΡΠ½ ΡΡΡΠΎΡ.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° ArgoCD Π² OpenShift
ArgoCD ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΎΡΠ»ΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ ΠΈ ΡΠ΅Π± ΠΊΠΎΠ½Π·ΠΎΠ»Π°, ΡΠ°ΠΊΠ° ΡΠ΅ ΡΡΠΊ Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ Flux ΠΈ Π΄ΡΡΠ³ΠΈ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΈ.
ΠΠ° Π΄Π° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅ ArgoCD Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift 4, ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΡΡΡΠΏΠΊΠΈ ΠΊΠ°ΡΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ°:
Π Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° ArgoCD Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift
# Create a new namespace for ArgoCD components
oc create namespace argocd
# Apply the ArgoCD Install Manifest
oc -n argocd apply -f https://raw.githubusercontent.com/argoproj/argo-cd/v1.2.2/manifests/install.yaml
# Get the ArgoCD Server password
ARGOCD_SERVER_PASSWORD=$(oc -n argocd get pod -l "app.kubernetes.io/name=argocd-server" -o jsonpath='{.items[*].metadata.name}')ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Π½Π° ArgoCD Server, Π·Π° Π΄Π° Π±ΡΠ΄Π΅ Π²ΠΈΠ΄ΠΈΠΌ Π·Π° OpenShift Route
# Patch ArgoCD Server so no TLS is configured on the server (--insecure)
PATCH='{"spec":{"template":{"spec":{"$setElementOrder/containers":[{"name":"argocd-server"}],"containers":[{"command":["argocd-server","--insecure","--staticassets","/shared/app"],"name":"argocd-server"}]}}}}'
oc -n argocd patch deployment argocd-server -p $PATCH
# Expose the ArgoCD Server using an Edge OpenShift Route so TLS is used for incoming connections
oc -n argocd create route edge argocd-server --service=argocd-server --port=http --insecure-policy=RedirectΠ Π°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° ArgoCD Cli
# Download the argocd binary, place it under /usr/local/bin and give it execution permissions
curl -L https://github.com/argoproj/argo-cd/releases/download/v1.2.2/argocd-linux-amd64 -o /usr/local/bin/argocd
chmod +x /usr/local/bin/argocdΠ‘ΠΌΡΠ½Π° Π½Π° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΠΊΠ°ΡΠ° ΠΏΠ°ΡΠΎΠ»Π° Π½Π° ArgoCD Server
# Get ArgoCD Server Route Hostname
ARGOCD_ROUTE=$(oc -n argocd get route argocd-server -o jsonpath='{.spec.host}')
# Login with the current admin password
argocd --insecure --grpc-web login ${ARGOCD_ROUTE}:443 --username admin --password ${ARGOCD_SERVER_PASSWORD}
# Update admin's password
argocd --insecure --grpc-web --server ${ARGOCD_ROUTE}:443 account update-password --current-password ${ARGOCD_SERVER_PASSWORD} --new-password Π‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Π·ΠΈ ΡΡΡΠΏΠΊΠΈ Ρ ArgoCD Server ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΠΏΡΠ΅Π· ΡΠ΅Π± ΠΊΠΎΠ½Π·ΠΎΠ»Π°ΡΠ° ArgoCD WebUI ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π·Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅Π½ ΡΠ΅Π΄ ArgoCD Cli.
GitOps β Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ ΠΊΡΡΠ½ΠΎ
βΠΠΎΡΡΠ³ΡΡ ΡΠΈ ΡΡΡΠ³Π½Π°β β ΡΠ°ΠΊΠ° ΠΊΠ°Π·Π²Π°Ρ Π·Π° ΡΠΈΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π½Π΅ΡΠΎ Π΅ ΠΈΠ·ΠΏΡΡΠ½Π°ΡΠ°. Π ΡΠ»ΡΡΠ°ΠΈΡΠ΅ Ρ OpenShift, ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΡΠΎ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·ΠΈ Π½ΠΎΠ²Π° ΡΡΡΠ°Ρ ΠΎΡΠ½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠ΅ΡΡΠΎ ΡΡΠ·Π΄Π°Π²Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈΡΠ΅, Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½ΡΠΈΡΠ΅ ΠΈ Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ Π½Π° OpenShift. ΠΠΎ Π²ΠΈΠ½Π°Π³ΠΈ Π»ΠΈ ΡΠ°Π½ΡΡΡ Π΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎ ΠΈΠ·Π³ΡΠ±Π΅Π½?
ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΉΠΊΠΈ ΡΠ΅ΡΠΈΡΡΠ° ΡΡΠ°ΡΠΈΠΈ Π·Π° , Π΄Π½Π΅Ρ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ ΡΡΡΠ½ΠΎ, ΠΈ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ ΠΌΡ Π² ΠΏΡΠΎΡΠ΅Ρ, ΠΏΡΠΈ ΠΊΠΎΠΉΡΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π½Π° GitOps. ΠΠ° ΡΠ΅Π»ΡΠ° ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ httpd ΡΡΡΠ½ΠΎ. ΠΠ° Π΅ΠΊΡΠ°Π½Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° ΠΈΠΌΠ΅Π½Π°, Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½Ρ ΠΈ ΡΡΠ»ΡΠ³Π°, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠΌ expose Π·Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, Π·Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΌΠ°ΡΡΡΡΡ.
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/namespace.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/deployment.yaml
oc create -f https://raw.githubusercontent.com/openshift/federation-dev/master/labs/lab-4-assets/service.yaml
oc expose svc/httpd -n simple-appΠ ΡΠ°ΠΊΠ°, ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ ΡΡΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π‘Π΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π²Π΅Π΄Π΅ΠΌ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° GitOps, Π±Π΅Π· Π΄Π° Π³ΡΠ±ΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡ. ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ, ΡΠΎΠ²Π° ΡΡΠ°Π²Π° ΠΏΠΎ ΡΠ»Π΅Π΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½:
- Π‘ΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π·Π° ΠΊΠΎΠ΄Π°.
- ΠΠΊΡΠΏΠΎΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠ΅ΠΊΡΡΠΈΡΠ΅ ΡΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΈ Π³ΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°ΠΌΠ΅ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Git.
- ΠΠ·Π±ΠΈΡΠ°ΠΌΠ΅ ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°ΠΌΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° GitOps.
- ΠΠΎΠ±Π°Π²ΡΠΌΠ΅ Π½Π°ΡΠ΅ΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΊΡΠΌ ΡΠΎΠ·ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ.
- ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π² Π½Π°ΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ GitOps.
- ΠΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΎΠ² ΡΡΠ°ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° GitOps.
- Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° GitOps.
- ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ΡΠΎ (pruning) ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π°ΡΠ° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅.
ΠΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°Ρ ΠΌΠ΅ , Π² GitOps ΠΈΠΌΠ° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°(ΠΈΡΠ΅) Kubernetes β Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Git. ΠΠΎ-Π½Π°ΡΠ°ΡΡΠΊ ΠΏΡΠΈΠ΅ΠΌΠ°ΠΌΠ΅, ΡΠ΅ Π²ΡΠ² Π²Π°ΡΠ°ΡΠ° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Git-Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. Π’ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎ ΠΈΠ»ΠΈ ΡΠ°ΡΡΠ½ΠΎ, Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π·Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈΡΠ΅ Kubernetes. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΡΡΡΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π·Π° ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, ΠΈΠ»ΠΈ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π·Π° Π΄Π΅ΠΏΠ»ΠΎΠΉΠΌΠ΅Π½ΡΠΈ. ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΎ Π΅ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π΄Π° ΠΈΠΌΠ° ΡΡΡΠΎΠ³ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°ΠΌ ΡΠ΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΠΎΠ±Π΅ΠΊΡΠΈ secret, ΠΌΠ°ΡΡΡΡΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΡΠΈΠ³ΡΡΠ½ΠΎΡΡ.
Π Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Π½ΠΎΠ²ΠΎ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π² GitHub. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΡΠ΅ΡΠ΅ΡΠ΅ ΠΊΠ°ΠΊΡΠΎ ΠΏΠΎΠΆΠ΅Π»Π°Π΅ΡΠ΅, Π½ΠΈΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠΌΠ΅ΡΠΎ blogpost.
ΠΠΊΠΎ YAML ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ Π½Π΅ ΡΠ° ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΈΠ»ΠΈ Π² Git, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π±ΠΈΠ½Π°ΡΠ½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ oc ΠΈΠ»ΠΈ kubectl. ΠΠ° Π΅ΠΊΡΠ°Π½Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΏΠΈΡΠ°ΠΌΠ΅ Π·Π° YAML Π·Π° Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, deployment, ΡΡΠ»ΡΠ³Π° ΠΈ ΠΌΠ°ΡΡΡΡΡ. ΠΡΠ΅Π΄ΠΈ ΡΠΎΠ²Π° ΠΊΠ»ΠΎΠ½ΠΈΡΠ°Ρ ΠΌΠ΅ ΡΠΎΠΊΡ-ΡΠΎ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΠΈ Π²Π»ΡΠ·ΠΎΡ ΠΌΠ΅ Π² Π½Π΅Π³ΠΎ Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° cd.
oc get namespace simple-app -o yaml --export > namespace.yaml
oc get deployment httpd -o yaml -n simple-app --export > deployment.yaml
oc get service httpd -o yaml -n simple-app --export > service.yaml
oc get route httpd -o yaml -n simple-app --export > route.yamlΠ‘Π΅Π³Π° ΡΠ΅ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΉΠ»Π° deployment.yaml, Π·Π° Π΄Π° ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π΅ΠΌ ΠΏΠΎΠ»Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ Argo CD Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°.
sed -i '/sgeneration: .*\/d' deployment.yamlΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΌΠ°ΡΡΡΡΡΠ°. ΠΡΡΠ²ΠΎ Π·Π°Π΄Π°Π²Π°ΠΌΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠΎΡΠ½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΠΌΠ΅ ingress: null Ρ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°.
export ROUTE=" ingress:
- conditions:
- status: 'True'
type: Admitted"
sed -i "s/ ingress: null/\$ROUTE/g" route.yamlΠ’Π°ΠΊΠ°, Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π·Π±ΡΠ°Ρ ΠΌΠ΅, ΠΎΡΡΠ°Π²Π° Π΄Π° Π³ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΌ Π² Git-Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ. Π‘Π»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠΎΠ²Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ ΡΡΠ°Π²Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΡΡΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΡΠΎΠ³ΠΎ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΈ.
git commit -am 'initial commit of objects'
git push origin masterΠ‘Π»Π΅Π΄Π²Π° Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ΅ΠΌ, ΡΠ΅ ArgoCD Π²Π΅ΡΠ΅ Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ (ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ β Π²ΠΈΠΆΡΠ΅ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ). ΠΠ°ΡΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π² Argo CD ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ·Π΄Π°Π΄ΠΎΡ ΠΌΠ΅, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΡΠΎΡΡΠΎ ΡΠ²Π΅ΡΠ΅ΡΠ΅ ΡΠ΅, ΡΠ΅ ΠΏΠΎΡΠΎΡΠ²Π°ΡΠ΅ ΡΠΎΡΠ½ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ΅ ΡΡΠ·Π΄Π°Π»ΠΈ ΠΏΠΎ-ΡΠ°Π½ΠΎ.
argocd repo add https://github.com/cooktheryan/blogpostΠ‘Π΅Π³Π° ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π°Π΄Π°Π²Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π·Π° Π΄Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΡΡ GitOps ΡΠ°Π·Π±Π΅ΡΠ΅ ΠΊΠΎΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ ΠΏΡΡΠΈΡΠ° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠ°ΠΊΠ²ΠΎ OpenShift Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅, ΠΊΠ°ΠΊΠ²Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΊΠ»ΠΎΠ½ΠΊΠ° Π½Π° ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π΅ Π½ΡΠΆΠ½Π° ΠΈ Π΄Π°Π»ΠΈ ΡΠ΅ΡΡΡΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ.
argocd app create --project default
--name simple-app --repo https://github.com/cooktheryan/blogpost.git
--path . --dest-server https://kubernetes.default.svc
--dest-namespace simple-app --revision master --sync-policy none Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ Π·Π°Π΄Π°Π΄Π΅Π½ΠΎ Π² Argo CD, ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΡΡ Π·Π°ΠΏΠΎΡΠ²Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° Π²Π΅ΡΠ΅ ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ Π·Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΡΠ° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. Π Π½Π°ΡΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π°ΡΠ° ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅ΡΠΎ ΡΠ° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ. ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π½Π° Argo CD ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½ΠΈ ΡΠ΅ ΠΈΠΌΠ° ΡΡΠ°ΡΡΡ "Out of Sync" (ΠΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ), ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΡΠΌΠ° metΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ArgoCD Π·Π°Π΄Π°Π²Π°.
Π’ΠΎΡΠ½ΠΎ Π·Π°ΡΠΎΠ²Π°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ, ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΡΠΎ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΡΠ»ΡΡΠΈ.
Π‘Π΅Π³Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΠ±Π½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, Π·Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ Π² Π½Π°ΡΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½ΡΠΌΠ° Π³ΡΠ΅ΡΠΊΠΈ.
argocd app sync simple-app --dry-runΠΠΊΠΎ Π½ΡΠΌΠ° Π³ΡΠ΅ΡΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ.
argocd app sync simple-appΠ‘Π»Π΅Π΄ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° argocd get Π²ΡΡΡ Ρ Π½Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ ΡΡΠ°ΡΡΡΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ Π½Π° Healthy (ΠΠ΄ΡΠ°Π²ΠΎ) ΠΈΠ»ΠΈ Synced (Π‘ΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ). Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅ΡΡΡΡΠΈ Π² Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΡΠ΅Π³Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° ΠΎΠ½Π΅Π·ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΡΠ° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ.
argocd app get simple-app
Name: simple-app
Project: default
Server: https://kubernetes.default.svc
Namespace: simple-app
URL: https://argocd-server-route-argocd.apps.example.com/applications/simple-app
Repo: https://github.com/cooktheryan/blogpost.git
Target: master
Path: .
Sync Policy:
Sync Status: Synced to master (60e1678)
Health Status: Healthy
... Π ΡΠ΅Π³Π° Π²Π΅ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΏΠΎΡΠΈΡΡΠ²Π°Π½Π΅, Π·Π° Π΄Π° Π³Π°ΡΠ°Π½ΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ Π½ΠΈΡΠΎ Π½ΡΠΌΠ° Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎ ΡΡΡΠ½ΠΎ ΠΈ ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΎΠ±Π΅ΠΊΡ Π±ΡΠ΄Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ ΠΈΠ»ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠΈ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°Π½Π΅.
argocd app set simple-app --sync-policy automated --auto-prune Π ΡΠ°ΠΊΠ°, ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡ
ΠΌΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ GitOps, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ GitOps.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
