背景Kubernetes クラスターへのサービス移行をデプロイする以前の作業では、CI/CD プロセスは主に .gitlab-ci.yml ファイルを記述することによって実装されていました。このプロセスを通じて、ユニットテスト、リンティング、コンパイル、イメージのパッケージ化、コード更新後のリリースを完了できます。 ただし、サービスが Kubernetes クラスターにデプロイされた後、各サービスは GitLab リポジトリでデプロイメント テンプレートを維持し、サービスの新しいバージョンをリリースする必要があります。各デプロイメント プロセスでは、いくつかのリリース パラメータとデプロイメント テンプレートを組み合わせて、リリースに必要な deploy.yml ファイルを生成し、それを kubectl コマンドを通じて Kubernetes クラスターに公開します。ただし、このソリューションには次の欠点があります。
上記の問題を解決するために、CI/CDプロセスのリリース作業を抽出し、Kubernetesベースのリリースシステムを設計してサービスリリース作業を完結させました。 出版システムの基本機能私たちが設計した出版システムには、次の基本機能があります。
リリースプロセスの概要リリース システムがリリース操作を実行する前に、CI 前のプロセスを完了する必要があります。具体的な操作は以下のとおりです。
上記の作業が完了すると、リリース システムは各サービスに基づいて対応するバージョンを選択し、各リリースに必要なデプロイメント ファイルを生成し、Kubernetes API サーバーを呼び出してサービスのローリング アップグレードを実装できます。 リリースプロセスの詳細基本的な公開操作 公開システムでは、各公開操作は公開タスクと見なされます。したがって、サービスをアップグレードする必要がある場合は、このサービスに対して新しい公開タスクを作成する必要があります。具体的な操作は以下のとおりです。
リリースタスクの作成が完了すると、各リリースタスクの情報を表示できるようになります。上記に記入した情報に加え、リリースタスクの開始時間、リリース期間、操作ユーザー、リリースの説明、リリースステータスなどの情報も含まれます。これにより、各リリース操作の記録が完了し、問題のトラブルシューティングと追跡に役立ちます。 さらに、各リリース タスクはロールバック操作もサポートしており、新しいバージョンのリリースに問題が発生した場合にバージョンをすばやくロールバックできます。最後に公開されたタスクを再送信できます。この機能には、次の 2 つの実用的なシナリオがあります。 リリースは外部要因により失敗したため、外部要因が解決された後に再リリースする必要があります。 コードの構成情報が更新された後、Kubernetes 内の Pod はこの構成情報を更新する必要があります。ロールバックと再送信の操作は、本質的には新しいリリース タスクです。リリース パラメータは、各リリース タスクの情報に基づいて自動的に選択されるため、より高速で便利です。 リリースデプロイメントファイルの生成デプロイメント テンプレートのパラメータは、次の 2 つのカテゴリに分かれています。 基本パラメータ リリースの基本的なパラメータには、Pod レプリカの数、ヘルスチェック パス、組織情報などが含まれており、実際の状況に応じて調整できますが、調整頻度は非常に低くなります。これらのパラメータはリリース構成を通じて管理されます。各サービスはリリース構成を維持し、それをデータベースに保存します。ページ上のリリース構成を編集することで、基本的なパラメータを変更できます。さらに、リリース構成では、サービスで使用されるリリース テンプレート情報が維持されます。 基本パラメータの調整には、新しいリリースタスクの作成よりも高い権限が必要です。 公開パラメータ サービス名、バージョン番号、リリース環境、リリース方法などを含み、各リリースは必要に応じて記入されます。これらのパラメータは、新しいリリース タスクが作成されるときに決定されます。 リリースが行われるたびに、リリース システムは基本テンプレートと上記のパラメーター値を組み合わせて、このリリース タスクに必要なデプロイメント ファイルを生成し、kubectl apply を通じて Kubernetes API サーバーを呼び出して、対応するサービスのローリング アップグレードを実行します。 デプロイメントテンプレートの管理 私たちの実践では、サービスには共通点があります。特定のタイプのサービスに対してデプロイメント リリース テンプレートを抽象化し、複数のサービスで 1 つのリリース テンプレートを共有できるようにすることで、管理コストを大幅に削減します。現在リリースに使用されているデプロイメント テンプレートは GitLab に保存されています。テンプレートの管理と使用方法は次のとおりです。
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 ポッドにパッチを適用するにはどうすればよいでしょうか?
12月12日、雷軍氏が所有するKingsoft Cloudは、クラウド業界では単一ラウンドの資金調達...
私は自分のブログを注意深く研究し、いくつかの問題を発見しました。SEO ブログの問題について、すべて...
安価な VPS である skyhost を紹介します。現在、モスクワ、ヤロスラヴリ、ヤカブ共和国に ...
2008 年 4 月 18 日は、中国の SEO コミュニティにとって非常に重要な日です。Feng ...
3月15日の前夜、ライジングが最近発表したテストデータは、オンラインで医薬品を購入することのリスクを...
月収10万元の起業の夢を実現するミニプログラム起業支援プラン中国には「食は人民の第一の必需品」という...
どのような種類のウェブサイトであっても、ウェブサイトの最適化の前または最中に、分析は非常に重要なタス...
virtnetwork.com を紹介したいのは、特別版の VPS をいくつか見たのですが、そのうち...
どの企業も大規模で包括的なビッグデータ プラットフォームの構築を望んでいますが、実践により、持続可能...
エッジコンピューティング + IoT クラウド プラットフォームは、大手企業間の強力な協力のハイライ...
[51CTO.com からのオリジナル記事] この記事では、分散トランザクションとは何か、分散トラン...
セルフメディアの運営方法については、さまざまな意見があります。それらはすべて理にかなっているように思...
itldc は創業から約 20 年になりますが、毎年恒例のブラックフライデー プロモーションが始まり...
Red Hat Inc. は本日、ロボット、IoT ゲートウェイ、POS、公共交通機関などの小型デバ...
おそらく、まだ多くの人が百度オープンプラットフォームの概念を知らないでしょう。百度データオープンプラ...