GitOps とは
GitOps は、Git リポジトリを信頼できる唯一の情報源として使用し、インフラストラクチャをコードとして提供します。登録されたコードは CI プロセスでチェックされ、CD プロセスではセキュリティやコードとしてのインフラストラクチャなど、アプリケーションフレームワークに設定された境界線に関する要件がチェックおよび適用されます。コードの変更はすべて追跡されるため、アップデートが容易になると同時に、ロールバックが必要な場合のバージョン管理も可能です。
GitOps が提供するもの:
- アプリケーション開発のための標準的なワークフロー
- アプリケーション要件を事前に設定することによるセキュリティの向上
- Git による可視化とバージョン管理で信頼性を向上
- あらゆるクラスタ、クラウド、オンプレミス環境における一貫性
GitOps フレームワークの構築には、他にも多くのツールを併用できます。たとえば、git リポジトリ、Kubernetes、継続的インテグレーション / 継続的デリバリー (CI/CD) ツール、構成管理ツールなどです。
詳細は、隔週木曜日午後 3 時 (米国東部標準時)、OpenShift.tv の GitOps Guide to the Galaxy でご覧ください
GitOps を活用するべき理由
GitOps は、DevOps 文化に投資する人たちに約束された哲学とアプローチを取り、その成果を実現し始めるためのフレームワークを提供します。年次レポートの「State of DevOps Report」によると、DevOps を実践している組織は、アプリケーションとコードの革新率および安定性に大きな改善を実現しています。
GitOps は、開発者が慣れ親しんでいる Git ベースのワークフローを使用することで、アプリケーションの開発からデプロイ、アプリケーションのライフサイクル管理、インフラストラクチャの構成まで、既存のプロセスを拡張します。アプリケーションのライフサイクルを通じたすべての変更は、Git リポジトリで追跡され、監査が可能です。Git を使って変更を加えることができるため、開発者は運用チームによるリソースの割り当てや承認を待つことなく、自分のペースでコードを書くことができるようになります。
運用チームにとっては、変更が可視化できれば、問題を迅速に追跡し再現でき、全体的なセキュリティを向上させることができます。最新の監査証跡があれば、企業は不要な変更のリスクを低減させ、プロダクションでの稼動の前に修正することができます。
このように、開発から生産に至るまでのコードの変更により、組織はビジネスや競争環境の変化に俊敏に対応できるようになります。
Red Hat のリソース
GitOps の開始方法
GitOps を始めるには、宣言的に管理できるインフラストラクチャが必要です。このため、GitOps は Kubernetes およびクラウドネイティブ・アプリケーション開発のオペレーティングモデルとしてよく使用され、Kubernetes の継続的デプロイメントを可能にします。
しかし、Kubernetes を使用することは GitOps の要件ではありません。GitOps は、他のインフラストラクチャおよびデプロイメント・パイプラインに適用できる手法です。
Kubernetes と同様に、Ansible は、従来の IT システムを宣言的にモデリングできる望ましい状態のエンジンであるため、GitOps に使用することができます。Ansible ユーザーは、Ansible モジュールを使用するコントロールプレーンを介して、Kubernetes、既存の IT インフラストラクチャ、またはその両方でアプリケーションを管理できます。
GitOps を使用して、開発パイプラインの構築、アプリケーションのコーディング、構成の管理、Kubernetes クラスタのプロビジョニング、Kubernetes またはコンテナレジストリへのデプロイメントを行うことができます。
GitOps ワークフローとは
GitOps は、インフラストラクチャ構成のバージョン管理システムとして Git を使用する IaC (Infrastructure as Code) における進化と見なすことができます。IaC は多くの場合、システムの望ましい状態を定義してシステムの実際の状態を追跡することにより、インフラストラクチャ管理への宣言型アプローチに従います。
IaC と同様に、GitOps ではシステムの望ましい状態を宣言的に記述する必要があります。宣言型ツールを使用することで、すべての構成ファイルとソースコードを Git でバージョン管理できます。
CI/CD パイプラインは通常、コードがリポジトリにプッシュされるなどの外部イベントによってトリガーされます。GitOps ワークフローでは、Git リポジトリの状態を修正するプルリクエストを使用して変更が行われます。
GitOps ワークフローを使用して新しいリリースをロールアウトするには、Git でプルリクエストを行います。それにより、クラスタの宣言された状態に変更が加えられます。GitOps パイプラインとオーケストレーション・システムの間に位置する GitOps オペレーターは、Git からコミットを取得して新しい状態の宣言をプルします。
変更が承認されてマージされると、ライブ・インフラストラクチャに自動的に適用されます。開発者は、標準のワークフローと (CI/CD) のプラクティスを引き続き使用できます。
Kubernetes で GitOps を使用する場合、オペレーターはたいてい Kubernetes Operator になります。オペレーターは、リポジトリ内の望ましい状態を、デプロイされたインフラストラクチャの実際の状態と比較します。そして、実際の状態とリポジトリ内に存在するものの間に違いが見られるたびに、インフラストラクチャを更新します。また、コンテナ・イメージ・リポジトリを監視し、同じ方法で更新を行って新しいイメージをデプロイすることもできます。
GitOps においては、可観測性、つまりシステムが観察可能であることが重要な概念となります。GitOps の可観測性により、望ましい状態と観測された状態 (または実際の状態) が同じであることを確認できます。
プルリクエストと Git のようなバージョン管理システムを使用すると、デプロイメントプロセスに可視性がもたらされます。システムに加えられた変更を表示および追跡し、監査証跡を提供し、何かが壊れた場合には変更をロールバックすることができます。
GitOps ワークフローは、システムの安定性と信頼性を向上させながら、生産性と開発およびデプロイメントの速度を向上することができます。
GitOps と DevOps の相違点
GitOps と DevOps は、原則と目標を一部共有しています。DevOps は文化的な変化に関するものであり、開発チームと運用チームがコラボレーティブに連携する方法を提供します。
GitOps は、コラボレーション、CI/CD、バージョン管理などの DevOps プラクティスを採用し、それらをインフラストラクチャの自動化とアプリケーションのデプロイメントに適用するためのツールとフレームワークを提供します。開発者はすでに知っているコードリポジトリで作業し、運用者がその他の必要なものを導入します。
Red Hat による GitOps の支援
Red Hat® OpenShift® は、管理者が GitOps の原則を使用して構成と管理を行える宣言型 Kubernetes プラットフォームです。Kubernetes ベースのインフラストラクチャとアプリケーション内で作業することで、クラスタと開発ライフサイクル全体に一貫性を適用できます。Red Hat OpenShift は、オンプレミスおよびパブリッククラウド・リソースに分散されたアプリケーションの管理を統合し、以下を実行します。
- クラスタの状態 (構成、監視、ストレージ) が似ていることを確認し、開発サイクルの早い段階でアプリケーションの制約を知らせる。
- クラスタを既知の状態から回復させることで、複数のクラスタにまたがるコードの変更をロールバックする。
- Git に提出された変更を複数の Red Hat OpenShift クラスタにロールアウトする。
- テンプレート化された構成をハイブリッドクラウド全体で関連付ける。
Red Hat は ArgoCD や Tekton といったオープンソース・プロジェクトと協力し、GitOps のためのフレームワークを実装しています。Red Hat OpenShift Pipelines の Operator をインストールして、Red Hat OpenShift GitOps Operator が既存の Red Hat OpenShift デプロイメント内で GitOps を管理するために Argo を使用して新しいツールをどのように開発しているかを確認できます。
Red Hat® OpenShift® Service on AWS (ROSA) は、フルマネージドサービスを提供するターンキー型のアプリケーション・プラットフォームです。組織は運用効率を高め、イノベーションに再び集中し、ネイティブ AWS 環境でアプリケーションをすばやく構築、デプロイ、スケーリングできます。
ROSA は、チームがリージョン間でクラスタを管理し、セルフサービスツールを使用してクラスタを作成およびデプロイし、セキュリティパッチとアップグレードを自動化するのに役立ちます。例えば ROSA は、アプリケーションの所有者と同じメリットを管理者やインフラストラクチャチームに提供することで、アプリケーションのモダナイゼーションを促進します。
Red Hat Advanced Cluster Management for Kubernetes は、Kubernetes クラスタのライフサイクルのマルチクラスタ管理を提供します。Red Hat Advanced Cluster Management は、サブスクリプションとチャネルのフレームワークを配置ルールとともに使用して、複数のクラスタにわたって希望の状態モデルでアプリケーションを自動的に配置します。
Red Hat Ansible Automation Platform® は、現在の状態に関係なく、システムを望ましい状態にする作業を行います。YAML で作成された Ansible Playbook は、システムの望ましい状態を記述します。これらは通常、ソース管理で保持されます。
Ansible Automation Platform を使用すると、Kubernetes に加えて、ネットワーキング、クラウド、ベアメタルなどの従来の IT システムに GitOps プラクティスを適用できます。 Webbhook を使用して、Ansible Automation Platform を Git リポジトリと統合できます。リポジトリリンクが設定されると、Ansible Automation Platform は Git システムから Git コミットをキャッチし、それらのイベントを使用して自動化ジョブをトリガーし、プロジェクトを更新してインベントリーを管理し、デプロイメントを実行します。
Webhook により、イベントがソース管理システムで発生したときに自動化を自動的に有効化できます。これにより、リポジトリを監視したり、変更の発生時に自動化ジョブを起動したりするための Jenkins などの CI/CD ツールを追加する必要がなくなり、GitOps のワークフローが単純化され、運用が効率化されます。Ansible Automation Platform は、さまざまな開発ツールやデプロイメントツールと連携できるため、使用するツールやプロセスに応じて GitOps のワークフローをカスタマイズすることができます。
Red Hat Advanced Cluster Management、Red Hat OpenShift GitOps、Red Hat Ansible Automation Platform の統合により、DevOps チームは、CI/CD パイプラインを改善するために構成を大規模に管理および維持することができます。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。