著者: Yu Leichun、PaaS 製品部門、中国モバイル クラウド機能センター 前回の記事では、コンテナとコンテナ オーケストレーション テクノロジーについて説明しました。この記事では、上記のレイヤーである不変インフラストラクチャについて簡単に整理したいと思います。 01不変インフラストラクチャとは何ですか?どう理解すればいいですか?クラウド ネイティブに詳しい人は、クラウド ネイティブには現在、コンテナー、サービス メッシュ、マイクロサービス、不変インフラストラクチャ、宣言型 API という 5 つの代表的なテクノロジーがあることを知っています。その中でも、不変インフラストラクチャは他の 4 つの概念よりも理解するのが困難です。 インターネット上の不変インフラストラクチャにはさまざまな定義があります。より代表的な説明は次のとおりです。
人生には、不変のインフラストラクチャの例が数多くあります。不変のインフラストラクチャとそれに対応する可変のインフラストラクチャについて説明するために、「水」を例に挙げてみましょう。
現実からコードに戻ると、実は、コード内の不変インフラストラクチャと可変インフラストラクチャについても多くの考えがあります。 図1 開発者は、コーディング時に不変のインフラストラクチャが必要となるシナリオに遭遇する可能性もあります。 Java や C++ などの言語では、パラメータを渡す場合を含め、変数を変更不可能にする機能が提供されています。制限が課せられている場合、変数を変更するときにコンパイル エラーが発生します。不変データを変更する場合は、別の変数を宣言して不変データの変更をサポートする必要があります。経験豊富な開発者は、不変データによってコード ロジックが明確になり、エラーが減り、同時実行がシンプルになることを知っています。並行プログラミングでは、変数が読み取り専用として宣言されている場合、並行して変更するときに制御のために変数をロックする必要はありません。これは並行性における不変性の考え方です。 実は、「イミュータブル・インフラストラクチャ」という言葉が初めて登場したのは2013年のことでした。その後、Dockerがもたらした「コンテナ時代」やk8sが主導する「クラウドネイティブ時代」によって、イミュータブル・インフラストラクチャという概念はますます普及していきました。共通サーバー、仮想マシン、コンテナはすべてインフラストラクチャと呼ばれます。 02不変インフラストラクチャの利点と特徴は何ですか?どうやって変身するの?周知のとおり、クラウド コンピューティングの登場により、環境標準化のコストは削減されましたが、ビジネス提供のコストは依然として非常に高くなっています。 クラウド ネイティブ テクノロジーのアーキテクチャを以下に示します。 図2 不変インフラストラクチャに対応するのは可変インフラストラクチャです。従来の開発では、ソフトウェア開発が完了したら、テストまたは正式な展開のためにサーバーに展開する必要があります。開発担当者や運用・保守担当者は、インストールや展開の作業を実行するために、クライアントを介してサーバーに接続する必要があります。また、複数ノードのサーバー展開を考慮すると、対応する設定項目(環境変数など)は、各ノードの設定パラメータを一つずつ変更する必要があります。その後のアップグレードで、電子商取引での頻繁な更新や反復など、各ノード環境の変更が必要になる場合、これらの環境で発生する一部の操作が完全に解決されることはほとんどなく、その後の変更でさまざまな奇妙な問題が発生することがよくあります。インフラストラクチャは非常に脆弱かつ敏感になり、比較的小さな変更でも予測できない結果につながる可能性があります。これは非常に頭の痛い問題です。トラブルシューティングには豊富な技術的蓄積が必要であり、長い時間がかかります。 開発者の観点から見ると、時間と空間における不変のインフラストラクチャの一貫性は、特にビジネス側の問題のトラブルシューティングを行うときに非常に役立ちます。時間の認識に関しては、アプリケーションが特定のサーバーにデプロイされ、一定期間(たとえば 100 日間)実行される場合、サーバーの状態はまったく同じままであるため、トラブルシューティングの効率を大幅に高めることができます。スペースの面では、アプリケーションが R&D 領域またはテスト ドメインに展開されていても、Linux または Windows に展開されていても、スペースは一貫しています。 可変インフラストラクチャに関するよくある質問:
不変のインフラストラクチャも別のアイデアです。デプロイ後は読み取り専用状態となり、変更することはできません。更新または変更が必要な場合は、新しい環境またはサーバーを使用して古いものを置き換えます。不変のインフラストラクチャは、可変のインフラストラクチャで発生する一般的な問題の多くを回避します。 不変インフラストラクチャの特徴 一貫性 一貫性が最も明白な特徴です。不変のインフラストラクチャは、同じバージョンと構成で一貫性があり、同じマシンを管理するのと同じように大規模なクラスターを管理します。 単純 すべてのマシンとインスタンスは同じであり、拡張と破壊の 2 つの状態のみを持ちます。すべてのシステムは、これら 2 つの状態のみを処理する必要があります。 安全性 すべてのインスタンスは拡張後も変更されず、拡張前に完全にテストできます。セキュリティ担当者はコードをスキャンして、アプリケーション インスタンスに関連するデータがテストされ、安全であることを確認できます。 ❖ 従来のアプリケーションは不変のインフラストラクチャにどのように適応するのでしょうか?どのような変更が必要ですか?
⚠ 注意: これはサーバーとは何の関係もありません。
実際の作業では、不変の機能を完全に実装することは依然として困難です。いくつかのトレードオフが可能です:
まとめると、インフラストラクチャ上のアプリケーションによって生成されたデータがいつでも失われる可能性がある限り、アプリケーションはある程度ステートレスになり、不変のインフラストラクチャを実装できます。不変のインフラストラクチャは概念です。その具体的な実装は、依然としてコンテナや仮想マシン、および分散ストレージなどのサポート機能に比較的依存しています。単一の技術標準に従って実装されているわけではありません。現状を総合的に分析し、この方向で選択的に最適化する必要があります。不変のインフラストラクチャには利点と欠点があります。クラウドネイティブのシナリオでは、利点が欠点を上回ります。分析は次のとおりです。
03K8S はどのようにして不変のインフラストラクチャを実現するのでしょうか?不変のインフラストラクチャを実現するには、以下に示すようにいくつかの条件を満たす必要があります。 図3 まず、最も基本的な条件はコンテナ化です。アプリケーションをミラーリングする必要があります。依存関係と構成は、Dockerfile、つまりイメージの説明に反映される必要があります。環境と依存関係も、追加のアプリケーション オーケストレーション テンプレートによって明確にオーケストレーションされる必要があります。コンテナ化は不変の施設の基礎です。一般的に、不変のインフラストラクチャはクラウドネイティブの状況でのみ実現できます。これは、コンテナ化を通じてのみ、拡張と縮小全体の効率と一貫性を保証できるためです。 2 番目の条件は、スケーリングを十分に簡単にすることです。スケーリングと置換のプロセスを自動化する必要があります。自動化では、インスタンスが障害を起こす可能性があること、ノードが異常である可能性があること、インスタンスの障害が通常の発生であることを認識する必要もあります。アプリケーションのスケーリングと置き換えの自己修復プロセスを非常にシンプルにする必要があります。最後に、インフラストラクチャの一貫性を確保し、アプリケーション インスタンス ファイル自体へのその場での変更を禁止するメカニズムが必要です。ここでのその場での変更には適切なトレードオフが必要であり、インスタンスの生存時間を制御する必要があります。インスタンスが実行されている限り、手動による変更を含め、何らかの変更が (操作プロセス中に) インスタンスに行われます。変更があった場合にソフトウェア システムのエントロピーが変化する限り、不整合が発生します。 不変のインフラストラクチャにおける k8S の働きはどのように現れるのでしょうか?まず、以下に示すように、k8s でコンテナのステータスを調べる必要があります。 図4 図5 K8s のアプリケーション インスタンスはポッドと呼ばれます。ポッドには複数のコンテナを含めることができます。 Pod は、K8s では不変の基本単位と呼ばれます。アプリケーション インスタンスは、アプリケーション ロード コントローラーによって管理されます。アプリケーション ロードでは通常、アプリケーション インスタンス テンプレートが提供されます。テンプレートでは、アプリケーション インスタンスのメタデータのほか、仕様、イメージ、イメージ名を定義できます。 図6 K8s で不変のインフラストラクチャを実装する主な方法は、ローリングリリースです。ローリング リリースの主なプロバイダーはデプロイメントであり、これはワークロードとも呼ばれるコントローラーです。デプロイメントには、ReplicaSet と呼ばれるワークロードもあります。各 ReplicaSet には、同じイメージ名と同じイメージ構成を持つポッドのコレクションがあります。リリース前は、ReplicaSet V1 のバージョンは 1 つしかありません。リリース プロセス中に、追加の ReplicaSet V2 が作成され、新しい V2 ReplicaSet の容量が拡張されます。拡張された容量は、新しいコンテナ オーケストレーション構成を持つポッドです。リリース プロセスはシンプルで、新しい ReplicaSet V2 でのスケールアップと古い ReplicaSet V1 でのスケールダウンに重点を置いています。リリース後、デプロイメントには ReplicaSet が 1 つだけ存在し、プロセス中にポッドの拡張と縮小のみが発生します。これは、k8s で不変のインフラストラクチャを確保するための実装プロセス、つまりリリースと拡張と縮小です。 K8s はクラウド ネイティブにおける最良のアプリケーション プラクティスです。ただし、不変のインフラストラクチャを実現するための K8s のローリング アップグレードの適用シナリオには、一定の制限があります。金融業界や伝統産業など、一部のビジネスでアプリケーション IP を保持する必要がある場合、または大企業で大規模なプロモーション シナリオがある場合、特にアプリケーション インスタンス ポッドに複数のコンテナーがあり、一部のコンテナーを変更したくない場合は、k8s のローリング リリースではニーズを満たすことができません。 不変インフラストラクチャに対しては、ポッドのインプレース アップグレード機能の再構築、履歴ポッドの定期的な再構築、移行ドリル、アプリケーション インスタンスのエントロピーが大きすぎないことの確認 (定期的な削除) など、実行する必要があることがまだたくさんあります。一貫性を確保するために、不変のインフラストラクチャをより多くのシナリオに適用できます。クラウドネイティブの不変インフラストラクチャの概念を探求し実践する際には、k8s 以外の関連コンテンツも探求する必要があります。 Alibaba のオープンソース Open kruise プロジェクトを参照できます。 04K8Sローリングアップグレードによる不変インフラの実用化の実証4.1 デプロイメントとレプリカセットのデモンストレーションnginx のデプロイメントを例に挙げます。 図7
❖ 拡張および縮小操作を実行します。 図8 4.2 ローリングアップデート図9 上の図では、ローカル コンテナ イメージに 2 つのバージョンがあることがわかります。デプロイされた nginx のバージョン 1.20.2 が 1.14-alpine に更新されます。これはバージョンロールバックアップデートです。 kubectl edit 操作を使用して、イメージの情報コンテンツを編集および置き換えます。 図10 図11 図11はnginxバージョンアップデートの内容を示しています。一般的に、更新戦略には次の 2 つがあります。
要約すると、K8S ローリング アップグレード操作は実際には非常に簡単です。さまざまなシナリオやさまざまなニーズに合わせて使用する必要があります。ローリング アップグレードは、不変のインフラストラクチャを実現するための k8s の最も古典的なアプリケーションです。 |
>>: なぜクラウドベンダーは皆この KPI を目指しているのでしょうか?
最近、ラッキンコーヒーは大人気で、多くの人がその今後の発展に楽観的です。しかし、この記事の著者はあま...
ストレージは種類によってブロックストレージ、オブジェクトストレージ、ファイルストレージに分けられます...
この記事では、Baidu 検索エンジンがウェブサイトを組み込むための基準、ウェブサイトを組み込む際の...
おそらく多くの個人ウェブマスターは、多くのことを経験して疲れ果て、精神的に疲れ果て、あきらめたいと思...
はじめに: Tujia.com を設立する前に、Luo Jun は多くの短期レンタル Web サイト...
今日、新しいサイトは W3SO によって収集された後にブロックされる傾向があると誰かが言っているのを...
北京ビジネスデイリー(記者:屈中芳)工業情報化部がセキュリティとプライバシー保護に重点を置いたWeC...
Hostus は創業から 20 年になりますが、おそらく経営者は今日これほど人気が出るとは思って...
以前の記事でも述べたように、Naihe は、ウェブサイト上のキーワードランキング コラム ページ (...
Magic Cube Cloudは、ユーザーにVPS構成の無料アップグレードと製品価格の値下げを提供...
Baiduプロモーションが更新され、「プロモーション」から「Baiduプロモーション」にアップグレー...
昨年末、Googleは特許取得済みの製品であるGoogle Eyesを正式にリリースし、インターネッ...
みなさんこんにちは。私はMuzi Chengzhouです。権威の高いウェブサイトには、新しいウェブサ...
SEO に関する独立したブログといえば、まず思い浮かぶのは ZAC の「SEO Daily Post...
[[373364]]この記事はWeChatの公開アカウント「DBA Random Thoughts ...