Kubernetes以降の時代におけるK8Sの12の主要機能を紹介します

Kubernetes以降の時代におけるK8Sの12の主要機能を紹介します

導入:

Kubernetes は最近大流行しており、すべての主要なクラウド サービス プロバイダーがクラウド ネイティブ アプリケーションを展開するためのソリューションとしてこれを採用しています。企業が Kubernetes を受け入れ始める重要な機能とツールの利点は何ですか?この記事の著者は体系的な要約をしています。

「オーケストレーションのない行動は燃え尽きであり、行動のないオーケストレーションは管理である。」

振り付けのない行動は失敗に終わり、行動のない振り付けはマネジメントであり、行動と振り付けがリーダーシップです。 ― オリン・ウッドワード

  • Kubernetes は、リソースの使用率を最適化し、ノードのクラスター全体にアプリケーションを効率的に分散できるようにする抽象化です。
  • 舵取り役のKubernetes!
  • Kubernetes は「舵取り」を意味するギリシャ語です。

これは、Google が開始したオープンソース プロジェクトであり、Borg から派生し、Google 社内で数年間使用され、現在はコンテナ管理に使用されています。現在、CNCF によってホストされています。

Kubernetes(略称:K8S)は、コンテナを通じてCPUやメモリなどのリソースの使用率を最適化し、複数のノード間でアプリケーションを効率的に分散できるようにする抽象化です。 K8S は、ベアメタルまたは任意のクラウド インフラストラクチャ プロバイダー上のどこでも実行できます。新しいツールはクラウドに依存せず、ノード/ホストを直接活用するのではなく、インフラストラクチャ内でのコンテナの展開とスケジュールに重点を置いています。

K8S が提供するプラットフォーム機能の一部は次のとおりです。

  • ポッドを使用してコンテナをグループ化する
  • 自己治癒
  • 自動スケーリング
  • DNS管理
  • 負荷分散
  • ローリングアップデートまたはロールバック
  • リソースの監視とログ記録

Kubernetes アーキテクチャ

Kubernetes クラスターは、マスター ノードとワーカー/スレーブ ノードのセットで構成されます。

Kubernetes マスター ノードのコンポーネントは次のとおりです。

  1. API サーバー: ユーザーは、REST 操作または kubectl cli を通じて manifestyaml と対話します。これは、ポッドの作成などのすべての API オブジェクト関連の操作に使用され、etcd に必要な状態を保存する最初のコンポーネントです。
  2. スケジューラ: ユーザーは kubectl cli を使用して、API サーバーにコマンドを発行し、ポッドを作成します。これを実行した後、スケジューラはリソース要件に基づいて利用可能なノードにポッドを割り当てます。
  3. コントローラー マネージャー: コントローラー マネージャーは、クラスターの状態に基づいてリソースを操作し、マニフェスト yaml に基づいて変更を加えて、現在の状態のアプリケーションを目的の状態に導きます。つまり、コントローラー マネージャーは実際の状態と目的の状態を調整できます。コントローラー マネージャーには、クラスターの管理を簡素化するための専用コントローラーが複数あります。たとえば、ノード コントローラーは現在実行中のノードがダウンしていないかどうかを確認し、修正アクションを実行します。一方、レプリケーション コントローラーは、必要な数のポッドがノードで実際に実行されていることを確認します。
  4. etcd: クラスターのステータスに関するすべての構成情報は、キー/値のペアの形式で etcd に保存されます。このコンポーネントは CoreOS によって実装されています。これらの状態は、クラスターに含まれるノードと、その上で実行する必要があるポッドを示します。
  5. アドオン: Kubernetes にサーバー DNS レコードを追加するには、クラスター DNS アドオンが必要です。このプラグインは、Kubernetes クラスターまたはノードに関連する機能を拡張するのに役立ちます。ログ用の fluntd、ロールベースのアクセス用の rbac など、他にも多くのプラグインがあります。

