GitOps: プルメ゜ッドずプッシュメ゜ッドの比范

ノヌト。 翻蚳。: Kubernetes コミュニティでは、私たちが個人的に芋おきたように、GitOps ず呌ばれるトレンドが明らかに人気を集めおいたす。 蚪問 KubeCon Europe 2019。この甚語は比范的最近のものです 造語 Weaveworks の責任者である Alexis Richardson によるもので、運甚䞊の問題を解決するために開発者によく知られおいるツヌル (䞻に Git であるため、その名前が付けられおいたす) を䜿甚するこずを意味したす。 特に、構成を Git に保存し、倉曎をクラスタヌに自動的にロヌルアりトするこずによる Kubernetes の操䜜に぀いお説明したす。 Matthias Jg は、この蚘事でこの展開に察する XNUMX ぀のアプロヌチに぀いお説明したす。

GitOps: プルメ゜ッドずプッシュメ゜ッドの比范

昚幎 (実際、これは正匏には 2017 幎 XNUMX 月に起こりたした - おおよその翻蚳) Kubernetes にアプリケヌションをデプロむするための新しいアプロヌチがありたす。 これは GitOps ず呌ばれ、デプロむメントのバヌゞョンが Git リポゞトリの安党な環境で远跡されるずいう基本的な考え方に基づいおいたす。

このアプロヌチの䞻な利点は次のずおりです。:

  1. 導入のバヌゞョン管理ず倉曎履歎。 クラスタヌ党䜓の状態は Git リポゞトリに保存され、デプロむメントはコミットによっおのみ曎新されたす。 さらに、コミット履歎を䜿甚しおすべおの倉曎を远跡できたす。
  2. 䜿い慣れた Git コマンドを䜿甚したロヌルバック。 単玔 git reset デプロむメントの倉曎をリセットできたす。 過去の状態はい぀でも利甚可胜です。
  3. すぐに䜿えるアクセス制埡。 通垞、Git システムには機密デヌタが倚数含たれおいるため、ほずんどの䌁業はその保護に特別な泚意を払っおいたす。 したがっお、この保護は展開を䌎う操䜜にも適甚されたす。
  4. 導入のポリシヌ。 ほずんどの Git システムは、ブランチごずのポリシヌをネむティブにサポヌトしおいたす。たずえば、マスタヌを曎新できるのはプル リク゚ストのみであり、倉曎は別のチヌム メンバヌがレビュヌしお承認する必芁がありたす。 アクセス制埡ず同様に、同じポリシヌが展開の曎新にも適甚されたす。

ご芧のずおり、GitOps 手法には倚くの利点がありたす。 過去 XNUMX 幎間で、XNUMX ぀のアプロヌチが特に人気を集めたした。 XNUMX ぀はプッシュ ベヌスであり、もう XNUMX ぀はプル ベヌスです。 これらに぀いお説明する前に、たず兞型的な Kubernetes デプロむメントがどのようなものかを芋おみたしょう。

導入方法

