記事のディレクトリ
序文
Kubernetesは、コンテナ化されたアプリケーションクラスタを管理するためのツールです。コンピュータの分野では、このプロセスは通常、オーケストレーションと呼ばれます。
上記のサービスコレオグラフィーに類似したオーケストラコレオグラフィーを使用するのが適切です。オーケストラの指揮者と同様に、Kubernetesは多くのマイクロサービスを協調して組み合わせてアプリケーションを形成します。Kubernetesは自動的かつ継続的にクラスターを監視し、その構成を調整します。
コンテナ化されたアプリケーションをデプロイおよび維持するには、Kubernetesアーキテクチャを理解することが不可欠です。
1.Kubernetesとは
-
Kubernetes(略してk8s)は、2014年にGoogleがオープンソース化したコンテナクラスター管理システムです。
-
K8sは、アプリケーションのデプロイを自動化するためのシステムです。最新のアプリケーションはクラウド、仮想マシン、サーバーの間に散在しており、アプリケーションの手動管理はもはや実行可能なオプションではありません。
-
K8sは、仮想マシンと物理マシンを統合されたAPIアスペクトに変換します。次に、開発者はKubernetes APIを使用して、コンテナ化されたアプリケーションをデプロイ、拡張、管理できます。
-
そのアーキテクチャは、分散システムに柔軟なフレームワークも提供します。K8sは、アプリケーションの拡張とフェイルオーバーを自動的に調整し、デプロイモードを提供します。
-
これは、アプリケーションを実行するコンテナーを管理し、実稼働環境でダウンタイムが発生しないようにするのに役立ちます。たとえば、コンテナに障害が発生した場合、別のコンテナが自動的に代わりに使用され、エンドユーザーはまったく気付かないでしょう。
-
-
Kubernetesはオーケストレーションシステムだけではありません。これは、独立した相互に関連する一連の制御プロセスです。その機能は、現在の状態で継続的に動作し、プロセスを目的の方向に移動することです。
-
K8sは、コンテナオーケストレーション、リソーススケジューリング、エラスティックスケーリング、デプロイ管理、サービス検出などの一連の機能を提供します。
-
Kubernetesの目標は、コンテナ化されたアプリケーションをシンプルかつ効率的にすることです。Kubernetesのサービス、サポート、ツールは広く利用できます。
第二に、K8の開発
-
従来の展開時代
- 初期の頃、組織は物理サーバー上でアプリケーションを実行していました。物理サーバー内のアプリケーションのリソース境界を定義できないため、リソース割り当ての問題が発生する可能性があります。
- 短所:物理サーバーで複数のアプリケーションを実行すると、1つのアプリケーションがほとんどのリソースを占有し、その結果、他のアプリケーションのパフォーマンスが低下する可能性があります。また、組織が多くの物理サーバーを維持するためのコストは高くなります
-
仮想化展開の時代
- ソリューションとして、仮想化が導入されました。これにより、単一の物理サーバーのCPU上で複数の仮想マシン(VM)を実行できます。仮想化機能により、アプリケーションをVM間で分離でき、あるアプリケーションの情報に別のアプリケーションが自由にアクセスできないため、セキュリティレベルが提供されます。
- 仮想化はアプリケーションを簡単に追加または更新したり、ハードウェアコストを削減したりできるため、仮想化は物理サーバーのリソースをより有効に活用し、スケーラビリティを向上させることができます。
-
コンテナ展開の時代
- コンテナはVMに似ていますが、軽量の分離プロパティを備えており、アプリケーション間でオペレーティングシステム(OS)を共有できます。したがって、コンテナは軽量であると見なされます。
- コンテナはVMに似ていますが、独自のファイルシステム、CPU、メモリ、プロセススペースなどがあります。それらはインフラストラクチャから分離されているため、クラウドおよびOSディストリビューション間で移植できます。
3.K8sの機能
-
1)自己修復
- ①ノードに障害が発生したときに障害が発生したコンテナを再起動し、予想されるコピー数を確保するために交換して再デプロイします。
- ②ヘルスチェックに失敗したコンテナを強制終了し、オンラインサービスが中断されないようにする準備ができるまでクライアント要求を処理しません。
-
2)弾性スケーリング
- コマンドやUIを使用するか、CPU使用率に基づいてアプリケーションインスタンスを自動的にすばやく拡張および縮小して、アプリケーションビジネスの同時実行のピーク時に高可用性を確保します。ビジネスのピークが低いときにリソースを回復し、最小限のコストでサービスを実行します。
-
3)自動展開とロールバック
- K8sは、ローリング更新戦略を使用してアプリケーションを更新し、すべてのポッドを同時に削除するのではなく、一度に1つのポッドを更新します。更新プロセスに問題がある場合は、アップグレードが影響を受けないように変更がロールバックされます。ビジネスによって;
-
4)サービス検出と負荷分散
- K8sは、複数のコンテナーに統合アクセスエントリ(内部IPアドレスとDNS名)を提供し、関連するすべてのコンテナーの負荷を分散するため、ユーザーはコンテナーIPの問題を考慮する必要がありません。
-
5)機密性と構成管理
- 機密データをミラーに公開せずに機密データとアプリケーション構成を管理し、機密データのセキュリティを向上させます。また、一般的に使用される構成の一部はK8に保存できます。これは、アプリケーションでの使用に便利です。
-
6)ストレージオーケストレーション
- ローカルストレージ、パブリッククラウド(AWSなど)、ネットワークストレージ(NFS、GlusterFS、Cephなど)のいずれからでも、外部ストレージシステムをクラスターリソースの一部としてマウントします。これにより、ストレージの柔軟性が大幅に向上します。
-
7)バッチ処理
- ワンタイムタスクとタイムタスクを提供し、バッチデータの処理と分析のシナリオを満たします。
4つのK8sアーキテクチャ図とコアコンポーネント
4.1Kubernetesクラスターアーキテクチャ図
4.2Kubernetesコンポーネントの詳細な説明
- アーキテクチャ図から、次のことがわかります。
- ①マスターノードは、主にapiserver、controller-manager、schedulerの3つのコンポーネントと、クラスター状態ストレージ用のetcdストレージサービスで構成されています。
- ②各ノードノードには、主にkubelet、kube-proxy、containerengineなどのコンポーネントが含まれています。さらに、完全なクラスターサービスは、kubednsなどのいくつかの追加コンポーネントにも依存します。
4.2.1マスターノードコンポーネント
-
マスターコンポーネント:クラスターの管理コントロールセンターを提供します。
- マスターコンポーネントはクラスター内の任意のノードで実行できますが、簡単にするために、通常、すべてのマスターコンポーネントは1つのVM /マシンで開始され、ユーザーコンテナーはこのVM /マシンで実行されません。
-
①kube-apiServer(コアコンポーネント)
- クラスターの統合ポートであるKubernetesAPI、および各コンポーネントのコーディネーターは、RESTful APIを使用してインターフェースサービスを提供します。オブジェクトリソースのすべての追加、削除、変更、および監視操作は、処理のためにAPIServerに呼び出され、Etcdに送信されます。ストレージ。
-
②kube-controller-manager
- クラスター内の通常のバックグラウンドタスクを処理するために、リソースはコントローラーに対応し、ControllerManaagerはこれらのコントローラーの管理を担当します
- コントローラには(パーツ)が含まれます:
1. 节点控制器:负责在节点出现故障时进行通知和响应;
2. 复制控制器:负责为系统中的每个复制控制器对象维护正确数量的Pod;
3. 端点控制器:填充“端点”对象(即,加入“服务和窗格”);
4. 服务帐户和令牌控制器:为新的名称空间创建默认帐户和API访问令牌。
-
③kube-scheduler
- スケジューリングアルゴリズムに従って、新しく作成されたポッドのノードノードを選択します。これは任意にデプロイできます。同じノードまたは別のノードにデプロイできます。
- スケジューリングアルゴリズムには、事前選択アルゴリズム、フィルタリングノード、優先アルゴリズム、スコアリングノードが含まれます。
-
④Etcd
- ポッド、サービス、その他のオブジェクト情報などのクラスター状態データを格納するために使用される分散型Key-Valueストレージシステム。
- Etcdには、mysqlおよびOracleデータベースロックでは使用できないサービス検出システムがあり、次の機能もあります。
1. 简单:安装配置简单,而且提供了HTTP API进行交互,使用也很简单
2. 安全:支持SSL证书验证
3. 快速:根据官方提供的benchmark数据,单实例支持每秒2K+读操作
4. 可靠:采用raft算法,实现分布式系统数据的可用性和一致性
4.2.2ノードノードコンポーネント
-
ノードコンポーネントはノード上で実行され、Kubernetesランタイム環境を提供し、ポッドを維持します。
-
①キューブレット
- kubeletは、ノードノード上のマスターのエージェントであり、ローカルで実行されているコンテナーのライフサイクルを管理します。たとえば、コンテナの作成、ポッドマウントデータボリューム、シークレットのダウンロード、コンテナとノードのステータスの取得などです。kubeletは各ポッドをコンテナのセットに変換します
-
②kube-proxy
- ノードノードにポッドネットワークプロキシを実装し、ネットワークルールと4層の負荷分散作業を維持します。
-
③港湾労働者またはロケット
- コンテナエンジン、コンテナを実行します
4.2.3アドオン
1. kube-dns:负责为整个集群提供DNS服务;
2. Ingress Controller:为服务提供外网入口;
3. Heapster:提供资源监控;
4. Dashboard:提供GUI;
5. Federation:提供跨可用区的集群;
6. Fluentd-elasticsearch:提供集群日志采集、存储与查询
5つのK8sシングルノードアーキテクチャ
5.1単一ノードの単純なグラフ
5.2詳細なプロセス
1. 假设用户需创建 tomcat 资源(网站/调度);
2. 请求发送至master 首先需要经过apiserver(资源控制请求的唯一入口);
3. apiserver 接收到请求后首先会先记载在Etcd中;
4. Etcd的数据库根据controllers manager(控制器) 查看创建的资源状态(有无状态化);
5. 通过controllers 触发 scheduler (调度器);
6. scheduler 通过验证算法 验证架构中的nodes节点,筛选出最适合创建该资源,接着分配给这个节点进行创建;
7. node节点中的kubelet 负责执行master给与的资源请求,根据不同指令,执行不同操作;
8. 对外提供服务则由kube-proxy开设对应的规则(代理);
9. container 容器开始运行(runtime 生命周期开始计算);
10. 外界用户进行访问时,需要经过kube-proxy 访问到container;
11. 如果container 因故障而被销毁了,master节点的controllers 会再次通过scheduler 资源调度通过kubelet再次创建容器,恢复基本条件限制。
Kubernetesのコアコンセプトの6つの詳細な説明
-
下
- ①最小展開単位
- ②コンテナのコレクション
- ③ポッド内のコンテナはネットワーク名前空間を共有します(当然のことながら同じローカルエリアネットワーク内)
- ④ポッドは短命です(ライフサイクルがあります)
-
コントローラー
-
①ReplicaSet:ポッドレプリカの予想数を確保するため(パラメータを設定できます)
-
②デプロイメント:ステートレスアプリケーション(例:web、nignx、apache、tomcat)
-
③StatefulSet:ステートフルアプリケーションのデプロイ。アプリケーションは一意であり、mysqlやOracleデータベースなどの完全な置換のために再作成することはできません。
-
④DaemonSet:すべてのノードが同じポッドを実行していることを確認します(すべてのノードを同じ名前空間に設定します)
-
⑤ジョブ:1回限りのタスク(アナログlinux:at)
-
⑥cronjob:タイミングタスク(アナログlinux:crontab)
-
高レベルのオブジェクト、ポッドのデプロイと管理
-
-
サービス
- ①ポッドが接続を失うのを防ぎます
- ②ポッドアクセス戦略のセットを定義する(主な役割)
- ③各ポッド間の独立性を確保する(セキュリティ)
-
ラベル
- リソースに添付され、オブジェクトの関連付け、クエリ、フィルタリングに使用されるタグ
-
名前空間
- 名前空間、オブジェクトを論理的に分離
-
注釈
- 注釈