Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GitOps для OpenShift

БСгодня ΠΌΡ‹ расскаТСм ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°Ρ… ΠΈ модСлях GitOps, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ эти ΠΌΠΎΠ΄Π΅Π»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ OpenShift. Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ руководство Π½Π° эту Ρ‚Π΅ΠΌΡƒ доступно ΠΏΠΎ ссылкС.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GitOps для OpenShift

Если Π²ΠΊΡ€Π°Ρ‚Ρ†Π΅, Ρ‚ΠΎ GitOps – это Π½Π°Π±ΠΎΡ€ практичСских ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² использования pull-запросов Git для управлСния конфигурациями инфраструктуры ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… GitOps рассматриваСтся ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ СдинствСнный источник свСдСний ΠΎ состоянии систСмы, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π»ΡŽΠ±Ρ‹Π΅ измСнСния этого состояния ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π°ΡŽΡ‚ΡΡ Π°ΡƒΠ΄ΠΈΡ‚Ρƒ.

ИдСя с ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² GitOps ΠΎΡ‚Π½ΡŽΠ΄ΡŒ Π½Π΅ Π½ΠΎΠ²Π°, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ ΠΈ практичСски повсСмСстно примСняСтся ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с исходным ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. GitOps просто Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (review-ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, 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.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GitOps для OpenShift

External Resource Reconciler (Push)

Π­Ρ‚Ρƒ модСль ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ, ΠΊΠΎΠ³Π΄Π° Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ΠΎΠ², ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΡ… Π·Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ рСсурсов Π² ΠΏΠ°Ρ€Π°Ρ… Β«Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Git – кластСр KubernetesΒ». ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΆΠ΅ здСсь Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ управляСмом кластСрС Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ свой ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€. ΠŸΠ°Ρ€Ρ‹ Β«Git – кластСр k8sΒ» часто ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ CRD-описания (custom resources definition), Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ. Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… этой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ Git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Π² CRD, с рСсурсами кластСра Kubernetes, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΠΆΠ΅ Π·Π°Π΄Π°Π½Ρ‹ Π² CRD, ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия ΠΏΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ сравнСния. Π’ частности, такая модСль GitOpsΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ArgoCD.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² GitOps для OpenShift

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. НСсколько кластСров – ΠΎΠ΄ΠΈΠ½ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ

Админ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ Git ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ сразу Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… кластСров OpenShift ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ… ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ надобности.

8. Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ кластСрных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ (наслСдованиС)

Админ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ кластСрных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ (stage, prod, app portfolio ΠΈ Ρ‚. Π΄ с наслСдованиСм). Π˜Π½Π°Ρ‡Π΅ говоря, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ – ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΊ нСскольким кластСрам.

НапримСр, Ссли Π°Π΄ΠΌΠΈΠ½ Π·Π°Π΄Π°Π΅Ρ‚ Π² Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ Β«ΠŸΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ кластСры (prod) β†’ ΠšΠ»Π°ΡΡ‚Π΅Ρ€Ρ‹ систСмы X β†’ ΠŸΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½ кластСры систСмы XΒ», Ρ‚ΠΎ ΠΊ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½-кластСрам систСмы X примСняСтся объСдинСниС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ²:

  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΠΈ, ΠΎΠ±Ρ‰ΠΈΠ΅ для всСх ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½-кластСров.
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΠΈ для кластСра систСмы X.
  • ΠšΠΎΠ½Ρ„ΠΈΠ³ΠΈ для ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½-кластСра систСмы X.

9. Π¨Π°Π±Π»ΠΎΠ½Ρ‹ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ

Админ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ унаслСдованных ΠΊΠΎΠ½Ρ„ΠΈΠ³ΠΎΠ² ΠΈ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ‚ΠΎΠ½ΡŒΡˆΠ΅ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ для ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… кластСров, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ.

10. Π˜Π·Π±ΠΈΡ€Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ include’ы ΠΈ exclude’ы для ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

Админ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ условия примСнСния ΠΈΠ»ΠΈ нСпримСнСния Ρ‚Π΅Ρ… ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΊ кластСрам с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ характСристиками.

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.
https://blog.openshift.com/is-it-too-late-to-integrate-gitops/

GitOps – Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ·Π΄Π½ΠΎ

«ПоСзд ΡƒΡˆΠ΅Π»Β» – Ρ‚Π°ΠΊ говорят ΠΎ ситуации, ΠΊΠΎΠ³Π΄Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡƒΠΏΡƒΡ‰Π΅Π½Π°. Π’ случаС с OpenShift ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Π½ΠΎΠ²ΡƒΡŽ ΠΊΠ»Π°ΡΡΠ½ΡƒΡŽ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡƒ часто создаСт ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΈ обслуТиваниСм ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠ², deployment’ов ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² OpenShift. Но всСгда Π»ΠΈ шанс ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡƒΡ‰Π΅Π½?

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ΅Ρ€ΠΈΡŽ статСй ΠΎ GitOps, сСгодня ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ созданноС Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π΅Π³ΠΎ рСсурсы Π² Π½Π΅ΠΊΠΈΠΉ процСсс, Π³Π΄Π΅ всСм управляСт инструмСнтарий 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. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ самый Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, созданный ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для deployment’ов. Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ рСкомСндуСтся ΠΈΠΌΠ΅Ρ‚ΡŒ строгиС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 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:        <none>
Sync Status:        Synced to master (60e1678)
Health Status:      Healthy
...   

А Π²ΠΎΡ‚ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π°Π²Ρ‚ΠΎΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ очистку, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈ Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся ΠΈΠ»ΠΈ обновляСтся Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅.

argocd app set simple-app --sync-policy automated --auto-prune

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ GitOps ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ использовало GitOps.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com