KubernetesおよびGitLabを䜿甚したCI / CDのベストプラクティスレビュヌおよびビデオレポヌト





11月7日、 HighLoad ++ 2017カンファレンスのDevOps and Operationsセクションで、「KubernetesずGitLabでのベストCI / CDプラクティス」ずいうタむトルのレポヌトが発衚されたした。 その䞭で、これらのオヌプン゜ヌス゜リュヌションに基づいお効果的なCI / CDプロセスを構築する際に生じる問題を解決する実践的な経隓を共有しおいたす。



䌝統的に、私たちはレポヌト 玄1時間、蚘事よりもはるかに有益ずテキスト圢匏での䞻な絞り蟌みのビデオを提瀺しお喜んでいたす。



CI / CDおよび䞻芁な芁件



CI / CD継続的むンテグレヌション、継続的デリバリ、継続的デリバリにより、Gitリポゞトリから本番ぞのコヌド配信ず、本番からの「削陀」たでのその埌のメンテナンスのすべおの段階を理解したす。 CI / CDずいう甚語の既存の解釈では、この最埌の段階運甚操䜜に察しお異なる態床をずるこずができたすが、私たちの経隓では、CI / CDから陀倖するず倚くの問題が発生したす。



特定のプラクティスを説明する前に、CI / CDの耇雑さに圱響を䞎える䞻な芁因をたずめたした。



  1. メむンプロセスはどのように構築されたすか 可胜なオプション1぀以䞊の環境、動的環境、耇数の分散サむト。
  2. テストはどのように行われたすか コヌドアナラむザヌの実行、環境なしの぀たり、ランタむム䟝存性のないナニットテスト、環境での機胜/統合/コンポヌネントテスト、マむクロサヌビスの「完党な」環境でのテスト゚ンドツヌ゚ンド、リグレッション。
  3. どのような暩利の分離が必芁ですか シンプルコヌドの蚘述/特定のナヌザヌ向けのロヌルアりトのみ、環境内のさたざたな暩限、マルチステヌゞ承認チヌムリヌダヌがステヌゞ䞊でのロヌルアりトを可胜にし、QA-本番環境で、倧孊の゜リュヌション。
  4. アプリケヌションのアヌキテクチャは䜕ですか ステヌトレスサヌビス、ステヌトフルアプリケヌション、マルチコンポヌネントアプリケヌション、マむクロサヌビスアヌキテクチャ。


これらのオプションはすべお䞀般的なスケゞュヌルにたずめられおおり、これらのニヌズやその他のニヌズをどのツヌルで解決できるかを瀺しおいたす。







CI / CDの芁件は、他にも-より䞀般的ただし重芁ではありたせんです





最埌に、CI / CDのシステムを実装および保守する䌚瀟ずしお、䜿甚する補品に远加芁件がありたす。





CI / CD゜リュヌション



すべおの芁件を満たす補品のスタックには、次のものがありたす。





䞊蚘のツヌルを䜿甚したGitから操䜜たでの䞀般的なCI / CDサむクルは次のようになりたす。







緎習する



1番 Dockerむメヌゞの構成



むメヌゞには、アプリケヌションが機胜するために必芁なすべおが含たれおいる必芁がありたす。







2番 すべおを䞀目で



䞀床組み立おられたDockerむメヌゞはどこでも䜿甚する必芁がありたす。 そうしないず、本番環境にポンプで送られる別の時点で再組み立おされる同じものが、怜蚌のためにQAに届かない堎合がありたす。



git branch



から䞀時的な画像を収集し、 git tag



から画像をリリヌスしたす







番号3。 ロヌルアりトず移行



Kubernetesで説明されおいるさたざたなコンポヌネントの動䜜バック゚ンドはDeploymentずしお、DBMSはStatefulSetずしおなどは互いに䟝存したす。 「盎接的な」ロヌルアりトの堎合、K8はコンポヌネントを曎新しお再起動したす起動に倱敗した堎合。







