Kubernetes ベースのリリースシステムの設計

Kubernetes ベースのリリースシステムの設計

背景

Kubernetes クラスターへのサービス移行をデプロイする以前の作業では、CI/CD プロセスは主に .gitlab-ci.yml ファイルを記述することによって実装されていました。このプロセスを通じて、ユニットテスト、リンティング、コンパイル、イメージのパッケージ化、コード更新後のリリースを完了できます。

ただし、サービスが Kubernetes クラスターにデプロイされた後、各サービスは GitLab リポジトリでデプロイメント テンプレートを維持し、サービスの新しいバージョンをリリースする必要があります。各デプロイメント プロセスでは、いくつかのリリース パラメータとデプロイメント テンプレートを組み合わせて、リリースに必要な deploy.yml ファイルを生成し、それを kubectl コマンドを通じて Kubernetes クラスターに公開します。ただし、このソリューションには次の欠点があります。

  • 各サービスは独自のデプロイメントテンプレートを維持しており、管理がある程度複雑になっています。
  • 統一されたリリース履歴管理が欠如しているため、問題のトラブルシューティングやバックトラッキングが困難です。
  • 効果的な権限管理が欠如しているため、一定のリスクがある

上記の問題を解決するために、CI/CDプロセスのリリース作業を抽出し、Kubernetesベースのリリースシステムを設計してサービスリリース作業を完結させました。

出版システムの基本機能

私たちが設計した出版システムには、次の基本機能があります。

  • サービスレベルでリリース機能を完了する
  • リリース記録の表示
  • 各リリースレコードは詳細なリリースプロセスを照会できます
  • 公開されたレコードごとにクイックロールバック操作を実行できます。
  • リリース結果通知、サポートメール、DingTalk通知
  • 一部のサービスはグレースケールのリリースをサポートしています

リリースプロセスの概要

リリース システムがリリース操作を実行する前に、CI 前のプロセスを完了する必要があります。具体的な操作は以下のとおりです。

  1. GitLabでコードが更新されると、パイプラインをトリガーする特定のCIルールを設定できます。
  2. Gitlab-ci はコードをプルし、ユニット テスト、リンティング、コード コンパイル、イメージ ビルドなどの操作を完了します。
  3. イメージがビルドされたら、バージョン情報を含むDockerイメージをDocker Harborにアップロードします。
  4. リリースシステムにDockerイメージのバージョン情報を入力する

上記の作業が完了すると、リリース システムは各サービスに基づいて対応するバージョンを選択し、各リリースに必要なデプロイメント ファイルを生成し、Kubernetes API サーバーを呼び出してサービスのローリング アップグレードを実装できます。

リリースプロセスの詳細

基本的な公開操作

公開システムでは、各公開操作は公開タスクと見なされます。したがって、サービスをアップグレードする必要がある場合は、このサービスに対して新しい公開タスクを作成する必要があります。具体的な操作は以下のとおりです。

  • リリースする環境(テスト環境または正式環境)を選択します
  • サービス名に基づいてイメージリストを取得し、バージョンを選択します
  • リリースパラメータを確認し、リリースの説明を入力してください
  • 情報を送信してバージョンリリースタスクを開始する


リリースタスクの作成が完了すると、各リリースタスクの情報を表示できるようになります。上記に記入した情報に加え、リリースタスクの開始時間、リリース期間、操作ユーザー、リリースの説明、リリースステータスなどの情報も含まれます。これにより、各リリース操作の記録が完了し、問題のトラブルシューティングと追跡に役立ちます。

さらに、各リリース タスクはロールバック操作もサポートしており、新しいバージョンのリリースに問題が発生した場合にバージョンをすばやくロールバックできます。最後に公開されたタスクを再送信できます。この機能には、次の 2 つの実用的なシナリオがあります。

リリースは外部要因により失敗したため、外部要因が解決された後に再リリースする必要があります。

