Kubernetesは、Googleのオープンソースコンテナオーケストレーションエンジンであり、自動デプロイ、大規模なスケーラビリティ、アプリケーションのコンテナ化された管理をサポートします。実稼働環境にアプリケーションをデプロイする場合、通常、アプリケーション要求の負荷を分散するために、アプリケーションの複数のインスタンスがデプロイされます。
Kubernetesでは、複数のコンテナを作成できます。各コンテナはアプリケーションインスタンスを実行し、組み込みの負荷分散戦略を通じて、このアプリケーションインスタンスのグループの管理、検出、アクセスを実現します。これらの詳細には、操作や操作は必要ありません。メンテナンス担当者が複雑な手動構成と処理を実行します。
Kubernetesの機能
- ポータブル:パブリッククラウド、プライベートクラウド、ハイブリッドクラウド、マルチクラウド(マルチクラウド)をサポート
- 拡張可能:モジュラー、プラグイン、マウント可能、組み合わせ可能
- 自動化:自動展開、自動再起動、自動レプリケーション、自動スケーリング/スケーリング
近年、コンテナ技術はますます人気が高まっています。ガートナーの推定によると、2022年までに世界の企業の75%がコンテナ技術を使用し、2017年にはこの割合は20%未満であり、コンテナ技術の開発が非常に急速であることを示しています。
コンテナ技術の人気は、コンテナオーケストレーション技術の開発につながりました。現在最も人気のあるコンテナオーケストレーションシステムは、技術トレンドをリードし、生産環境でのコンテナのオーケストレーションのさらなる複雑さとコストに対処するために使用されるクベメテスです。
kubemetesシステムは、企業がコンテナーオーケストレーションの速度を加速し、マルチコンテナークラスターの大規模な管理を実現するのに役立ちます。継続的インテグレーションと配信、ネットワーク処理、サービス検出とストレージサービスなどを可能にし、マルチクラウド環境で動作する機能を備えています。
読者は、Kubernetesソースコードを読む過程でデザインパターン(DesignPattern)についてある程度の知識を習得することをお勧めします。これにより、コード全般を見るだけでなく、ソースコードの実装原理を誰もが理解できるようになります。
Kubernetesコードベースの学習は簡単ではありません。ソースコードがたくさんあり、学習プロセスは退屈ですが、ソースコードを学習することで、間違いなく多くのことを得ることができます。
この記事では、読者の役に立つことを期待して、Kubernetes1.14.0バージョンに基づくKubernetesソースコードの主要部分を調査および分析します。学習結果を向上させるために、この記事を読む際には、Kubernetesのソースコードファイルを参照することをお勧めします。
目次
メインコンテンツ
Kubernetesアーキテクチャ、
- 1.1Kubernetesの開発履歴
- 1.2Kubernetesアーキテクチャ図
- 1.3Kubernetesコンポーネントの機能
- 1.4KubernetesProjectLayoutデザイン
Kubernetes構築プロセス構築プロセスとは、「コンパイラ」が多数の処理手順の後にGo言語コードファイルを読み取り、最終的にバイナリファイルを生成するプロセス、つまり、人間が読める形式に変換するプロセスを指します。コンピュータ実行可能バイナリコードプロセスへのコード。
Kubernetesバイナリファイルを手動でビルドすることは、特により複雑なKubernetesの大規模プログラムにとって、非常に面倒なことです。Kubernetesは、ビルドプロセスを簡単にするための一連のコンパイルツールを公式に提供しています。
- 2.1工法
- 2.2地域環境の構築
- 2.3コンテナ環境の構築
- 2.4バゼル環境の構築
- 2.5コードジェネレータ
- 2.6コード生成プロセス
- 2.7gengoコード生成コアの実装
Kubernetesコアデータ構造、
- 3.1グループ、バージョン、リソースのコアデータ構造
- 3.2 ResourceList
- 3.3グループ
- 3.4バージョン
- 3.5リソース
- 3.6Kubernetes組み込みリソースの完全なマップ
- 3.7runtime.Objectタイプの基礎
- 3.8非構造化データ
- 3.9スキームリソース登録フォーム
- 3.10コーデックコーデック
- 3.11コンバーターリソースバージョンコンバーター
kubectlコマンドラインインタラクション。kubectlは、 ubernetesシステムクラスターを維持するときに最も一般的に使用されるツールの1つです。ubernetesアーキテクチャ設計の観点から、kubectlツールはKubernetesAPIサーバーのクライアントです。その主な仕事は、netesAPIサーバーへのHTTPリクエストを開始することです。Kt netesは完全にリソース中心のシステムであり、kubectlはHTTPリクエスト(つまり、リソースに対するCRUD操作)を開始してこれらのリソースを操作し、Kubernetesシステムクラスターを完全に制御します。
- 4.1kubectlコマンドラインパラメータの詳細な説明
- 4.2Cobraコマンドラインパラメータ分析
- 4.3リソースオブジェクトを作成するプロセス
クライアントとGoのプログラムによる相互作用、
- 5.1client-goソースコード構造
- 5.2クライアントクライアントオブジェクト
- 5.3インフォーマーメカニズム
- 5.4ワークキュー
- 5.5EentBroacaterイベントマネージャー
- 5.6コードジェネレータ
- 5.7その他のクライアント
Etcdストレージコアが実装されています。Kubemetesシステムは、Kubemetesクラスターの唯一のストレージとしてEtcdを使用します。Etcdは通常、実稼働環境(Etcdセットと呼ばれます)にクラスターの形式でデプロイされます。
Etcdクラスターは、信頼性が高く強力な整合性サービスを提供する分散K / Vストレージクラスターです。Etcdクラスターは、すべてのKubemetesリソースオブジェクト情報、リソースオブジェクトステータス、クラスターノード情報などを含むubemetesシステムのクラスターステータスとメタデータを格納します。 。ubemetesは、Etcdクラスターの/ registryというプレフィックスが付いたディレクトリにすべてのデータを保存します。
- 6.1Etcdストレージアーキテクチャの設計
- 6.2RESTStorageストレージサービスの一般的なインターフェイス
- 6.3RegistryStoreストレージサービスの一般的な操作
- 6.4Storage.Interfaceユニバーサルストレージインターフェイス
- 6.5CacherStorageキャッシングレイヤー
- 6.6基礎となるストレージオブジェクト
- 6.7コーデックコーデックデータ
- 6.8戦略の前処理
kube-apiserverコア実装、
- 7.1ウォームアップの概念
- 7.2 kubeapiserverコマンドラインパラメーターの詳細な説明
- 7.3 kubeapiserverアーキテクチャ設計の詳細な説明
- 7.4 kubeapiserverの起動プロセス
- 7.5アクセス制御
- 7.6認証
- 7.7承認
- 7.8アクセスコントローラー
- 7.9プロセス信号処理メカニズム
kube-schedulerのコア実装。kube-schedulerコンポーネントは、Kubernetesシステムのコアコンポーネントの1つです。主に、クラスター全体のポッドリソースオブジェクトのスケジューリングを担当します。組み込みまたは拡張のスケジューリングアルゴリズムに従います。 (事前選択と最適なスケジューリングアルゴリズム)、スケジュールされていないポッドリソースオブジェクトは最適な作業ノードにスケジュールされるため、クラスターのリソースをより合理的かつ完全に利用できます。
- 8.1kube-schedulerコマンドラインパラメーターの詳細な説明
- 8.2kube-schedulerアーキテクチャ設計の詳細な説明
- 8.3kube-schedulerコンポーネントの起動プロセス
- 8.4優先順位とプリエンプションメカニズム
- 8.5アフィニティスケジューリング
- 8.6組み込みのスケジューリングアルゴリズム
- 8.7スケジューラコアの実装
- 8.8リーダー選出メカニズム
この「Kubernetesソースコード分析」ドキュメントの合計ページ数は378ページです。フルバージョンが必要な場合は、この記事を転送してエディターをフォローし、以下のコードをスキャンして入手してください。!!
ダニエルはこの記事を高く評価しています
10年以上前、クラウドコンピューティングはまだ普及していません。すべての企業は、自社のニーズを満たす一連のインフラストラクチャとサービスを調査および構築する必要があります。せいぜい、オープンソースソフトウェアの機能の一部を再利用して、カスタマイズによるインフラストラクチャの構築と使用。効率的ですが、現時点での再利用の程度は非常に限られています。過去10年間で、クラウドコンピューティングの活発な開発と浸透、および技術者の経験の蓄積により、ITインフラストラクチャとサービスは世界で初めて大規模に再利用される機会があります。
2015年にCNCF(Cloud Native Computing Foundation)が設立され、進歩により「再利用」の確固たる基盤が築かれました。クラウドネイティブはクラウドコンピューティングに依存しており、ソフトウェア開発から配信、運用、保守までのライフサイクル全体をカバーする、一連の標準とその標準に対応するオープンソースソリューションを策定しています。これらのオープンソースコンポーネントは有機的に編成されており、クラウドコンピューティングに依存しています。 。、高水準で低コストのインフラストラクチャサービスのセットを迅速に構築でき、ITの生産性が大幅に向上しました。その中でも、Kubernetesは、クラウドネイティブテクノロジーのコアおよび大規模な基盤として特に重要です。
この記事では、ソースコードレベルからのKubernetesの詳細な分析を提供します。見逃すことはできず、誰もが学ぶ価値があります。
この記事が、すべての人が学び、技術的な深さと幅を継続的に改善し、自分自身をより価値のあるものにするのに役立つことを願っています!