ケーススタディ: 高度な環境

streaming-ops プロジェクト は本稼働環境のシミュレーションであり、Confluent Cloud 上の Apache Kafka® をターゲットとする、ストリーミングマイクロサービスをベースにしたアプリケーションを実行しています。アプリケーションとリソースは、宣言型インフラストラクチャである Kubernetes および オペレーターパターン を使用して GitOps によって管理されます。

このケーススタディでは、下位の環境(dev)から上位の環境(prd )へとデプロイして、アプリケーションが「高度な環境」でどのように管理されるのか検討します。このケーススタディの詳細については、ブログの投稿「Spring Your Microservices into Production with Kubernetes and GitOps」を参照してください。

複数の環境のカスタマイズ

streaming-ops プロジェクトは現在、2 つの環境(dev および prd)を管理します。Apache Kafka® ベースのマイクロサービスは、Kubernetes Deployment としてデプロイされます。各環境にデプロイするバージョンの制御は、Kubernetes API に送信する前に Kustomize を使用してそのアプリケーションバージョンを "パッチ" して行います。以下に示すのは、orders-service サービスのデプロイ済みバージョンをオーバーライドするパッチのサンプルです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: orders-service
spec:
  template:
    spec:
      containers:
      - name: orders-service
        image: cnfldemos/orders-service:sha-0ccce99 # 10.0.8

これは、完全な Kubernetes のデプロイではなく、部分的な定義にすぎないことにご注意ください。定義一式は、すべての環境で共有されている定義を含む ベースフォルダー 内で定義されます。この部分的な定義では、orders-service コンテナイメージを、dev にデプロイするバージョンでオーバーライドしているだけです。

streaming-ops は、Flux を使用して GitOps を有効にし、デプロイの前に Flux が Kustomize を呼び出して、環境に固有のパッチを実行します。これは、kustomize build の呼び出しを Flux に指示する .flux.yaml ファイル内で有効になっています。

version: 1
patchUpdated:
  generators:
    - command: kustomize build .
  patchFile: flux-patch.yaml

kustomize build コマンドは、マージされたマニフェストを Kubernetes API にポストする前に、orders-service の ベース Deployment 定義 に、適切な環境のフォルダーからのパッチを適用します。

アプリケーションを prd にデプロイするには、ベース定義を dev パッチとして、同じバージョンに変更します。これで、プルリクエスト(PR)が提出されます。マージされると、prd 環境の Flux コントローラーにより、適切なバージョンがデプロイされます。https://github.com/confluentinc/streaming-ops/pull/62/files で、streaming-ops プロジェクト自体からのサンプル PR を参照してください。

デプロイの失敗からの復旧

失敗したデプロイのロールバックは、非常に重要な運用機能です。このロールバックが必要になった場合、GitOps が非常に役立ちます。デプロイマニフェストの Source of Truth(信頼できる唯一の情報源)として Git リポジトリを使用すると、失敗した変更をすばやく元に戻すことができます。失敗したデプロイを示す PR から、Git プロバイダーの復帰機能を使用して PR を新規作成し、前回の変更を元に戻します。

../../../_images/revert.png

この新しい PR がマージされると、アプリケーションの以前のバージョンが Kubernetes によってデプロイされます。デプロイの変更を小規模かつ復帰可能なものにしておくことは、分散ソフトウェア運用でこれらの機能を有効にするために重要です。

streaming-ops の動作例

この詳細および他の運用ユースケースについては、Kubernetes と GitOps を使用する Apache Kafka® 用 DevOps の詳細なドキュメントと streaming-ops プロジェクトの GitHub リポジトリ を参照してください。