コードの構成情報が更新された後、Kubernetes 内の Pod はこの構成情報を更新する必要があります。ロールバックと再送信の操作は、本質的には新しいリリース タスクです。リリース パラメータは、各リリース タスクの情報に基づいて自動的に選択されるため、より高速で便利です。

リリースデプロイメントファイルの生成

デプロイメント テンプレートのパラメータは、次の 2 つのカテゴリに分かれています。

基本パラメータ

リリースの基本的なパラメータには、Pod レプリカの数、ヘルスチェック パス、組織情報などが含まれており、実際の状況に応じて調整できますが、調整頻度は非常に低くなります。これらのパラメータはリリース構成を通じて管理されます。各サービスはリリース構成を維持し、それをデータベースに保存します。ページ上のリリース構成を編集することで、基本的なパラメータを変更できます。さらに、リリース構成では、サービスで使用されるリリース テンプレート情報が維持されます。

基本パラメータの調整には、新しいリリースタスクの作成よりも高い権限が必要です。

公開パラメータ

サービス名、バージョン番号、リリース環境、リリース方法などを含み、各リリースは必要に応じて記入されます。これらのパラメータは、新しいリリース タスクが作成されるときに決定されます。

リリースが行われるたびに、リリース システムは基本テンプレートと上記のパラメーター値を組み合わせて、このリリース タスクに必要なデプロイメント ファイルを生成し、kubectl apply を通じて Kubernetes API サーバーを呼び出して、対応するサービスのローリング アップグレードを実行します。

デプロイメントテンプレートの管理

私たちの実践では、サービスには共通点があります。特定のタイプのサービスに対してデプロイメント リリース テンプレートを抽象化し、複数のサービスで 1 つのリリース テンプレートを共有できるようにすることで、管理コストを大幅に削減します。現在リリースに使用されているデプロイメント テンプレートは GitLab に保存されています。テンプレートの管理と使用方法は次のとおりです。

  1. テンプレートの追加はマージリクエストを送信することで行われます
  2. GitLab に新しいテンプレート ファイルが追加されると、GitLab Pipeline がトリガーされ、デプロイメント テンプレート情報がリリース システムに同期されます。
  3. テンプレートは公開システムに記録され、テンプレート ID が一意の識別子として使用されます。
  4. 各サービスは、公開設定内の公開テンプレートIDに対応しています。
  5. 新しい公開タスクを作成すると、公開システムは公開構成のテンプレート ID に基づいて対応するテンプレート ファイルの URL を取得し、コンテンツをダウンロードします。

Kubernetes リリース プロセスの追跡と結果の記録

Kubernetes は宣言型デプロイメント ファイルを定義し、非同期呼び出しを行うことでバージョンを更新するためです。 kubectl apply を呼び出した後、対応する Pod がローリング アップデートを正しく完了できるかどうかを判断することはできません。したがって、リリース プロセスを追跡するには、コマンド kubectl rollout status deployment $deployment_name を使用します。ここで、変数deployment_name はサービスと 1 対 1 で対応しています。

リリース プロセスの追跡に関する情報は、各リリース タスクの詳細で確認できます。ここには、Pod ローリング アップデートの詳細なプロセスが記録されます。

公開された Pod が正常に更新されると、 kubectl rollout status deployment $deployment_name が正常に終了し、リリース システムはリリース タスクが成功したと判断します。何らかの理由でローリング アップデート プロセス中に Pod の新しいバージョンがブロックされた場合、リリース システムで設定されたタイムアウト期間を超えると、リリース タスクは失敗したと見なされます。

公開に失敗したタスクについては、現在、シンプルな Pod ログの表示がサポートされています。主な原則は、公開プロセス中にステータスが実行中または終了中でないポッドのログを照会して、失敗した公開タスクの問題を特定することです。効果は以下のとおりです。

要約する