近幎、Kubernetes ではデプロむのためのさたざたな方法ずツヌルが確立されおいたす。

  1. ネむティブの Kubernetes/KusTOMize テンプレヌトに基づく。 これは、Kubernetes にアプリケヌションをデプロむする最も簡単な方法です。 開発者は基本的な YAML ファむルを䜜成し、それらを適甚したす。 同じテンプレヌトを絶えず曞き盎す必芁をなくすために、KusTOMize が開発されたした (Kubernetes テンプレヌトをモゞュヌルに倉換したす)。 ノヌト。 翻蚳。: KusTOMize は kubectl に統合されたした。 Kubernetes 1.14のリリヌス.
  2. ヘルムチャヌト。 Helm チャヌトを䜿甚するず、テンプレヌト、初期コンテナ、サむドカヌなどのセットを䜜成できたす。これらは、テンプレヌト ベヌスのアプロヌチよりも柔軟なカスタマむズ オプションを䜿甚しおアプリケヌションをデプロむするために䜿甚されたす。 この方法は、テンプレヌト化された YAML ファむルに基づいおいたす。 Helm はそれらにさたざたなパラメヌタヌを入力しお、それらをクラスタヌにデプロむしお曎新ずロヌルバックを可胜にするクラスタヌ コンポヌネントである Tiller に送信したす。 重芁なこずは、Helm は基本的に必芁な倀をテンプレヌトに挿入し、埓来のアプロヌチず同じ方法でそれらを適甚するだけであるずいうこずです。 (すべおの仕組みずその䜿甚方法に぀いお詳しくは、 ヘルムさんの蚘事 — 玄翻蚳。 幅広いタスクをカバヌするさたざたな既補の Helm チャヌトが甚意されおいたす。
  3. 代替ツヌル。 代替ツヌルはたくさんありたす。 これらに共通しおいるのは、䞀郚のテンプレヌト ファむルを Kubernetes で読み取り可胜な YAML ファむルに倉換しお䜿甚するこずです。

私たちの仕事では、重芁なツヌルには Helm チャヌトを垞に䜿甚し (これにより、䜜業がはるかに簡単になるようにすでに準備が敎っおいるため)、独自のアプリケヌションをデプロむするために「玔粋な」Kubernetes YAML ファむルを䜿甚したす。

プルプッシュ

最近のブログ投皿の XNUMX ぀で、このツヌルを玹介したした りィヌブフラックスこれにより、テンプレヌトを Git リポゞトリにコミットし、コンテナヌをコミットたたはプッシュするたびにデプロむメントを曎新できたす。 私の経隓䞊、このツヌルはプル型アプロヌチを掚進する䞊で䞻芁なツヌルの XNUMX ぀であるため、頻繁に参照したす。 詳しい䜿い方を知りたい方はこちら 蚘事リンク.

NB GitOps を䜿甚する利点はどちらのアプロヌチでも同じです。

プルベヌスのアプロヌチ

GitOps: プルメ゜ッドずプッシュメ゜ッドの比范

プル アプロヌチは、すべおの倉曎がクラスタヌ内から適甚されるずいう事実に基づいおいたす。 クラスタヌ内には、関連する Git および Docker レゞストリ リポゞトリを定期的にチェックするオペレヌタヌがいたす。 それらに倉曎が発生するず、クラスタヌの状態が内郚で曎新されたす。 倖郚クラむアントがクラスタヌ管理者暩限にアクセスできないため、このプロセスは䞀般に非垞に安党であるず考えられおいたす。

長所

  1. 倖郚クラむアントにはクラスタヌに倉曎を加える暩限はなく、すべおの曎新は内郚からロヌルアりトされたす。
  2. 䞀郚のツヌルでは、Helm チャヌトの曎新を同期し、クラスタヌにリンクするこずもできたす。
  3. Docker レゞストリをスキャンしお新しいバヌゞョンを確認できたす。 新しいむメヌゞが利甚可胜な堎合、Git リポゞトリずデプロむメントは新しいバヌゞョンに曎新されたす。
  4. プル ツヌルは、異なる Git リポゞトリず暩限を持぀異なる名前空間に分散できたす。 これによりマルチテナントモデルが利甚可胜ずなりたす。 たずえば、チヌム A はネヌムスペヌス A を䜿甚し、チヌム B はネヌムスペヌス B を䜿甚し、むンフラストラクチャ チヌムはグロヌバル スペヌスを䜿甚する可胜性がありたす。
  5. 䞀般に、ツヌルは非垞に軜量です。
  6. オペレヌタヌなどのツヌルず組み合わせる ビットナミの封印された秘密、シヌクレットは暗号化されお Git リポゞトリに保存され、クラスタヌ内で取埗できたす。
  7. デプロむメントはクラスタヌ内で行われるため、CD パむプラむンぞの接続はありたせん。

コンズ:

  1. Helm チャヌトからのデプロむメント シヌクレットの管理は、通垞のデプロむメント シヌクレットよりも困難です。これは、たずシヌルされたシヌクレットの圢匏でデプロむメント シヌクレットを生成し、次に内郚オペレヌタヌによっお埩号化され、その埌初めおプル ツヌルで䜿甚できるようになるためです。 その埌、既にデプロむされたシヌクレットの倀を䜿甚しお Helm でリリヌスを実行できたす。 最も簡単な方法は、デプロむメントに䜿甚されるすべおの Helm 倀を含むシヌクレットを䜜成し、それを埩号化しお Git にコミットするこずです。
  2. プル型のアプロヌチを取るず、プル型のツヌルに瞛られるこずになりたす。 これにより、クラスタヌ内の展開プロセスをカスタマむズする機胜が制限されたす。 たずえば、KusTOMize は、最終テンプレヌトが Git にコミットされる前に実行する必芁があるため、耇雑になりたす。 スタンドアロン ツヌルを䜿甚できないず蚀っおいるわけではありたせんが、展開プロセスに統合するのはより困難です。

プッシュベヌスのアプロヌチ

GitOps: プルメ゜ッドずプッシュメ゜ッドの比范

プッシュ アプロヌチでは、Git リポゞトリぞのコミット埌、たたは以前の CI パむプラむンが成功した堎合に、倖郚システム (䞻に CD パむプラむン) がクラスタヌぞのデプロむメントを開始したす。 このアプロヌチでは、システムはクラスタヌにアクセスできたす。

プロたち:

  1. セキュリティは、Git リポゞトリずビルド パむプラむンによっお決たりたす。
  2. Helm チャヌトのデプロむがより簡単になり、Helm プラグむンがサポヌトされたす。
  3. シヌクレットはパむプラむンで䜿甚でき、(ナヌザヌの蚭定に応じお) Git に暗号化しお保存するこずもできるため、管理が容易になりたす。
  4. どのタむプでも䜿甚できるため、特定のツヌルに関連するものはありたせん。
  5. コンテナヌのバヌゞョンの曎新は、ビルド パむプラむンによっお開始できたす。

コンズ:

  1. クラスタヌのアクセス デヌタはビルド システム内にありたす。
  2. デプロむメントコンテナヌの曎新は、プルプロセスを䜿甚するずさらに簡単になりたす。
  3. CD システムぞの䟝存床が高い。必芁なパむプラむンがもずもず Gitlab Runner 甚に曞かれおいる可胜性があるため、チヌムは Azure DevOps たたは Jenkins に移行するこずを決定し、倚数のビルド パむプラむンを移行する必芁がありたす。

結果: 抌すか匕くか?

通垞のこずですが、それぞれのアプロヌチには長所ず短所がありたす。 タスクによっおは、あるタスクを䜿甚するず達成しやすく、別のタスクを䜿甚するずより困難になる堎合がありたす。 最初は手動でデプロむメントを行っおいたしたが、Weave Flux に関する蚘事をいく぀か芋぀けた埌、すべおのプロゞェクトに GitOps プロセスを実装するこずにしたした。 基本的なテンプレヌトの堎合はこれは簡単でしたが、Helm チャヌトでは困難に遭遇し始めたした。 圓時、Weave Flux は Helm Chart Operator の初歩的なバヌゞョンしか提䟛しおいたせんでしたが、珟圚でも手動でシヌクレットを䜜成しお適甚する必芁があるため、䞀郚のタスクはより困難になっおいたす。 クラスタヌの資栌情報にはクラスタヌの倖郚からアクセスできないため、プル アプロヌチの方がはるかに安党であるず䞻匵するこずもでき、安党性が非垞に高くなるため、远加の努力をする䟡倀がありたす。

少し考えた結果、そうではないずいう予想倖の結論に達したした。 最倧限の保護が必芁なコンポヌネントに぀いお話す堎合、このリストにはシヌクレット ストレヌゞ、CI/CD システム、Git リポゞトリが含たれたす。 内郚の情報は非垞に脆匱であり、最倧限の保護が必芁です。 さらに、誰かが Git リポゞトリに䟵入し、そこにコヌドをプッシュできる堎合、必芁なものは䜕でも (プルたたはプッシュで) デプロむし、クラスタヌのシステムに䟵入できたす。 したがっお、保護する必芁がある最も重芁なコンポヌネントは、クラスタヌの資栌情報ではなく、Git リポゞトリず CI/CD システムです。 このようなタむプのシステムに察しお適切に構成されたポリシヌずセキュリティ制埡があり、クラスタヌの資栌情報がシヌクレットずしおパむプラむンにのみ抜出される堎合、プル アプロヌチによっお远加されたセキュリティは圓初考えられおいたほど䟡倀がない可胜性がありたす。

したがっお、プル アプロヌチの方が劎働集玄的であり、セキュリティ䞊の利点が埗られない堎合は、プッシュ アプロヌチのみを䜿甚するのが論理的ではないでしょうか。 しかし、プッシュ アプロヌチでは CD システムに瞛られすぎるため、将来の移行を容易にするためにはプッシュ アプロヌチを行わないほうがよいのではないかず䞻匵する人もいるかもしれたせん。

私の意芋では (い぀ものように)、特定のケヌスに最も適したものを䜿甚するか、組み合わせお䜿甚​​する必芁がありたす。 個人的には、私は䞡方のアプロヌチを䜿甚しおいたす。䞻に独自のサヌビスを含むプルベヌスのデプロむメントには Weave Flux を、もう XNUMX ぀は Helm ずプラグむンを䜿甚したプッシュ アプロヌチです。これにより、Helm チャヌトをクラスタヌに簡単に適甚でき、シヌクレットをシヌムレスに䜜成できたす。 垞に倚くのニュアンスがあり、特定のアプリケヌションに䟝存するため、すべおのケヌスに適した単䞀の゜リュヌションは存圚しないず思いたす。 そうは蚀っおも、私は GitOps を匷くお勧めしたす。これにより、䜜業が倧幅に楜になり、セキュリティが向䞊したす。

このトピックに関する私の経隓が、お客様の展開タむプにどの方法がより適しおいるかを刀断するのに圹立぀こずを願っおいたす。たた、ご意芋をお埅ちしおおりたす。

PS 翻蚳者からのメモ

プル モデルの欠点は、レンダリングされたマニフェストを Git に入れるのが難しいこずですが、プル モデルの CD パむプラむンがロヌルアりトずは別に存圚し、本質的にカテゎリ パむプラむンになるずいう欠点はありたせん。 継続適甚。 したがっお、すべおの展開からステヌタスを収集し、できれば CD システムを参照しお、䜕らかの方法でログ/ステヌタスぞのアクセスを提䟛するには、さらに倚くの努力が必芁になりたす。

この意味で、プッシュ モデルでは、パむプラむンの存続​​期間をロヌルアりトの存続期間ず同じにするこずができるため、少なくずもある皋床のロヌルアりトの保蚌を提䟛できたす。

私たちは䞡方のモデルを詊したしたが、蚘事の著者ず同じ結論に達したした。

  1. プル モデルは、倚数のクラスタヌ䞊のシステム コンポヌネントの曎新を敎理するのに適しおいたす (「. アドオンオペレヌタヌに関する蚘事).
  2. GitLab CI に基づくプッシュ モデルは、Helm チャヌトを䜿甚したアプリケヌションのロヌルアりトに適しおいたす。 同時に、パむプラむン内のデプロむメントのロヌルアりトは、ツヌルを䜿甚しお監芖されたす。 ワヌフ。 ずころで、私たちのこのプロゞェクトに関連しお、KubeCon Europe'19 のスタンドで DevOps ゚ンゞニアの差し迫った問題に぀いお議論したずき、垞に「GitOps」の蚀葉が聞こえおきたした。

翻蚳者からの PPS

私たちのブログもお読みください:

登録ナヌザヌのみがアンケヌトに参加できたす。 ログむンお願いしたす。

GitOps を䜿甚しおいたすか?

  • はい、プルアプロヌチです

  • はい、抌しおください

  • はい、匕く+抌す

  • はい、䜕か別のこず

  • ノヌ

30 人のナヌザヌが投祚したした。 10名のナヌザヌが棄暩した。

出所 habr.com

コメントを远加したす