Kubernetesの重要な概念の概要

k8s-clusterの実践を学ぶ前に、まず、Kubermetesクラスターの基礎であるKubermetesのいくつかの重要な概念を学ぶ必要があります。
1. [クラスター]

クラスターは、コンピューティング、ストレージ、ネットワークリソースのコレクションです。Kubernetesはこれらのリソースを使用して、さまざまなコンテナーベースのアプリケーションを実行します。

2.【マスター】

マスターはクラスターの頭脳であり、その主な責任はスケジューリング、つまりアプリケーションを実行する場所の決定です。マスターはLinuxオペレーティングシステムを実行します。Linuxオペレーティングシステムは、物理マシンでも仮想マシンでもかまいません。高可用性を実現するために、複数のマスターを実行できます。

3.【ノード】

ノードの責任は、コンテナアプリケーションを実行することです。ノードはマスターによって管理され、ノードはコンテナーのステータスを監視および報告すると同時に、マスターの要件に従ってコンテナーのライフサイクルを管理する責任があります。ノードはLinuxオペレーティングシステム上で実行され、物理マシンまたは仮想マシンにすることができます。

k8sインタラクティブチュートリアルでは、次の図に示すように、作成したクラスターにはマスターとノードの両方であるホストhost01が1つだけあります。

[K8s公式ウェブサイトインタラクティブチュートリアル] = " https://kubernetes.io/zh/docs/tutorials/kubernetes-basics/create-cluster/cluster-interactive/

テミナル

Kubernetes Bootcamp Terminal

$
$ minikube start
* minikube v1.8.1 on Ubuntu 18.04
* Using the none driver based on user configuration
* Running on localhost (CPUs=2, Memory=2460MB, Disk=145651MB) ...
* OS release is Ubuntu 18.04.4 LTS
* Preparing Kubernetes v1.17.3 on Docker 19.03.6 ...
  - kubelet.resolv-conf=/run/systemd/resolve/resolv.conf
* Launching Kubernetes ...
* Enabling addons: default-storageclass, storage-provisioner
* Configuring local host environment ...
* Waiting for cluster to come online ...
* Done! kubectl is now configured to use "minikube"
$ kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   27s   v1.17.3
$ hostname
minikube

4.【ポッド】

ポッドは、Kubernetesで最小の作業単位です。各ポッドには、1つ以上のコンテナが含まれています。ポッド内のコンテナは、マスター全体によってノード上で実行されるようにスケジュールされます。

4.1 [Kubemntesは主に次の2つの目的でポッドを導入しました]:

(1)管理性。

一部のコンテナは、密接に接続されて連携するために生まれました。ポッドは、コンテナーよりも高いレベルの抽象化を提供し、コンテナーをデプロイメントユニットにカプセル化します。Kubemetesは、Podを最小単位として使用して、リソースのスケジュール、拡張、共有、およびライフサイクルの管理を行います。

(2)コミュニケーションとリソース共有。

ポッド内のすべてのコンテナは、同じネットワーク名前空間、つまり同じIPアドレスとポートスペースを使用します。ローカルホストと直接通信できます。同様に、これらのコンテナーはストレージを共有できます。Kubemetesがボリュームをポッドにマウントすると、基本的にはポッド内の各コンテナーにボリュームがマウントされます。

4.2 [ポッドは2つの方法で使用できます]:

(1)単一のコンテナーを実行します。

Kubemetesの最も一般的なモデルは、ポッドごとに1つのコンテナーです。この場合、単一のコンテナーがポッドにカプセル化されるだけです。コンテナが1つしかない場合でも、Kubemetesはコンテナを直接管理するのではなく、ポッドを管理します。

(2)複数のコンテナを実行します。

問題は、どのコンテナをポッドに配置する必要があるかということです。

答えは、これらのコンテナは非常に密接に接続されている必要があり、リソースを直接共有する必要があるということです。

[例1]:次の図に示すように、ポッドには2つのコンテナーが含まれています。1つはファイルプーラーで、もう1つはWebサーバーです。

 

  • File Pullerは、外部Content Managerから最新のファイルを定期的にプルし、それらを共有ボリュームに保存します。Webサーバーはボリュームからファイルを読み取り、コンシューマーの要求に応答します。
  • これらの2つのコンテナーは緊密に連携し、一緒になってコンシューマーに最新のデータを提供します。同時に、ボリューム全体でデータを共有するため、ポッドに配置するのが適切です。

