2022年12月19日

Continuous Delivery

HarnessでHelmのロールバックを設定する方法

Helm Deployment用のパイプラインをセットアップし、ロールバックを作成して、以前のバージョンを起動して復元できるようにしましょう。

helm.png

最新のソフトウェア配信システムは複雑で広大であり、失敗が起きると、企業全体の運用能力が失われる可能性があります。予期せぬダウンタイムを防ぐために、システムはロールバックといった組み込みの失敗戦略を設計しています。ロールバックとは、システムが以前の既知の正常な状態に自動的に戻ることです。この復帰により、システムが壊れた状態で機能し続け、さらなる損傷を引き起こすことを防ぎます。

この投稿では、Harnessを使用しHelmチャートのデプロイパイプラインを作成します。HelmはKubernetesのパッケージマネージャーであり、アプリケーションを柔軟にパッケージ化してKubernetes環境にデプロイできます。この例ではHelmチャートとしてNginxを使用します。Helmでデプロイを実行するようにパイプラインをセットアップします。問題が発生した場合は、ロールバックを開始し、以前のバージョンが復元されます。

なぜ失敗戦略が必要なのか?

組織には、顧客に対応し、製品やサービスのアップタイムを提供する責任があります。あなたがソフトウェアエンジニアであろうと、カスタマーサクセスの仕事をしていようと、機能する製品を提供する責任はあなたにあります。経験豊富なエンジニアであっても、全てのシナリオを予測して、起こりうる全ての失敗に耐えられる堅牢なシステムを構築することは不可能です。

失敗戦略は、失敗の影響を最小限に抑え、システムを常に稼働し続けるように設計されています。戦略のタイムリーな実行のために人間に頼るのは現実的ではないため、失敗戦略は自動化する必要があります。人間がコンピューターほど速く動くことはありません。場合によっては、失敗発生の防止に間に合うように介入することもできません。さらに、失敗戦略は組織の失敗管理能力に対する信頼と信頼を築くのにも役立ちます。

ロールバックとは何ですか?

デプロイのロールバックは、デプロイを元に戻すプロセスです。これは、新しいデプロイで修正を必要とする予期せぬ問題が発生した場合や、元のデプロイを復元する必要がある場合など、さまざまな理由で実行される可能性があります。

例えば、あるソフトウェア更新が本番環境で何かを壊す場合を考えてみてください。ロールバックはそんなとき、期待通りに機能する、前のバージョンのソフトウェアに戻すプロセスなのです。

 

Harness Continuousデプロイパイプラインの設定

Harnessパイプラインには、次の部分が含まれます。

  • Service– HarnessのServiceでは、マイクロサービス/アプリを論理的に示します。同じサービスを必要な数のステージに伝播できます。もっと詳しく知る
  • Environment– Environmentでは、デプロイ環境(QA、本番環境など)を表し、ターゲットクラスター、ホスト、名前空間などを一覧表示するInfrastructure Definitionsを含みます。
  • Execution– Executionでは、必要なときや障害が発生したときに、アプリケーションとインフラをプロビジョニングおよび管理する方法に関する指示です。
  • Connectors– Connectorsは、SCM(GitHub、GitLabなど)、Secret Managers、Logging tools、Cloud、Ticketingシステム、Trackingシステムに接続するのに役立ちます。

このデモでは、Executionの部分のみに焦点を当てます。Getting started with Helmの記事で、その他の詳細をお読みいただけます。

プロジェクトの作成

Harnessは、パイプラインでHelmチャートを使うために利用できるネイティブのHelmサービスをサポートしています。以下に示すように、「Native Helm」サービスを使ってステージをセットアップします。

helm_1.png

パイプラインの実行

サービスをセットアップするには、後のステージでファイルを編集する必要があるため、クローンを作成した後次のリポジトリを使います。

Helm_2.png

  1. Manifest Name – Manifestを参照するための名前を追加します。
  2. Git Fetch Type – チャートを取得する方法を定義します。
  3. Branch – チャートがどのブランチにあるかを定義します。
  4. Chart Path – チャートのルートディレクトリーです。
  5. Helm Version – これはHelm Versionで、このチュートリアルではHelm V3を使用しています。
  6. Values.yaml – デフォルト値を上書きするファイルを追加します

実行ステージに移動し、Helm Deploymentが設定されたこと(Configured)を確認します。次に、パイプラインを保存して実行します。

helm_3.png

パイプラインを実行すると、実行が成功すると次のようになります。

helm_4.png

ロールバック実行

Harnessはロールバック戦略を提供します。 Helmのデプロイメントでは、同様のロールバック戦略を使う必要があります。 実装するには、右上隅にある「Rollback」をクリックします。

helm_5.png

「Add Step」をクリックし、Step LibraryからHelm Rollbackを選択します。

helm_6.png

Helm Rollbackをステップに追加すれば、失敗戦略を使ってパイプラインの実行を処理する準備が整います。

helm_7.png

失敗戦略のテスト

ロールバックは、以前のバージョンに戻ることで機能します。例えば、ポッドが1つあり、それを2つにスケーリングした場合、失敗が検出されると、再び1つのポッドに戻ります。通常、ポッドの代わりに、新しいイメージを使います。シンプルに、ターミナルを介した調査用のビジュアルデータとしてポッドを使っていると考えることができます。

ターミナルを開き、サービスで定義した名前空間にいることを確認しながら、「kubectl get pods –watch」を使います。

次のステップでは、values.yamlファイルを編集して、レプリカの数を2にします。
 

helm_8.png

デプロイすると、クラスターには2つのポッドが入ります。次に、失敗を起こして、ロールバックの動作を確認します。

わざと失敗を起こしてみる

実行ステージに戻り、もう一度ステップを追加します。

helm_9.png

「Shell Script」ステップを選択します。

helm_10.png

強制終了できるように、「exit 1」を含むスクリプトを構成します。変更を適用します。

helm_11.png

新しい手順は次のようになります。

helm_12.png

パイプラインを保存して実行し、ターミナルを監視します。レプリカが2つに増え、終了ステップに到達すると1つに戻ります。終了ステップが失敗すると、ロールバックステップがトリガーされます。

実行フローは次のとおりです。

helm_13.png

おめでとうございます!ロールバックを正常に実装できました。

次のステップ

クラスターが操作可能になったので、kubectlユーティリティーを使ってクラスターにリソースを追加できます。Start Deploying in 5 Minutes with a Delegate-first Approachのチュートリアルを確認して、デリゲートをインストールし、CI/CDパイプラインの作成に進みます。

Harnessがロールバックを管理する方法を見る

Harness Continuous Delivery無料で始めましょう。

コミュニティーで気軽にご質問くださいharness.ioに参加するか、コミュニティーslackに参加して、次のような製品固有のチャネルで当社のエンジニアとチャットしてみましょう。

#continuous-delivery HarnessのCD Moduleに関するサポートを受ける。

#continuous-integration HarnessのCI Moduleに関するサポートを受ける。

# cloud-cost-management HarnessのCCMモジュールに関するサポートを受ける



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

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

お問い合わせ