コンポーネントアーキテクチャ


背景


Dockerを使用すると、単純なDocker Runコマンドでアプリケーションの単一のインスタンスを実行できます.この場合、実行する単一のNodeJSアプリケーションを実行します
docker run nodejs
つのDockerホストであなたのアプリケーションの1つのインスタンスだけです.
ユーザーの数が増加し、インスタンスがもはや負荷を処理することができない場合はどうなりますか?
アプリケーションの複数インスタンスを実行します.
docker run nodejs
docker run nodejs
docker run nodejs
など.
アプリケーションのロードとパフォーマンスを監視し、インスタンスを自分で展開する必要があります.また、コンテナの健康が悪い場合はいくつかの場合は、手動で検索して置き換える必要があります.
どのようなホスト自体の健康?ホストがクラッシュしてアクセスできない場合はどうしますか?
ホストにホストされているコンテナもアクセスできません.
何百と何千ものインスタンスだけでなく、コンテナとあなたの必要性の状態と健康状態を監視するようなケースで何をするか?
つの実用的なアプローチは、それらの活動の場合にスクリプトを作成することです.しかし、より実用的なアプローチは、コンテナのオーケストレーションを使用することです.

コンテナ・オーケストラ


これは、ツールやスクリプトのコレクションは、我々は、コンテナの健康の面でスケーラブルな問題を解決することができますまた、州です.通常、それらはコンテナをホストする複数のDockerホストを含んでいます.もし失敗した場合、アプリケーションはまだ他のユーザーにアクセスできます.
これらのオーケストレーションサービスは、異なるホストに沿ってアプリケーションをスケーリングするだけでなく、要件ごとにホストをスケーリングするのにも役立ちます.ホストの間にネットワークを設定することもできますし、リソースとの間の活動を伝える.このようなオーケストレーションエンジンのようなロードバランシングエンジンのような機能で、ストレージの共有やクラスタ内の管理とセキュリティの設定などの他の機能が本当に簡単になりました.
市場で利用可能な複数のコンテナのオーケストレーションソリューションがあります.その中には
一九九九年
2メゾス
ドッカースウォーム
ここで、我々はKubernetesに集中しています.

クベルネート


そこで、私たちのレプリカ問題の解決策は、Dockerとは不適切であった.
kubectl run --replicas=1000 my-web-server
単純な1つのコマンドで我々のユニットの何千ものアプリケーションのレプリカを作ることができます.
kubectl scale --replicas=3000 my-web-server
我々は、それを自動化することができますスケールスケールコマンド3000単位です.
Kubernetesはまた、我々はABのテスト方法を介して要件ごとにアップグレードまたはダウングレードを確認することができます.また、オープンアーキテクチャのためのストレージとネットワークアプリケーションのためのベンダーの何百もあります.KubernetesはDockerコンテナをDockerコンテナの形でホストアプリケーションに使用します.
今すぐKubernetesアーキテクチャを見てみましょう.

Kubernetesコンポーネントセットアーキテクチャ



ノードはKarbernetesエンジンによってコンテナが起動されるワーカーマシンです.
クラスタは、一緒にグループ化されたノードのセットです.これは、1つのノードが失敗しても、他のノードからアプリケーションがまだアクセスできなくなっていました.我々はこれらのコンテナでクラスタを持っていますが、どのようにクラスタ上のこれらのノードを管理することができますか?
マスターノードは現在再生に入ります.Masterはクラスタのワーキングノード内のコンテナを制御するのに役立つ制御プレーンを持つノードです.
システムでKubernetesをインストールするには、次のコンポーネントをインストールします.
  • APIサーバ
  • ETCD
  • Kubelet
  • コンテナランタイム
  • コントローラマネージャ
  • スケジューラ
  • kubeプロキシ
  • APIサーバーはkubeクラスタのフロントエンドとして機能します.これは、コマンドライン、UIなどを介してユーザーとKubernetesクラスタの通信に役立ちます
    ETCDはKubernetesによってKubeクラスタを管理するために使用されるすべてのデータを格納するために使用される分散信頼性のあるキー値ストアです.これは、それぞれのノードを制御するから複数のマスターを防ぎます.
    スケジューラは複数のノード間のコンテナのための仕事を分配する責任があります.新しく作成されたコンテナを探し、ノードに割り当てます.
    エンドポイント、コンテナー、ノードなどが下がるたびに、コントローラマネージャーはオーケストレーションの脳のようです.コントローラーはそのようなケースで新しいコンテナを育てる決定をします.
    コンテナランタイム(エンジンのようなDocker)コンテナを走らせるのに用いられる基礎的なソフトウェア.私たちのケースでは、これはDockerです.
    Kubeletはクラスタ内の各ノードで動作するエージェントです.このエージェントの動作は、コンテナが指定したノードで予想通りに実行されていることを確認することです.
    KUBEプロキシは、プロキシUDP、TCPとSCTPを缶詰にする各々のノードで動きます.HTTPを理解しません.これは、負荷分散を提供するのに役立ちます.
    最後にKubectlはユーザーがKubernetesを操作するKubernetesオーケストレーション環境のためのコマンドラインユーティリティです.
    このようにして、Kubernetesコンポーネントアーキテクチャが機能します.

    参考文献


    https://assets.digitalocean.com/books/kubernetes-for-full-stack-developers.pdf
    https://iamondemand.com/wp-content/uploads/2019/11/Kubernetes-eBook.pdf
    https://www.cncf.io/wp-content/uploads/2020/08/Getting-Started-with-Containers-and-Kubernetes_-March-2020-CNCF-Webinar.pdf
    https://www.katacoda.com/courses/kubernetes
    https://nebula-graph.io/posts/how-to-deploy-nebula-graph-in-kubernetes/
    https://cdn.yongbok.net/ruo91/architecture/k8s/v1.1/kubernetes_architecture.png