2022年12月8日

Continuous Delivery

クラウドネイティブな企業にGitOpsが必要な理由

GitOpsとその利点を説明し、ArgoをKubernetesクラスターと統合して変更を配信する方法を紹介します。

6392462a4ff7234d53dca99b_WhyGitOpsEnterprise_Blogheader.png

GitOpsは、Gitを使ってソフトウェア アプリケーションを展開・管理するための方法論です。これは”operation-as-code”(コード化した運用)または”code-driven operations”(コードドリブン運用)とも呼ばれ、DevOpsの原則を使って、組織全体のソフトウェア更新を合理化します。基本的に、GitとKubernetesを含む共同ソフトウェア開発モデルを使用します。

GitOpsもGitとOpsの組み合わせとして定義できます。これは、運用の原則を使ってバージョン管理システムを管理する方法です。バージョン管理が話題に上がるときは、それは主にリポジトリー内のコードに関するものです。GitOpsは、バージョン管理システムの上に運用の原則を適用することで、これをさらに一歩進めます。

GitOpsとは何か?

Harness(2).png

「GitOps」という用語は、もともとWeaveworksのエンジニアによって考案され普及したものであり、開発者がGitを介して複雑な Kubernetes ワークフローを操作するのに役立つWeaveworksのツールと組み合わせたクラウドネイティブなベストプラクティスとしてDevOpsの世界に提示されました。

GitOpsは、Gitをシステム内で発生する全デプロイリソースの信頼できる唯一のソースとして使う、ソフトウェアをデプロイするためのクラウドネイティブなプラクティスです。 新しい展開が展開されるたびに、開発者はGitを介して全てを定義する必要があります。このアプローチにより、デプロイの自動化が容易になり、オブザーバビリティーが向上します。 これにより、DevOpsチーム内でのデプロイの信頼性が向上し、開発者の全体的な生産性が向上します。

GitOpsでは、リソースの状態を簡単に維持できるように、Git を介してリソースを宣言的に定義する必要があります。これにより、人とのやり取りを最小限、またはまったく行わずに展開を自動化し、予期しないことが発生した場合、以前の状態にすばやくロールバックできます。

GitOpsにより、開発者はインフラストラクチャーコードを環境リポジトリーにプッシュし、変更に気付くことができます。 GitOps は、ソフトウェアとインフラの環境に必要な変更を実行し、さらに CI/CDパイプラインに移動します。

GitOps の動作には 4 つの基本原則があります。

  1. YAML形式で、システム全体を宣言形式で定義します。
  2. Gitを信頼できる唯一のソースとして使用し、Gitで正規の望ましいシステム/環境状態をバージョン管理します。
  3. 望ましい状態への変更を自動的に承認します。
  4. Infrastructure as Code (IaC) を採用し、正確性を確保します。

 

シンプルな GitOpsワークフロー

GitOpsは基本的に、全てをコードに移行し、全てをGitに保存して維持するなど、Git を信頼できるソースにするという原則に基づいて機能します。デプロイに関しては、オペレーターを使い、GitおよびYamlで構成されたものを宣言型の方法でデプロイします。全ての開発者は基本的にGitの扱いに慣れているため、GitOpsは複雑なワークフローを簡素化するのです。

そのため、Kubernetesに関しては、アプリコード、コンテナイメージ、関連する全てのマニフェストファイルがGitに保存され、全ての変更はGitを介して信頼できる唯一のソースとして行われます。
 Harness(3).png

GitOps を実践する方法

プッシュパイプラインとプルパイプラインの2つのデプロイ戦略があります。それらの違いは、展開環境が目的のインフラと一致することを保証する方法にあります。

 

プッシュ パイプライン戦略

ここではCI/CDツールが重要な役割を果たします。多くの企業は、ソースコードと配置マニフェストファイルを、単一リポジトリーに格納するこの戦略を使っています。 新しい更新が発生するたびに、ビルドパイプラインがトリガーされます。パイプラインはコンテナイメージを作り、最近の変更を環境にプッシュします。

 

プル パイプライン戦略

コンテナイメージと宣言的な構成(YAML形式で記述)の変更は、クラスター内で実行されているCDエンジンの中で、クラスター内からクラスターに取り込まれます。

GitOps の利点

  • GitOpsアプローチを採用することで、DevOpsチームはディザスタリカバリーを簡単に処理し、壊滅的なイベントが発生した場合にスムーズに管理できます。
  • Gitの強力な暗号化と正確性により、クラスター内の変更を追跡することでオブザーバビリティーが向上します。
  • 全てのプロセスを記述するために宣言型の構成を使用するため、Gitを知っている人にとっては透過的で簡単です。
  • GitOpsを使用すると、Git内およびGitを介して全てが信頼できる唯一のソースとして発生するため、多数のツールを管理することなく、継続的かつ頻繁な展開を可能な限り簡単に行うことができます。
  • 複雑なKubernetesのアップグレード、デプロイ、および機能は、GitOps を通じてより効率的に管理できます。
  • 全てのアクションはGitを介してGitOpsで追跡されるため、オブザーバビリティーが容易になります。
  • GitOpsは、エンジニアリングチーム全体でGitOpsワークフローを標準化することにより、生産性を向上させます。

DevOps対GitOps