Kubernetes ノードにインストールされるコンポーネントは次のとおりです。

  • Docker: Docker デーモンは各ノードで実行されます。コンテナ イメージが存在しない場合は、Docker レジストリからプルされて実行されます。
  • Kubelet: Kubelet ノード エージェントは、コンテナ内のコンテナの正常性を定期的にチェックします。さらに、ボリュームがマニフェストに従ってマウントされていることを確認し、コンテナの実行に必要な機密情報をダウンロードします。また、ノードを API サーバーにリンクします。
  • Kube-proxy: Kube-proxy は各ノードで実行され、ポッド間で負荷を分散し、外部ホストでサービスを利用できるようにします。 iptable ルールまたはラウンドロビン スケジューリングを使用して、リクエストを適切なコンテナーに転送します。

可用性が高く、フォールト トレラントな Kubernetes の運用と展開には、複数のマスター ノードと個別の etcd クラスターが必要です。 3 台の API サーバーを実行している場合は、サーバーに負荷を適切に分散するためにネットワーク ロード バランサーが必要になります。 ***残る問題は、クラスターの状態を維持し、ノードを割り当てるために、コントローラー マネージャーとスケジューラーを管理する 3 つのロールが必要であることです。より効率的かつ確実に行うには、実際の変更は 1 人のアクターのみが実行する必要がありますが、マシンのダウンタイムに備えて他のインスタンスも必要です。この問題を解決するには、API でリース ロックを使用してリーダー選出を実行します。これを使用するためのフラグは、leader-elect です。

Kubernetes は、次のいずれかの方法で Pod 間ネットワークを実装します。

  • レイヤー2(スイッチングソリューション)
  • レイヤー 3 (ブリッジング ソリューション)
  • オーバーレイソリューション(織りとフランネル)

クラスター内での Pod 間の通信を可能にし、各 Pod に一意の IP アドレスを提供します。

Kubernetesの主な機能

ポッド: コンテナのコレクション

ポッドは K8S のデプロイメント ユニットであり、単一の IP アドレスを持ちます。内部的には、Pause コンテナはネットワーク名前空間、ポート、および IP アドレスを保持してネットワークを処理し、これらはポッド内のすべてのコンテナによって使用されます。

レプリケーションコントローラ

ReplicationController は、指定された時間に必要な数のコンテナが稼働していることを確認します。 Pod テンプレートは、コンテナ イメージ識別子、ポート、およびラベルを定義するために使用されます。ライブネスプローブを使用すると、ポッドを自動的に修復し、目的の状態に応じてポッドの数を維持できます。 kubectl を使用してレプリカ数を手動で制御することも可能です。

ストレージ管理

ポッドは本質的に一時的なものであり、ポッドまたはコンテナに保存された情報はすべて失われます。データを保存するには、ポッドが強制終了または再スケジュールされた後でも、Amazon Elastic Block Storage (EBS)、Google GCE PD、またはネットワーク ファイル システム (NFS) や Gluster ファイル システム (GFS) などの分散ファイル システムなどの永続的なシステムが必要です。

リソース監視

監視は、インフラストラクチャを正常に実行するための鍵の 1 つであり、信頼性レベルの基礎となります。 Heapster は、kubelet からメトリックを収集し、cAdvisor と統合するプラグインです。 cAdvisor は、実行中のコンテナの CPU、メモリ、I/O、ネットワーク統計に関連するメトリックを収集するために使用されます。 Heapster によって収集されたデータは Influx DB に保存され、Grafana を使用して UI に表示されます。データを保存してユーザー インターフェイスに表示するために使用できる Kafka や Elastic Search などの他のシンクも利用できます。

健康チェック

Kubernetes のヘルスチェックは kubelet エージェントによって実行されます。これは、活性プローブと準備プローブに分かれています。

ハンドラーには主に 3 つの種類があります。

  1. ExecAction: シェル コマンドを実行します。結果の終了コードが 0 の場合、インスタンスは正常であることを意味します。それ以外の場合、インスタンスは不健全です。
  2. TCPAction: Kubelet は指定されたポートへの接続を試行し、指定されたソケットへの接続を確立すると、診断は成功します。
  3. HTTPGetAction: アプリケーションによって公開された HTTP エンドポイントに基づいて、kubelet は指定されたパスのコンテナ IP アドレスに対して HTTP GET 要求を実行します。 200 ~ 300 の応答コードが返された場合、診断は成功です。

