容器 Kubernetes を理解する前に、コンテナとは何か、そしてなぜそれほど人気があるのかを少し説明しましょう。 結局のところ、コンテナが何であるかを知らずにコンテナ オーケストレーター (Kubernetes) について話しても意味がありません。 容器 「コンテナ」とは、中に入れるものすべてを収納する容器です。アプリケーション コード、依存ライブラリ、そしてカーネルに至るまでの依存関係など。 ここでの重要な概念は分離です。すべてのコンテンツを他のコンテンツから分離して、より適切に制御できるようにします。 コンテナは 3 種類の分離を提供します。
コンテナを VM のように考えます。スリムで、高速(しかもおまけに)、小型です。そして、これらはどれも構築されていません。 代わりに、Linux システムに存在する構造 (cgroup、名前空間など) を使用し、その上に優れた抽象化を構築しました。 コンテナが何であるかがわかったので、コンテナがなぜ人気があるのか簡単に理解できます。アプリケーションのバイナリ/コードを配布できるだけでなく、アプリケーションを実際に実行するために必要な環境全体を提供することもできます。 コンテナは非常に小さなユニットとして構築できるため、「自分のマシンで動作する」問題に対する完璧なソリューションとなります。 Kubernetes はいつ使用すればよいですか? コンテナはすべてが優れており、ソフトウェア開発者としての生活ははるかに良くなりました。では、なぜ Kubernetes のようなコンテナ オーケストレーション ツールという別のテクノロジーが必要なのでしょうか? 特定の状態に入るときは、それを使用して複数のコンテナを管理する必要があります。 Q: フロントエンド コンテナはどこにあり、いくつ実行すればよいですか? A: 難しいですね。コンテナ オーケストレーション ツールを使用してください。 Q: フロントエンド コンテナーを新しく作成したバックエンド コンテナーと通信させるにはどうすればよいですか? A: IP をハードコードするか、コンテナ オーケストレーション ツールを使用します。 Q: ローリングアップグレードを実行するにはどうすればよいですか? A: 各ステップで手動で実行するか、コンテナ オーケストレーション ツールを使用します。 私がKubernetesを好む理由 Docker Swarm、Mesos、Kubernetes など、コンテナ オーケストレーション ツールは数多くあります。私が Kubernetes を選択したのは、Kubernetes が… という理由からです (この記事の目的もそこにあります)。 レゴ ブロックのように、大規模なコンテナ オーケストレーションを実行するために必要なコンポーネントを備えているだけでなく、内部および外部のさまざまなコンポーネントをカスタム コンポーネントに交換できる柔軟性も備えています。 カスタム スケジューラがあれば便利です。新しいリソース タイプが必要な場合は、CRD を記述します。さらに、コミュニティは非常に活発で、ツールは急速に進化しています。 Kubernetes アーキテクチャ すべての Kubernetes クラスターには、マスター ノードとワーカー ノードの 2 種類のノードがあります。名前が示すように、マスター ノードは、ワーカーがペイロード (アプリケーション) を実行するクラスターを制御および監視します。 クラスターは単一のマスター ノードで動作できますが、高可用性を実現するには 3 つのマスター ノードを使用するのが最適です (HA クラスターと呼ばれます)。 マスターノードとそのコンポーネントを詳しく見てみましょう。 ①etcd: Kubernetesオブジェクトに関するすべてのデータ、その現在のステータス、アクセス情報、その他のクラスター構成情報を保存するために使用されるデータベース。 ②APIサーバー:クラスター全体を操作するためのエンドポイントを公開するRESTful APIサーバー。マスター ノードとワーカー ノードのほぼすべてのコンポーネントは、このサーバーと通信してそれぞれの機能を実行します。 ③スケジューラ:どのペイロードをどのマシンで実行する必要があるかを決定する役割を担います。 ④コントロールマネージャー:これは、クラスターの状態を監視し(APIサーバーを呼び出してこのデータを取得することにより)、クラスターを目的の状態にするアクションを実行する制御ループです。 ⑤kubelet: 動作ノードの中核です。マスターノード API サーバーと通信し、そのノードにスケジュールされたコンテナを実行します。 ⑥kube-proxy: IPテーブル/IPVSを使用してPodのネットワーク要件を処理します。 ⑦Pod: すべてのコンテナの実行はKubernetesのおかげです。 Pod の抽象化がなければ、Kubernetes でコンテナを実行することは不可能です。ポッドは、コンテナ間の Kubernetes ネットワークに重要な機能を追加します。 ハッピーポッド Pod には複数のコンテナを含めることができ、それらのコンテナ内で実行されているすべてのサーバーは互いをローカル ホストとして認識できます。 これにより、アプリケーションのさまざまな側面を個別のコンテナーに分離し、すべてを 1 つのコンテナーとして一緒に読み込むことが非常に便利になります。 さまざまなニーズを満たすために、サイドカー、プロキシ、アンバサダーなど、さまざまなポッド モードがあります。詳細についてはこの記事[1]を参照してください。 Pod ネットワーク インターフェースは、同じノード内の他の Pod や他のワーカー ノードと通信するためのメカニズムを提供します。 さらに、各ポッドには独自の IP アドレスが割り当てられ、kube-proxy はそれを使用してトラフィックをルーティングします。この IP アドレスはクラスター内でのみ表示されます。 コンテナ内にマウントされたボリュームもすべてのコンテナから見え、これらのボリュームはコンテナ間の非同期通信に使用されることもあります。 たとえば、アプリケーションが写真アップロード アプリケーション (Instagram など) であると仮定すると、これらのファイルをボリュームに保存し、同じ Pod 内の別のコンテナーがボリューム内の新しいファイルを監視して処理を開始し、複数のサイズを作成してクラウド ストレージにアップロードすることができます。 コントローラ Kubernetes には、ReplicaSet、レプリケーション コントローラー、デプロイメント、StatefulSet、サービスなど、多くのコントローラーがあります。 これらは、何らかの方法でポッドを制御するオブジェクトです。いくつか重要なものを見てみましょう。 レプリカセット ReplicaSetは、Podを複製する最も優れた機能を提供します。 このコントローラーの主な役割は、特定の Pod のレプリカを作成することです。何らかの理由でポッドが停止した場合、このコントローラーに通知が送られ、すぐに新しいポッドを作成するアクションが開始されます。 展開 ReplicaSet の展開を制御しようとしています (ボサボサの髪) Deployment は、ReplicaSet を使用してレプリカを管理する高レベルのオブジェクトです。新しいレプリカセットをスケールアップし、既存のレプリカセットをスケールダウン(最終的には削除)することで、ローリング アップグレードを実現します。 サービス ドローンサービスとして表現され、対応するポッドにパケットを配信する サービスは、適切なノードに「パケット」を配布するロード バランサとして機能することを主な役割とするコントローラ オブジェクトです。 基本的に、これはワーカーノード間で類似のポッド (通常はポッド ラベルによって識別されます) をグループ化するために使用されるコントローラー構造です。 「バックエンド」アプリケーションと通信する「フロントエンド」アプリケーションがあると仮定すると、各アプリケーションのインスタンスが多数実行されている可能性があります。 各バックエンド Pod の IP をハードコーディングする必要はなく、バックエンド サービスにパケットを送信し、それに応じて負荷分散と転送の方法を決定します。 PS: すべてのパケット ルーティングは IP テーブル/IPVS/CNI プラグインによって処理されるため、サービスは仮想エンティティに似ていることに注意してください。 これにより、実際のエンティティとして認識されやすくなり、Kubernetes エコシステムにおける役割を理解しやすくなります。 イングレス すべてのパケットがクラスターに流れ込むフローティングプラットフォームに入る Ingress コントローラーは外部との単一の接点であり、クラスター内で実行されているすべてのサービスと通信できます。これにより、セキュリティ ポリシーの設定、監視、さらにはログインも 1 か所で簡単に実行できるようになります。 PS: Kubernetes には、DaemonSet、StatefulSet、Jobs など、他にも多くのコントローラー オブジェクトがあります。 アプリケーションのシークレットと構成を保存するための Secrets、ConfigMaps などのオブジェクトもありますが、それらについては次のブログ投稿で説明します。 関連リンク: https://matthewpalmer.net/kubernetes-app-developer/articles/multi-container-pod-design-patterns.ht |
<<: クラウドを維持するか、クラウドに移行するか?それが問題だ
>>: Google Cloudはコードフリー開発でファミリーバケットにデザートを追加
著者 |馬翔波招商銀行クラウド プラットフォーム開発チームは 2021 年に KubeVela の使...
いわゆる「過剰」とは「適切かつ合理的な限界(臨界点)を超えること」を意味し、「過剰最適化」とは、検索...
SEO 最適化の最も重要な問題は、キーワードをいつホームページに掲載できるか、そしてどのくらいの期間...
新興のオンライン マーケティング手法の 1 つとして、検索エンジン マーケティング (SEM) は現...
先月のTaobao UEDミルクティーパーティーで共有されたトピック。それをテキストにしてみんなと共...
あっという間にまた木曜日になりました。通常は百度が小さな更新を行う日です。最近、老千はジェレミー・リ...
調査会社IDCのデータセンターおよびマルチクラウドネットワーキング担当副社長ブライアン・ケースモア氏...
高品質なウェブサイトリンクに変更する方法少し前、私は自分の仕事の都合で、28tui公益研修を退会しま...
SEOキーワードランキングとユーザーエクスペリエンスのどちらが重要でしょうか?この記事はウェブサイト...
より多くのウェブサイト訪問者を引き付けるには、販売者はSEO を優先する必要があります。 SEO の...
ブランディングとなると、多くのウェブマスターやウェブサイト運営者は、これは自分にとっては遠い話で、ブ...
医療ウェブサイトは、独自の利点(医療資源のより合理的な配分、低コスト、幅広い視聴者、同時に時間と空間...
北京時間2月24日朝のニュースによると、Wikipediaは発展途上市場のユーザーにWikipedi...
SEO、あなたは何が欲しいですか?この文章を初めて見たとき、あなたはSEOについて心が痛みますか?百...
私はいつも、ウェブサイトとその訪問者の関係は 1-1=0 ではなく、1-1=2 であると考えています...