[例2]反例:NginxにマウントされたアプリケーションとPostgreSQLをポッドに配置する必要がありますか?

  • Nginxにマウントされたアプリケーション(例:asp.net core api)はPostgreSQLからデータを読み取ります。連携する必要がありますが、一緒にデプロイしたり、一緒に開始したり、ポッドで一緒に停止したりする必要はありません。同時に、ストレージを直接共有するのではなく、Npgsqlを介してデータを交換するため、それぞれのポッドに配置する方が適切です。

 

5.【コントローラー】

Kubernetesは通常、ポッドを直接作成しませんが、コントローラーを介してポッドを管理します。コントローラーは、レプリカの数や実行されるノードの種類など、ポッドの展開特性を定義します。さまざまなビジネスシナリオに対応するために、Kubernetesは、Deployment、ReplicaSet、DaemonSet、StatefuleSet、JobなどのさまざまなCotollerを提供しています。それらについて1つずつ説明します。

(1)デプロイメントは、最も一般的に使用されるCotollerです。たとえば、オンラインチュートリアルでは、デプロイメントを作成することによってアプリケーションがデプロイされます。デプロイメントは、ポッドの複数のコピーを管理し、ポッドが目的の状態で実行されていることを確認できます。
(2)ReplicaSetは、ポッドの複数のコピーの管理を実現します。ReplicaSetは、Deploymentを使用すると自動的に作成されます。つまり、DeploymentはReplicaSetを介してポッドの複数のコピーを管理します。通常、ReplicaSetを直接使用する必要はありません。
(3)DaemonSetは、各ノードが最大1つのポッドコピーを実行できるシナリオで使用されます。その名前が示すように、DaemonSetは通常デーモンを実行するために使用されます。
(4)StatefuleSetは、ポッドの各コピーがそのライフサイクル全体で同じ名前を持つことを保証できますが、他のコントローラーはこの機能を提供しません。ポッドに障害が発生し、削除して再起動する必要がある場合、ポッドの名前が変更され、StatefuleSetによって、コピーが一定の順序で開始、更新、または削除されるようになります。
(5)ジョブは実行終了時に削除されるアプリケーションに使用されますが、他のCntollerのポッドは通常長時間継続して実行されます。

 

6.【サービス】

デプロイでは複数のレプリカをデプロイできます。各ポッドには独自のIPがあります。外部はこれらのレプリカにどのようにアクセスできますか?
ポッドのIP渡しますか?
ポッドは頻繁に破棄および再起動される可能性があり、IPは変更される可能性があることを知っています。IPアクセスは現実的ではありません。
答えはサービスです。

  • Kubermeles Serviceは、外の世界が特定のポッドのセットにアクセスする方法を定義します。サービスには独自のIPとポートがあり、サービスはポッドの負荷分散を提供します。
  • Kubemesはコンテナ(Pod)を実行し、CntollerとServceによってそれぞれコンテナ(Pod)にアクセスします。

 

7.【名前空間】

同じKubemetsCusterを使用している複数のユーザーまたはプロジェクトグループがいる場合、Cotollerodとそれらが作成した他のリソースを分離する方法
答えは名前空間です。

  • Namespceは、物理クラスターを複数の仮想カスターに論理的に分割できます。各クラスターはNamespceであり、異なる名前空間のリソースは完全に分離されています。
  • Kubemnetesは、以下に示すように、デフォルトで4つの名前空間を作成します。
$ kubectl get namespace
NAME              STATUS   AGE
default           Active   44m
kube-node-lease   Active   44m
kube-public       Active   44m
kube-system       Active   44m
  • デフォルト:リソースの作成時に指定されていない場合、リソースはこの名前空間に配置されます。
  • kube-system:Kubemetesによって作成されたシステムリソースは、この名前空間に配置されます。

上記の基本概念を理解し、習得することは、クラスター展開の実践に非常に役立ちます。上記の基本概念を組み合わせることで、役立つ友人が役立つことを願っています。

おすすめ

転載: blog.csdn.net/ChaITSimpleLove/article/details/106301288