DevOps ワークフローは次のとおりです。

  • 規範的モデルに基づく
  • クラウドネイティブの原則の支援に関連する
  • イノベーションと自動化を推進する主要なツールとしてCI/CDパイプラインに依存する
  • フレキシブル。 DevOpsを実践するには多くの方法があり、そのアプローチは広く開かれている

対照的に、GitOps ワークフローは次のとおりです。

  • 宣言的
  • クラウドネイティブおよびマイクロサービス アプリケーションの原則に焦点を当てる
  • Gitがイノベーションと自動化のための主要ツールとなる
  • 厳格。 特定の手順に従う必要があり、ある程度の正確性が求められ、GitOpsであるものとないものがはっきりしている

 

DevOps パイプラインと GitOps パイプライン

Argo CDとHarnessを使ったGitOps

GitOpsは、ソフトウェア配信プロセス全体がGitの使用に集中するクラウドネイティブなアプローチです。 このチュートリアルでは、ArgoをKubernetesクラスターと統合し、自動化された方法で変更を配信することがいかに簡単かを説明します。

前提条件:

 

チュートリアル:

Google Cloud を使ってクラスターを作ります。

まず、Argo CD をホストするKubernetesクラスターを作る必要があります。
 

Harness(11).png

次に、Argo CD名前空間を作り、作ったクラスターに全マニフェストファイルをインストールする必要があります。

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Argo CD CLI をダウンロードします。

brew install argocd

ここで、Argo CD APIサーバーにアクセスします。そのためには、次のコマンドを使ってservice typeをLoadBalancerにして取得します。

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

クラスターに戻り、「services and ingress」タブに移動して、外部ロードバランサーを確認します。
Harness(5).png

リンクを開くと、ArgoCDのUIにアクセスできるはずです。

Harness(6).png

ここで、ユーザー名とパスワードが必要になります。デフォルトのユーザー名は「admin」で、パスワードは以下のコマンドを使って生成できます。

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

ログイン認証情報を入力すると、Argo CD のセットアップが表示されます。

Harness(9).png

ArgoCD GitOpsで遊ぶ:Git Repoのフォーク

例えば、次のようなサンプル リポジトリーをフォークしてみましょう:

 https://github.com/argoproj/argocd-example-apps

サンプルリポジトリーをフォークしたら、Argo CDセットアップに移動し、新しいアプリを作ります。関連する詳細を追加します。
 Harness(4).png

アプリが作られると、ArgoCD UIでは非同期として表示されます。それを同期するには、「SYNC」ボタンをクリックする必要があり、アプリは正常であると表示されます。

Harness(13).png

次に、フォークしたサンプルリポジトリーに戻り、一部を変更してみましょう。 guestbook-ui-deployment.yaml レプリカを1から2に変更したとします。 次は何が起こるでしょうか?アプリが同期しなくなり、「SYNC」ボタンをもう一度クリックする必要があります。プル戦略によって全てが更新されていることが分かります。

Harness(12).png

これらの変更を確認するには、クラスターに移動して新しい変更を確認します。

Harness(7).png

2つのレプリカが実行されていることが分かります。

Harnessを使ったGitOps

Harness(10).png無料のHarnessアカウントにサインアップし、GitOpsタブに移動する必要があります。

サイドメニューから 「Deployments」 > 「GitOps」 に移動します。
 Harness(15).png

HarnessがArgo CDをインストールし、そのArgo CDインスタンスをHarnessにつなぎます。 必要なのはKubernetesクラスターだけです。 ここで、Harnessの一部として GitOpsを実行するために必要なものをセットアップする必要があります。

GitOps > Settings > GitOps Agentsに移動します。

以下に示す必要な全ての GitOps 設定を1つずつ接続します。

Harness(8).png

全てが接続されて検証済になったら、Harness GitOpsを介してアプリケーションのデプロイを開始できます。有名なゲストブックの例では、デプロイが完了すると、以下に示すようにHarness GitOpsダッシュボードが表示されます。

Harness(12).png

この単純なHarness GitOps Tutorialに従えば、Harness GitOpsを介してアプリケーションをデプロイすることがいかに直感的で簡単かを確認できます。

GitOps と複雑なアプリの展開

GitOpsの方法論を使ってアプリケーションに変更をデプロイする方法を見てきました。GitOpsはクラウドネイティブの分野で既に勢いを増しており、セットアップが簡単なため、開発者はこのアプローチを気に入っています。さらに、Gitを主要なツールとして使うため、学習曲線が大幅に短縮されます。自動化は高速で信頼性の高いソフトウェア配信の鍵であり、GitOpsの方法論がここで役に立ちます。

GitOpsが全クラウドネイティブへの答えではないかもしれませんが、このアプローチはすぐにソフトウェア配信スペースで重要な段階を迎えると確信しています。 GitOpsは、全開発者が知るシンプルなツールであるGitを使うことで、信頼できる唯一のアプローチを強調しています。 GitOpsは、Kubernetesなどのクラウドネイティブツールとの併用で、真のDXDXを達成するための優れた方法となります。 GitOpsは定着しており、その未来は明るく輝いています。 適切な DevOpsプロセスを実装するには、多くの労力を必要としますが、幸いなことに、GitOpsが役に立ちます。

GitOpsがアプリケーションのデプロイを加速する方法について、詳しく知りたいですか?ぜひお問い合わせください! 


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