各プローブには通常、次の 3 つの結果があります。

  • 成功: コンテナは診断に合格しました。
  • 失敗: コンテナの診断に失敗しました。
  • 不明: 診断に失敗しました。何もアクションを実行しないでください。

水平自動スケーリング機能

自動スケーリングでは、負荷に基づいてコンピューティング リソースが使用されます。 K8S スケール ポッドは、Horizo​​ntal Pod Autoscaler オブジェクトを自動的に使用します。このオブジェクトは、Heapster からメトリック データを取得し、それに応じてポッドの数を減らしたり増やしたりします。たとえば、自動スケーリングがメモリ使用率に基づいている場合、コントローラーはポッド内のメモリ使用量の監視を開始し、容量に基づいてレプリカ数をスケーリングします。

サービス検出

Kubernetes ポッドは一時的なものであり、ReplicationController は任意のノードでそれらを動的に作成するため、クラスター内のサービスを検出するのは困難です。サービスは、クラスター内で通信​​するために IP アドレスと動的ポートを検出する必要があります。

それを検索する主な方法は、環境変数と DNS の 2 つです。

推奨されるのは、クラスター アドオンとして利用できる DNS ベースのサービス検出です。クラスター内の新しいサービスを追跡し、各サービスの DNS レコードのセットを作成します。

ネットワーク

クラスターを完全に管理するには、ネットワークを正しく設定し、次の 3 つのネットワークの問題に対処する必要があります。

  1. コンテナ間通信: ポッドは localhost を介して通信し、Pause コンテナ ネットワーク名前空間を使用してこの問題を解決します。
  2. ポッド間通信: 上記のアーキテクチャ図に示すように、ソフトウェア定義ネットワークによって解決されます。
  3. ポッド外部との通信: サービスによってカバーされます。

Kubernetes は幅広いネットワーク オプションを提供します。また、コンテナの一般的なプラグイン アーキテクチャである Container Network Interface (CNI) プラグインもサポートされるようになりました。現在、Kubernetes、Mesos、CloudFoundry などの複数のオーケストレーション ツールをサポートしています。

さまざまなオーバーレイ プラグインがあります。

  1. Flannel は CoreOS から提供されており、非常にシンプルな etcd ベースのオーバーレイ ネットワークです。アンダーレイ ネットワーク上で実行される、別の仮想のルーティング可能な IP/Pod ネットワークを作成します。したがって、オーバーレイ ネットワークと呼ばれます。このオーバーレイ ネットワークでは、各ポッドに IP アドレスが割り当てられ、その IP を使用して直接通信します。
  2. Weave は、CNI プラグインを介して Kubernetes 互換のオーバーレイ ネットワークを提供します。

仕える

Kubernetes サービスは、マイクロサービスを提供するために一連のポッドに通信をルーティングする抽象化です。 Kube-proxy は各ノード上で実行され、一連の iptable ルールを設定してサービスを管理します。

サービスを設定するには、次の 3 つのモデルがあります。

  1. ClusterIP (内部アクセスのみ)
  2. NodePort (ポートでファイアウォールを開く必要があります。パブリック アクセスは推奨されません)
  3. ロードバランサ(AWS や GKE などのパブリッククラウドプロバイダーが所有)

ConfigMap とシークレット

ConfigMap を使用すると、複数の環境間でコンテナ イメージの一貫性を保ちながら、環境ベースの構成を挿入できるようになります。これらはマウントされたボリュームまたは環境変数を介して注入され、キー/値形式で値を保存できます。

シークレットは、パスワード、OAuth トークンなどの機密データを保存するために使用されます。

ローリングデプロイメントとロールバック

デプロイメント オブジェクトは、ロールバック メカニズムをサポートするために 1 つ以上のレプリカ セットを保持します。つまり、デプロイメント構成を変更するたびに新しいレプリカ セットが作成され、ロールバック オプションが存在するように以前のバージョンが保持されます。特定の時点でアクティブになるレプリカ セットは 1 つだけです。

