ΠΠ½Π΅Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΡΠ΅ ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π½Π° 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 ΠΈ ΡΠ°ΡΡΠ΅ΠΆΠ° Π½Π° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΌΡΠ»ΡΠΈΠΎΠ±Π»Π°ΡΠ½ΠΈ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΈ ΠΏΠ΅ΡΠΈΡΠ΅ΡΠ½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ (edge computing) ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΠΈ ΡΡΠ΅Π΄Π½ΠΎΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ 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, app portfolio ΠΈ Ρ.Π½. Ρ Π½Π°ΡΠ»Π΅Π΄ΡΠ²Π°Π½Π΅). Π‘ Π΄ΡΡΠ³ΠΈ Π΄ΡΠΌΠΈ, ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠ°ΠΊ Π΄Π° ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ β ΠΊΡΠΌ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ Π·Π°Π΄Π°Π΄Π΅ Π² Git ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ βΠΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ (prod) β ΠΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X β ΠΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Xβ, ΡΠΎ ΠΏΡΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ½Π½ΠΈΡΠ΅ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ°Ρ ΡΡΠ²ΠΊΡΠΏΠ½ΠΎΡΡΡΠ° ΠΎΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ:
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΎΠ±ΡΠΈ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ.
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X.
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½ΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° X.
9. Π¨Π°Π±Π»ΠΎΠ½ΠΈ ΠΈ ΠΏΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈ Π½Π°Π±ΠΎΡΠ° Π½Π° Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° Π½Π°ΡΡΡΠΎΠΈ ΠΏΠΎ-ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ.
10. ΠΠ·Π±ΠΈΡΠ°ΡΠ΅Π»Π½ΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ ΡΡΠ»ΠΎΠ²ΠΈΡ Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΊΡΠΌ ΠΊΠ»ΡΡΡΠ΅ΡΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ.
11. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ΅ ΠΎΡΠ΅Π½ΡΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΠΈΠ·Π±ΠΈΡΠ°Ρ ΠΊΠ°ΠΊ ΡΠ΅ ΡΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ (Helm Chart, ΡΠΈΡΡ Kubernetes yaml ΠΈ Ρ.Π½.), Π·Π° Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π°ΠΉ-ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΡΠΌΠ°Ρ Π·Π° Π²ΡΡΠΊΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ GitOps Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° OpenShift
ArgoCD
ArgoCD ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΌΠΎΠ΄Π΅Π»Π° External Resource Reconcile ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ UI Π·Π° ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΡ Π½Π° ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΡΠ΅ ΠΈ Git Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ°ΡΠ° ΠΏΠΎ ΡΡ Π΅ΠΌΠ° "Π΅Π΄Π½ΠΎ ΠΊΡΠΌ ΠΌΠ½ΠΎΠ³ΠΎ". Π‘ΡΠ΅Π΄ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π΅ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π½Π΅ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ ArgoCD.
Flux
Flux ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΌΠΎΠ΄Π΅Π»Π° On-Cluster Resource Reconcile ΠΈ Π·Π°ΡΠΎΠ²Π° ΡΡΠΊ Π½ΡΠΌΠ° ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΡΠ»Π°Π±ΠΎ ΠΌΡΡΡΠΎ. ΠΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, ΠΏΠΎΡΠ°Π΄ΠΈ Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° ΠΎΡΡΠ°Π²Π° Π΄ΠΎΡΠΈ ΠΏΡΠΈ Π½Π΅ΡΠ°Π±ΠΎΡΠ΅Ρ Π΅Π΄ΠΈΠ½ ΠΊΠ»Π°ΡΡΠ΅Ρ.
ΠΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° 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 Tool
# 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 ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΡΠΎ Π²Π΅Π΄Π½Π°Π³Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·ΠΈ Π½ΠΎΠ²Π° ΡΡΡΠ°Ρ ΠΎΡΠ½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΡΠ΅ΡΡΠΎ ΡΡΠ·Π΄Π°Π²Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊΠ°Π²Π° ΡΠΈΡΡΠ°ΡΠΈΡ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΌΠ°ΡΡΡΡΡΠΈ, deployment'ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ Π½Π° OpenShift. ΠΠΎ Π²ΠΈΠ½Π°Π³ΠΈ Π»ΠΈ ΡΠ°Π½ΡΡΡ Π΅ ΠΎΠΊΠΎΠ½ΡΠ°ΡΠ΅Π»Π½ΠΎ ΠΈΠ·ΠΏΡΡΠ½Π°Ρ?
ΠΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΉΠΊΠΈ ΡΠ΅ΡΠΈΡΡΠ° ΡΡΠ°ΡΠΈΠΈ Π·Π° , Π΄Π½Π΅Ρ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΠΊΠ°ΠΊ Π΄Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°ΠΌΠ΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΎΡΠΎ ΡΡΡΠ½ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅ΡΡΡΡΠΈ Π² ΠΏΡΠΎΡΠ΅Ρ, Π² ΠΊΠΎΠΉΡΠΎ Π²ΡΠΈΡΠΊΠΎ ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ GitOps. ΠΠ° ΡΠ΅Π»ΡΠ° ΠΏΡΡΠ²ΠΎ ΡΠ΅ ΡΠ°Π·Π²Π΅ΡΠ½Π΅ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ httpd ΡΡΡΠ½ΠΎ. ΠΠ° Π΅ΠΊΡΠ°Π½Π° ΠΏΠΎ-Π΄ΠΎΠ»Ρ Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ ΠΈΠΌΠ΅Π½Π°, deployment ΠΈ ΡΡΠ»ΡΠ³Π°, Π° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠΌ 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β (ΠΠ΅ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΎ), ΡΡΠΉ ΠΊΠ°ΡΠΎ Π½ΡΠΌΠ° label-ΠΌΠ΅ΡΠΊΠ°, ΠΊΠΎΡΡΠΎ 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