この記事では主にKubernetesをベースとしたリリースシステムについて紹介します。まず、Kubernetes ベースのリリース システムを設計する背景と必要性について説明します。次に、出版システムの基本機能について説明します。 3 番目の部分はこの記事の本文であり、リリース システムの原理を詳細に説明します。まず、新しいリリース タスクの作成から始め、デプロイメント ファイルの生成、リリース テンプレートの管理、リリース結果の追跡と記録、グレースケール リリースの実装について詳しく説明します。

著者: Wu Chongbin、VPGAME 運用保守開発エンジニア。 VPGAMEは、イベント運営、メディア情報、ビッグデータ分析、プレイヤーコミュニティ、ゲーム周辺機器を統合した総合的なeスポーツサービスプラットフォームです。

<<:  テンセントクラウドはクラウドネイティブサーバーハードウェアの研究開発に注力する星星海研究所を設立

>>:  実行中の Kubernetes ポッドにパッチを適用するにはどうすればよいでしょうか?

推薦する

雷軍のキングソフトクラウドは3億ドルを調達し、全面的に値下げして複数の垂直分野に進出

12月12日、雷軍氏が所有するKingsoft Cloudは、クラウド業界では単一ラウンドの資金調達...

SEOブログを運営するには?

私は自分のブログを注意深く研究し、いくつかの問題を発見しました。SEO ブログの問題について、すべて...

skyhost: 格安 VPS、ロシアのデータセンター、無制限のトラフィック、KVM、月額 8.3 元

安価な VPS である skyhost を紹介します。現在、モスクワ、ヤロスラヴリ、ヤカブ共和国に ...

中国のSEO業界の力をみんなに見せよう

2008 年 4 月 18 日は、中国の SEO コミュニティにとって非常に重要な日です。Feng ...

オンライン薬局は偽物や偽物が多く、本物と偽物の区別がつきにくい。度重なる禁止措置にもかかわらず、偽サイトは横行している。

3月15日の前夜、ライジングが最近発表したテストデータは、オンラインで医薬品を購入することのリスクを...

ハイディラオの自己生成トラフィックと自動配信の秘密

月収10万元の起業の夢を実現するミニプログラム起業支援プラン中国には「食は人民の第一の必需品」という...

どこでもウェブサイト最適化分析を実行

どのような種類のウェブサイトであっても、ウェブサイトの最適化の前または最中に、分析は非常に重要なタス...

virtnetwork-$7/KVM/12 コア/2G メモリ/110G ハードディスク/5T トラフィック/3IP

virtnetwork.com を紹介したいのは、特別版の VPS をいくつか見たのですが、そのうち...

Aiti Tribe ライブクラスの第 6 話: Lean Data Analysis - 自社に BAT と同じ分析機能を持たせる方法

どの企業も大規模で包括的なビッグデータ プラットフォームの構築を望んでいますが、実践により、持続可能...

エッジコンピューティング + モノのインターネットはどのような火花を散らすのでしょうか?

エッジコンピューティング + IoT クラウド プラットフォームは、大手企業間の強力な協力のハイライ...

「分散トランザクション」がまだ理解できませんか?この記事ではわかりやすく解説します!

[51CTO.com からのオリジナル記事] この記事では、分散トランザクションとは何か、分散トラン...

独自のメディアブランドを作成する方法

セルフメディアの運営方法については、さまざまな意見があります。それらはすべて理にかなっているように思...

#BlackFriday# itldc: プロモーション VPS が 40% オフ、9 つのデータ センター、トラフィック無制限の VPS、超古いブランド、安定性と信頼性

itldc は創業から約 20 年になりますが、毎年恒例のブラックフライデー プロモーションが始まり...

Red Hat、オープンエッジコンピューティングの継続的な進化を促進する軽量Kubernetesソリューションを発表

Red Hat Inc. は本日、ロボット、IoT ゲートウェイ、POS、公共交通機関などの小型デバ...

Baidu のオープンデータ プラットフォームを使用してユーザー エクスペリエンスとブランド価値を向上

おそらく、まだ多くの人が百度オープンプラットフォームの概念を知らないでしょう。百度データオープンプラ...