ローリング デプロイメントの場合、必要なポリシー タイプは RollingUpdate と minReadySecs であり、これはアプリケーションがトラフィックの処理に費やす時間を指定します。アプリケーション ポッドの準備ができていないときにデフォルト状態のままにしておくと、使用できなくなります。これは次のコマンドで実行できます。

または、

デプロイメント yaml ファイルの内容を置き換えて、次のコマンドを実行します。

新しいバージョンが期待どおりでない場合は、次のコマンドを実行して以前のバージョンにロールバックできます。

希望するバージョンが以前のバージョンと異なる場合は、次を実行します。

ログ記録

アプリケーションの動作を監視するには、ログを調べる必要があります。各ポッドは複数のログを生成します。ダッシュボード UI でログの検索を開始するには、ログを収集してログ ビューアーに集約する何らかのメカニズムが必要です。これを文脈に沿って説明すると、Fluentd は CNCF の一部でもあるオープンソース ツールであり、Elastic Search および Kibana と統合されています。

<<:  Amazon RDS の紹介

>>:  WOT2018 シェン・ジアン:58 Express によるマイクロサービス アーキテクチャの優れた実践

推薦する

鄒聖林氏独占インタビュー:IT教育の最前線で活躍し、オープンソースの発展を推進

Red Hat は、コミュニティの力を活用して、安定性、信頼性、高性能を備えたクラウド テクノロジー...

日々のウェブサイトメンテナンスのポイントについて簡単に説明します

ほとんどのウェブマスターは、日々の業務で何をすべきかを知っていると思いますが、日々のウェブサイトのメ...

GalaCloud 分散暗号化ストレージネットワーク

昨今、インターネットやデジタル化の発展により、データ保存の重要性が顕著になってきています。同時に、近...

Baiduプロモーションの背景を使用して高品質のキーワードを選択する方法

現在、SEO最適化作業を行っている多くの友人は、Baiduプロモーションの背景がキーワード選択に適し...

sentris-大規模 VPS/リセラー/$501/年/250IPv4/16g メモリ/1.25T ハードディスク/シアトル

Sentris は、3 年間で 5 ドルの VPS というビッグ ニュースを発表した後、本日、別のビ...

Nvidia CTO: クラウドからメタバースへ

仮想世界でロボットを訓練して、現実世界でより優れたロボットにしましょう。メタバース(またはオムニバー...

ニュース: OVH のシンガポールとオーストラリアの VPS が再入荷

シンガポールとオーストラリアにあるOVHの2つのデータセンターのVPSが、長い間在庫切れだったが、再...

ビジネスの収益を増やしたいですか?これらの5つのAI戦略は

今日のテクノロジー主導の世界では、企業が収益を増やすために人工知能を活用することが必要不可欠になって...

有能なSEO担当者になる方法

SEO 担当者になるのは実はとても簡単です。なぜそう言うのでしょうか? 記事を書いて外部リンクを投稿...

友情のつながりに関する古い格言の新しい解釈:「それはつながりではなく友情だ」

数日前、Lu Songsong のブログで、最近の Google PR アップデートにより、多くのウ...

レノボ劉ミャオ:次世代インテリジェントクラウドデータセンターの開発動向と戦略

[51CTO.comより引用] 2019年12月18日、第14回中国IDC業界年次式典のメインフォー...

分散コンピューティングエンジン Flink/Spark の k8s 上での実装比較と実践

Flink や Spark に代表される分散ストリーム バッチ コンピューティング フレームワークの...

Spring の組み込み分散ロックを使用したことがありますか?

環境: SpringBoot2.7.12この記事では、Spring Integrationが提供する...

集中型クラウドセキュリティが不可欠

フォーティネットが後援する 2023 年クラウド セキュリティ レポートでは、世界中のさまざまな業界...

EditPlus 共通正規表現

正規表現 (コードでは regex、regexp、または RE と略されることが多い) は、コンピュ...