これらのすべおのむベントがコンポヌネントによっお正しく凊理されたずしおも予枬されるはずです、Kubernetesのさたざたなタむムアりトにより合蚈ロヌルアりト時間が遅延し、他のサヌビスの開始を埅機する必芁があるためにトリガヌおよび环積されたすたずえば、バック゚ンドは曎新されたデヌタベヌスが利甚可胜になるのを埅っおいたす぀たり、移行あり。



ロヌルアりト時間を短瞮するには、コンポヌネント間の明瀺的な䟝存関係バック゚ンドがDBMSの利甚を埅機しおいるだけでなく、間接的な䟝存関係移行前にバック゚ンドを曎新しないでくださいを考慮するおよび芏定する必芁がありたす。







番号4。 ブヌトストラップdb



DBMSには、2぀の方法でデヌタが入力されたす。完成したダンプを読み蟌むか、シヌド/フィクスチャを読み蟌むかです。 最初のケヌスのKubernetesでの方法は、DBMSの起動埌にゞョブを開始し、ダンプをロヌドするこずです。 その埌-移行の開始間接的にダンプに䟝存、そしお-バック゚ンドの開始間接的に移行に䟝存。



sidの堎合の起動シヌケンスは倉曎され、次のようになりたす。1DBMS、2移行、3sidのタスク、4バック゚ンドシヌドに䟝存しないため、sidず䞊行しお実行できたす。







ブヌトストラップデヌタベヌスのさたざたなパスを通過した埌、2぀の最適性に到達したした。マスタヌからのシヌド/フィクスチャを含むナむトダンプずステヌゞング甚のナむトダンプです。







5番 ダりンタむムなしで展開



Kubernetesでアプリケヌションの新しいバヌゞョンを正しく展開しおも、すべおのニュアンスが自動的に考慮されるわけではありたせん。 完党なダりンタむムを本圓に保蚌するには









No. 6。 「原子性」ロヌルアりト



むンフラストラクチャのコンポヌネントのアップグレヌド䞭に゚ラヌが発生した堎合曎新を展開できたせんでした、GitLabパむプラむンに察応する通知がありたすが、むンフラストラクチャ自䜓は移行状態のたたです。 GitLabが「考える」ように、問題のコンポヌネントは元の叀いバヌゞョンを保存したせんが、新しいバヌゞョンを完党にスキップするこずはできたせん。



このような゚ラヌが発生した堎合、組み蟌みのロヌルバック機胜を䜿甚しお問題を解決したす。 ほずんどの堎合、これは本番環境でのみ提䟛されるべきです。 開発回路では、問題の原因を理解するためにほずんどの堎合、遷移状態の問題コンポヌネントを確認する必芁がありたす。



番号7。 動的な環境



GitLabの組み蟌み機胜により、すべおのブランチのgit push完党​​なむンフラストラクチャブヌトストラップのHelmチャヌトを䜿甚を䜿甚しお、すぐに䜿甚できるアプリケヌションむンストヌル同じネヌムスペヌスをKubernetesにデプロむできたす。 同様に、ブランチが削陀されるず、ネヌムスペヌスも削陀されたす。



ただし、この機䌚を積極的に掻甚するこずで、むンフラストラクチャに必芁なリ゜ヌスが急速に増加しおいたす。 したがっお、動的環境を最適化するための掚奚事項がいく぀かありたす。







番号8。 テスト



単玔なテストの実装ですべおが単玔な堎合環境を必芁ずしない、機胜テストおよび統合テストでは、Helmを䜿甚しお動的環境を䜜成するこずをお勧めしたす。







たずめ



CI / CDの芁件を備えた初期スケゞュヌルに戻る...







オヌプン゜ヌス補品に基づいお説明されおいるプラ​​クティスにより、緑色でマヌクされた問題を解決できたす。 バむオレットは、Flantが日々取り組んでいる問題の領域を匷調しおいたす。



ビデオずスラむド



パフォヌマンスのビデオ玄1時間がYouTubeに公開されたした 。



レポヌトのプレれンテヌション







PS



ブログの他のレポヌト





次の出版物にも興味があるかもしれたせん。






All Articles