2022年12月8日
Continuous Delivery
GitOpsとその利点を説明し、ArgoをKubernetesクラスターと統合して変更を配信する方法を紹介します。
GitOpsは、Gitを使ってソフトウェア アプリケーションを展開・管理するための方法論です。これは”operation-as-code”(コード化した運用)または”code-driven operations”(コードドリブン運用)とも呼ばれ、DevOpsの原則を使って、組織全体のソフトウェア更新を合理化します。基本的に、GitとKubernetesを含む共同ソフトウェア開発モデルを使用します。
GitOpsもGitとOpsの組み合わせとして定義できます。これは、運用の原則を使ってバージョン管理システムを管理する方法です。バージョン管理が話題に上がるときは、それは主にリポジトリー内のコードに関するものです。GitOpsは、バージョン管理システムの上に運用の原則を適用することで、これをさらに一歩進めます。
「GitOps」という用語は、もともとWeaveworksのエンジニアによって考案され普及したものであり、開発者がGitを介して複雑な Kubernetes ワークフローを操作するのに役立つWeaveworksのツールと組み合わせたクラウドネイティブなベストプラクティスとしてDevOpsの世界に提示されました。
GitOpsは、Gitをシステム内で発生する全デプロイリソースの信頼できる唯一のソースとして使う、ソフトウェアをデプロイするためのクラウドネイティブなプラクティスです。 新しい展開が展開されるたびに、開発者はGitを介して全てを定義する必要があります。このアプローチにより、デプロイの自動化が容易になり、オブザーバビリティーが向上します。 これにより、DevOpsチーム内でのデプロイの信頼性が向上し、開発者の全体的な生産性が向上します。
GitOpsでは、リソースの状態を簡単に維持できるように、Git を介してリソースを宣言的に定義する必要があります。これに より、人とのやり取りを最小限、またはまったく行わずに展開を自動化し、予期しないことが発生した場合、以前の状態にすばやくロールバックできます。
GitOpsにより、開発者はインフラストラクチャーコードを環境リポジトリーにプッシュし、変更に気付くことができます。 GitOps は、ソフトウェアとインフラの環境に必要な変更を実行し、さらに CI/CDパイプラインに移動します。
GitOps の動作には 4 つの基本原則があります。
シンプルな GitOpsワークフロー
GitOpsは基本的に、全てをコードに移行し、全てをGitに保存して維持するなど、Git を信頼できるソースにするという原則に基づいて機能します。デプロイに関しては、オペレーターを使い、GitおよびYamlで構成されたものを宣言型の方法でデプロイします。全ての開発者は基本的にGitの扱いに慣れているため、GitOpsは複雑なワークフローを簡素化するのです。
そのため、Kubernetesに関しては、アプリコード、コンテナイメージ、関連する全てのマニフェストファイルがGitに保存され、全ての変更はGitを介して信頼できる唯一のソースとして行われます。
プッシュパイプラインとプルパイプラインの2つのデプロイ戦略があります。それらの違いは、展開環境が目的のインフラと一致することを保証する方法にあります。
プッシュ パイプライン戦 略
ここではCI/CDツールが重要な役割を果たします。多くの企業は、ソースコードと配置マニフェストファイルを、単一リポジトリーに格納するこの戦略を使っています。 新しい更新が発生するたびに、ビルドパイプラインがトリガーされます。パイプラインはコンテナイメージを作り、最近の変更を環境にプッシュします。
プル パイプライン戦略
コンテナイメージと宣言的な構成(YAML形式で記述)の変更は、クラスター内で実行されているCDエンジンの中で、クラスター内からクラスターに取り込まれます。
DevOps ワークフローは次のとおりです。
対照的に、GitOps ワークフローは次のとおりです。
DevOps パイプラインと GitOps パイプライン
GitOpsは、ソフトウェア配信プロセス全体がGitの使用に集中するクラウドネイティブなアプローチです。 このチュートリアルでは、ArgoをKubernetesクラスターと統合し、自動化された方法で変更を配信することがいかに簡単かを説明します。
前提条件:
チュートリアル:
Google Cloud を使ってクラスターを作ります。
まず、Argo CD をホストするKubernetesクラスターを作る必要があります。
次に、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」タブに移動して、外部ロードバランサーを確認します。
リンクを開くと、ArgoCDのUIにアクセスできるはずです。
ここで、ユーザー名とパスワードが必要になります。デフォルトのユーザー名は「admin」で、パスワードは以下のコマンドを使って生成できます。
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
ログイン認証情報を入力すると、Argo CD のセットアップが表示されます。
例えば、次のようなサンプル リポジトリーをフォークしてみましょう:
https://github.com/argoproj/argocd-example-apps
サンプルリポジトリーをフォークしたら、Argo CDセットアップに移動し、新しいアプリを作ります。関連する詳細を追加します。
アプリが作られると、ArgoCD UIでは非同期として表示されます。 それを同期するには、「SYNC」ボタンをクリックする必要があり、アプリは正常であると表示されます。
次に、フォークしたサンプルリポジトリーに戻り、一部を変更してみましょう。 guestbook-ui-deployment.yaml レプリカを1から2に変更したとします。 次は何が起こるでしょうか?アプリが同期しなくなり、「SYNC」ボタンをもう一度クリックする必要があります。プル戦略によって全てが更新されていることが分かります。
これらの変更を確認するには、クラスターに移動して新しい変更を確認します。
2つのレプリカが実行されていることが分かります。
無料のHarnessアカウントにサインアップし、GitOpsタブに移動する必要があります。
サイドメニューから 「Deployments」 > 「GitOps」 に移動します。
HarnessがArgo CDをインストールし、そのArgo CDインスタンスをHarness につなぎます。 必要なのはKubernetesクラスターだけです。 ここで、Harnessの一部として GitOpsを実行するために必要なものをセットアップする必要があります。
GitOps > Settings > GitOps Agentsに移動します。
以下に示す必要な全ての GitOps 設定を1つずつ接続します。
全てが接続されて検証済になったら、Harness GitOpsを介してアプリケーションのデプロイを開始できます。有名なゲストブックの例では、デプロイが完了すると、以下に示すようにHarness GitOpsダッシュボードが表示されます。
この単純なHarness GitOps Tutorialに従えば、Harness GitOpsを介してアプリケーションをデプロイすることがいかに直感的で簡単かを確認できます。
GitOpsの方法論を使ってアプリケーションに変更をデプロイする方法を見てきました。GitOpsはクラウドネイティブの分野で既に勢いを増しており、セットアップが簡単なため、開発者はこのアプローチを気に入っています。さらに、Gitを主要なツールとして使うため、学習曲線が大幅に短縮されます。自動化は高速で信頼性の高いソフトウェア配信の鍵であり、GitOpsの方法論がここで役に立ちます。
GitOpsが全クラウドネイティブへの答えではないかもしれませんが、このアプローチはすぐにソフトウェア配信スペースで重要な段階を迎えると確信しています。 GitOpsは、全開発者が知るシンプルなツールであるGitを使うことで、信頼で きる唯一のアプローチを強調しています。 GitOpsは、Kubernetesなどのクラウドネイティブツールとの併用で、真のDXDXを達成するための優れた方法となります。 GitOpsは定着しており、その未来は明るく輝いています。 適切な DevOpsプロセスを実装するには、多くの労力を必要としますが、幸いなことに、GitOpsが役に立ちます。
GitOpsがアプリケーションのデプロイを加速する方法について、詳しく知りたいですか?ぜひお問い合わせください!
この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。