Kubernetesコアコンセプト
Kubernetesコアコンセプト:ネイティブクラウド技術のオープンクラスCNCFとアリババからレッスンを終えたこの論文は、共同で3を組織しました。もちろん、アリババ、上級技術専門家、主要な機能と性能、Kubernetesアーキテクチャとなど中核概念とコアAPIを、紹介する9 TCO CNCF李翔Kubernetesの一つは、見逃してはなりません。
以下の三つの部分の周りのコースの公転を共有:
- Kubernetesは何ですか:導入が主な機能や能力をKubernetes。
- Kubernetesアーキテクチャ:はじめにKubernetesのコアコンポーネント、およびそれらが各対話に接続されている方法を説明します。
- コアAPIとコアコンセプトKubernetes。
まず、Kubernetesは何ですか
Kubernetes、あなたは公式サイトから見ることができ、それは工業用グレードの容器オーケストレーションプラットフォームです。Kubernetesワードは、その中国語の翻訳は「船頭」またはで、ギリシャ語で「パイロット。」共通データの一部では、ワードは8文字「8」原因で置き換える「ubernete」による頭文字である「K8S」、である「KS」を参照してくださいます。
なぜKubernetesはそれに名前を付ける「船頭」を使用しますか?私たちは、この絵を見ることができます:
これは、彼らがのコンテナに行く海に走り回るをもたらしたコンテナ運ぶ船、コンテナ船の山です。私たちは、コンテナと呼ばれる概念を導入する前に実際には、コンテナ英語の単語はまた別の意味がある持っている「コンテナ」。これらのコンテナの管理である、Kubernetesは、この意味を取る、私はコンテナを輸送船になりたい、私たちはこれらのコンテナの管理を支援します。
Kubernetesの選択肢の単語がこのプロジェクトの原因を表現するためには、このためです。より具体的に言えば:Kubernetesは、柔軟性と管理アプリケーションがコンテナに基づいているアプリケーションを使用し、展開を担当して自動化されたコンテナのオーケストレーションプラットフォームです。
二、Kubernetesは、次のコア機能があります。
サービス検出および平衡負荷;
自動包装容器は、私たちは、「スケジュール設定」されたスケジューリングそれを呼び出すマシンのクラスタのいずれかの容器を置く、Kubernetesストレージは、私たちは、振り付けを行うのに役立ちますので、そのコンテナのストレージライフサイクルライフサイクルは、コネクションを持つことができます。
Kubernetesは、自動化コンテナを復元するために行うために私たちを助けます。クラスタでは、多くの場合、ホストOSの問題か問題で、コンテナ自体につながることは、回復のためにこれらのコンテナ用Kubernetesが自動的に使用できない、使用できません。
Kubernetesは、自動ロールバックのアプリケーションの公開やアプリケーションだけでなく、暗号文の管理、関連するアプリケーションの設定を行うために私たちを助けます。
ジョブタスクの種類については、Kubernetesは、バッチを実行行うことができます。
このクラスタを作成するには、アプリケーションのより柔軟な、Kubernetesも水平方向のスケーリングをサポートしています。
あなたがより効果的に能力Kubernetesを導入して、以下に、我々は3例に願っています。
1、スケジューリング
Kubernetesコンテナは、管理対象ノードのクラスタKubernetesアップテーブルにユーザーが送信することができます。この機能の実装の構成要素であるスケジューラKubernetesは、それは、コンテナのサイズが予定されている仕様を遵守します。
例えば、それは、CPUを必要とし、それがメモリを必要として、操作に置かれたら、ある配置を、行うために、クラスタ内の比較的アイドルマシンを見つけます。この例では、コンテナの赤い色は、スケジュールされた作業を完了するために、アイドル状態の第二のマシンに配置されていることを確認できました。
2、自動車修理
Kubernetesは、ノードヘルスチェック機能を持っている、それはノードが自動的にその発見の健康状態をチェックします、ホスト自体が失敗した場合、すべてのホストクラスタを監視、またはソフトウェアの障害になります。
Kubernetesが自動的に移行され、これらのノードで次の血管障害を実行する、健康のホストへの移行は自動回復クラスタの内容を完了するために、実行されています。
3、水平方向のスケーリング
Kubernetesは、ビジネス自体が高すぎるCPU使用率である、または応答時間が長すぎる、それはこの事業の拡大一度実行することができるならば、それは、ビジネスが負担する負荷を監視し、トラフィック負荷をチェックする機能を持っています。
三重から、例えば、次の例に、ビジー過度の黄色、黄色ができKubernetes負荷の変化。続いて、応答時間を改善するためにも同様に、3つの黄色黄色までに分割された第1の負荷上の元の負荷分散負荷がヒットすることができます。
上記は、簡単な紹介Kubernetes 3つのコアコンピタンスです。
三、Kubernetesアーキテクチャ
Kubernetesアーキテクチャは、典型的な2階建てのアーキテクチャとサーバ - クライアントアーキテクチャです。中央制御ノードとしてマスタノードへの接続であろう。
、最終的にすべてのUI、クライアントは、ユーザ側のこれらの構成要素、及びマスターは、所望の状態に接続するか、マスターに対して発行されたコマンドを実行するように、マスターは、各ノードになりますこれらのコマンドやステータスを送信しました実行。
APIサーバー、コントローラー、スケジューラとetcd:Kubernetesザ・マスターは、4つの主要コンポーネントで構成されています。下図のように:
APIサーバー:名前が示唆するようには、APIの動作を処理するために使用される、すべてのコンポーネントがコンポーネントと接続コンポーネントとの間の別の接続なしKubernetes及び一般的なAPIサーバーあり、それらは、メッセージ配信のためにサーバーAPIに依存しています。
コントローラー:クラスター状態のいくつかの管理を行うために使用されるコントローラは、です。例えば、先ほど言及したいずれの場合においても、容器、第2の自動水平拡張の最初の自動修復は、コントローラKubernetesによって完成行われます。
スケジューラ:定義することにより、スケジューラ、「スケジューラ」はスケジュールされた操作が完了している、それは我々だけで、コンテナは、適切なを探して、メモリ要求のサイズのために、そのCPUに基づいて、利用者に提出して説明してきた最初の例であります配置のためのノード、。
etcd:元の情報をAPIサーバーのために必要とされる分散型ストレージシステムは、ETCDに配置され、ETCD自体が高可用性システムである、ETCDは、アセンブリ全体の高可用性を確保マスターKubernetes。
自身が展開構造である私達は今述べたAPI Serverは、アセンブリの水平展開に拡張することができ、コントローラは、ホットスペアがコンポーネントに展開することができる、それはあるが、一つだけアクティブ、それは適切なスケジューラを持っています唯一のアクティブな、しかし、ホットスタンバイすることができます。
Kubernetesアーキテクチャ:ノード
ノードが実際にトラフィック負荷を実行しているKubernetesは、トラフィック負荷がポッドの形でそれぞれに実行されます。私はポッドの概念を紹介しますちょっと待って。これらの実際のコンポーネントを実行するために、ポッドの実行中に1つ以上の容器は、ポッドと呼ばれるkubelet、ノードは、APIサーバーによって状態に必要なポッド実行を受け取る最も重要な成分であり、その後、下記の私たちに提出しますこの絵コンテナのランタイムコンポーネント。
アップが最終容器やポッド稼働して、OS環境で実行するために、コンテナのニーズを作成するには、それは、ストレージネットワークを管理する必要があります。Kubernetesは直接ネットワークストレージを操作しない、彼らはストレージプラグインプラグインやネットワークによって運営されます。ユーザーが自分自身やクラウド・ベンダーが対応する書き込みをすることになりますストレージプラグインやネットワークプラグインを、ストレージ運用やネットワークオペレーション完全に、。
Kubernetes自分の環境では、Kubernetesのネットワーク、ネットネットワーキングを取るためにそれを提供するために、サービスのネットワークが存在します。(私たちは、「サービス」という概念を導入してお待ちしております。)本当に完成組立サービスのネットワークがあるKUBE-プロキシ、それはKubernetesのネットワークを形成するためのiptable能力を使用することで、クラスタネットワークは、ノードがより上記以外であります4つのコンポーネント。
ノードはKubernetesと直接ユーザーとの対話ではないでしょう、それが唯一の相互作用のマスターを介して行われます。ユーザーマスターと下位ノードでは、情報を送信します。各ノードでKubernetesは、これらのコンポーネントは、我々だけ言及している実行されます。
ここでは、外観は、これらのコンポーネントのアーキテクチャの別の例をKubernetes取り、お互いにどのように相互作用です。
ユーザーはKubernetesポッドの展開にUIまたはCLIを提出することができ、要求は最初のポッドKubernetes APIサーバーUIまたはCLIを通じて提出され、次の書き込みAPI ServerはそのストレージシステムETCDにこの情報を置く、その後、スケジューラを通過しますスケジュールするためのポッド必要がある。このメッセージを取得するためのAPIサーバーの時計やと呼ばれる通知メカニズム。
スケジューラは、スケジュールを完了した後、それがAPIサーバーのレポートになり、スケジューリング決定を行うためにそのメモリの状態に基づいて行われます。この時間は、言った:「OKポッドは、特定のノード上でスケジュールする必要があります!。。」
この時間のAPI Serverがこの操作を受けた後、その結果を再びetcd書き込まれます、API Serverは、実行のポッド本当のスタートに適切なノードに通知します。kubelet対応するノードは、この通知を取得するネットワークを構成するには、本当に、コンテナとコンテナの動作環境を設定するために開始してくるとストレージプラグイン構成のストレージをスケジュールにネットワークプラグインをkubeletチューンコンテナランタイムを移動します。
私たちは、この例を見ることができます:どのようにこれらのコンポーネント間の通信は、ポッドのスケジュールされた実行時間を完了するために、互いに、協調運転して相互に通信しています。
第四に、そのAPIとコアコンセプトKubernetes
コアの概念
最初のコンセプト:ポッド
ポッドKubernetesは最小スケジューリングとリソースの要素です。ユーザーポッドポッドのAPIにKubernetesにより製造することができる、つまり、このポッドスケジューリングKubernetesを聞かせては、それを入れて、1つのノードKubernetes管理上で実行されています。ポッドは、それが1つ以上の容器が含まれているコンテナのシンプルな抽象Aセット、です。
このような二つの容器を含む、以下図のどの部分、それはサイズを指定する必要がある各リソースとして。例えば、コアG、または核0.5、0.5 G.
もちろん、これはまた、必要に応じていくつかの追加のリソースにポッドに含まれていてもよい:例えば、我々が見てきたことを、ボリューム、ボリューム・ストレージ・リソースを、例えば、我々は、追加のストレージのストレージまたは20ギガバイトの100ギガバイトを必要としています。
ポッドの内部には、我々はまた、コンテナが実行するのに必要な方法を定義することができます。コンテナを実行するために、例えば、コマンド、およびコンテナの実行環境変数など。ポッドは、この抽象また、彼らは同じネットワーク環境を共有し、これらのコンテナは、共有ランタイム環境を提供する与える、これらのコンテナは、ローカルホストの直接接続に使用することができます。ポッドとポッドとの間には、それぞれの単離が単離されます。
第二のコンセプト:ボリューム
ボリュームは、ディレクトリ内のファイルにアクセスするためのポッドで宣言された容器に保存されているKubernetesを管理するために使用される概念の体積で、ボリュームが指定されたパスまたはポッド以下複数の容器に取り付けることができます。
ボリューム自体は、ボリュームがバックエンド・ストレージの様々なサポートするために行くことができる、抽象的な概念です。ボリュームKubernetesは、メモリカードの多くをサポートするために、例えば、それは、ローカルストレージをサポートすることができ、そのようなCEPH、GlusterFSとして分散ストレージをサポートすることができ、それはまた、このようなディスクアリ雲雲、AWSとして、クラウドストレージをサポートしていますディスク上の雲、ディスクGoogleでクラウドとオンそう。
第三のコンセプト:展開
展開がこの抽象ポッドの上部のより抽象的であり、それはポッドのセットのコピー数、及びポッドのこのバージョンを定義することができます。私たちは、一般的抽象を行うに展開実際の管理アプリケーションを使用し、最小単位ポッドの展開で構成されています。
展開の自動回復を助けるために行くだろう、私たちはポッドでの展開の数を維持するために、コントローラを言及しているされたコントローラ、スルーKubernetesはポッドに失敗しました。
例えば、私は失敗は、コントローラが監視されるとき、それは再ポッドポッドの展開数が1から2まで回復するために、2つのこの展開ポッドを、必要と展開を、定義することができ、新しい世代が通過しますポッド。コントローラによって、我々は発行されたポリシーを完了するのに役立ちます。例えば、ローリングアップグレードは、再生成は、アップグレード、またはバージョンのロールバック。
第四コンセプト:サービス
サービスへのアクセスは、安定したアドレスの1またはポッドの複数のインスタンスを提供します。
例えば、上記の例では、我々は、次を参照してください。展開は、2つ以上の同一ポッドがあるかもしれません。ポッドは、実際に同じアクセス先の外部ユーザー、それは同時にロードバランシングをやって、負荷分散をしたいので、私はちょうど固定VIPを訪問したいと思う、それはせずに、仮想IPアドレスであるため私は特定の各ポッドのIPアドレスを知っていただきたいと思います。
ポッドが失敗した場合、我々は、今述べてきた、ポッド自体は、端末、外出先(終了)、別のは、新しいものと交換することができることがあります。
外部ユーザーのために、特定のポッドアドレスの数を提供し、再起動が失敗した後、ユーザーは常に再びアドレスポッド、ポッドにアップデートする必要があり、私たちは抽象を持つように願って、すべてのポッドにアクセスする能力は、Aに抽象化サードパーティのIPアドレス、Kubernetesは、サービスと呼ばれるこの抽象化を実現。
我々は上記の言っているkuberプロキシネットワーキングサービス、KubernetesサポートクラスタIPを実装する多くの方法が、ありますが、それはまた、上の他のnodePortの数、ロードバランサなどにアクセスする機能をサポートしています。
第五概念:名前空間
名前空間は、認証、リソース管理を含むクラスタ内の論理的な分離を行うために使用されます。などの各リソースKubernetesは、ちょうどポッド、展開、サービスが名前空間に属し、同じ名前空間のリソースの一意性は、名前を複製することができます別の名前空間のリソースに名前を付ける必要と述べました。
名前空間を使用する場合は、アリババのように、我々は、スペーサのビューを有することが望ましい、ビジネスユニットのそれぞれの間に、社内のビジネスユニットの数を持っており、認証には同じではありません上記のCUDAには同じではありません我々は孤立、そのようなaが、彼は名前空間内でのメカニズムを見たものを見る提供し、各BUに来ます。
Kubernetes的API
ここでは、基本的Kubernetes APIを紹介します。ビューの高レベルの点から、によってKubernetesのAPI HTTP + JSONからなる:ユーザーアクセスがHTTPである方法は、コンテンツAPIアクセスの内容は、JSON形式です。
kubectlのKubernetesコマンドツール、Kubernetes UIであり、または時にはカールと、直接HTTP + JSONこのフォームを使用している、Kubernetesと通信します。
ここでは例です:たとえば、リソースポッド、そのHTTPアクセス・パスのこのタイプのため、APIで、その後、apiVesionは:対応する名前空間が続いV1、およびポッド資源、ポッドの名前であり、最終的Podname、 。
私たちは、ポッドを提出、またはそのコンテンツの内容は、JSONやYAML表現であるときにポッドを得ようとしている場合。例上記のそこのYAMLの図は、このYAMLファイルで、ポッド資源の記述は、いくつかの部分に分かれています。
最初の部分は、一般的には、APIになりますバージョン。たとえば、この場合には、それは私がどのリソースの操作で説明しますV1、である;例えば、私のようなもの、それはポッドであれば、メタデータには、あなたはポッドの名前を書きます。例えば、nginxの、我々はいくつかを再生するためにそれを与えるだろうラベル、そして私たちはラベルの下の概念についてお話しますので。メタデータに、時々書き込みにアノテーション、リソースのいくつかの付加的なユーザレベルの記述です。
より多くの重要な部分が呼び出される仕様仕様ポッドが所望の状態を達成することを私たちの希望です。例えば、それが実行される内部の容器を持っている必要があります。例えば、どのようなそのイメージで、nginxののコンテナがありますか?それが公開何ポートがありますか?
我々は、時間内KubernetesのAPIからリソースを取得するために行ったとき、一般的には、以下のスペックと呼ばれるプロジェクトがある状況が、それはリソースの現在の状態を表している。例えば、状態は、ポッドは、スケジュール、またはすでにされていること終了を実行している、または既にある、仕上げされます。
ただ、APIで、私たちは「と呼ばれる、より興味深いメタデータについて話しているラベル」、このラベルは、設定されたKeyValuePairすることができます。
例えば、第一ポッド図形、ラベル、すなわち、その色は赤色であり、赤色に等しくてもよいです。もちろん、あなたも、このようなサイズとして、他のラベルを追加することができます。大きなサイズは大と定義され、それがグループラベルすることができます。
ラベルは、クエリのセレクタであるセレクタ、することができます。実際にSQLのSELECT文のタイプに話をする能力は、私たちが選択できる3つのポッド資源、下図のように、非常によく似ています。名前の色が赤に等しく、その色は赤であり、我々はその色である黄色に等しいカラーラベルの書き込みでは、唯一の彼らのラベルは赤ですので、2つだけが選択された他のを見ることができます黄色、それが選択されることはありません。
ラベルによって、API層は、これらのリソースをスクリーニングし、そしてこれらのフィルタはまた、リソースの集合で表現デフォルトkubernetesの道であることをすることができますkubernetes。
例えば、言うために、我々は今述べた配置は、それがポッドの群を表すことができる、それは抽象ポッドのセットで、ポッドラベルセレクタで表される基です。もちろん、私たちはただの話、ポッドサービスの対応セットは、ポッドの一つ以上に対応したサービスであり、それらに統一されたアクセスに、これはラベルセレクタにより選択された選択ポッドのセットを記述することであると述べました。
あなたはラベルがkubernetesのAPIの核心概念である見ることができるように、我々は次のレッスンでは、この概念をラベル付けするために導入して説明すること焦点を当て、どのようにそれを使用するのがベストでしょう。
第五には、デモを終了します
その誰もがKubernetesを試みる前に、kubernetesをしようとする私をフォローアップしますので、最後の部分は、私は、一例で終了したいと思い、私はKubernetesはサンドボックス環境をインストールし、私たちはKubernetesのマシンにインストールすることができます願っています。
このサンドボックス環境をインストールし、三つの主要なステップがあります:
- まず、仮想マシンでKubernetesを開始するには、仮想マシンをインストールする必要があります。私たちは、あなたが仮想マシン環境で実行するようにVirtualBoxを使用することをお勧め。
インストールVirtualBoxは:https://www.virtualbox.org/wiki/Downloads
- 第二に、我々は、minikubeと呼ばれる非常に興味深いプロジェクトがあるKubernetes、仮想マシンでKubernetesを起動する必要があり、ローカル環境の開始が最小にKubernetesです。
私たちは鏡の一部なので、全員の設置作業を容易にするために、より速くグーグルに依存している次のことを書いて、それと公式minikubeの主な違いは、minikubeに必要とされているアリの雲のバージョンを使用して国へのアクセスをお勧めしますminikube。
インストールMiniKube(中国語版):https://yq.aliyun.com/articles/221687
- 最後に、VirtualBoxのとminikubeをインストールした後、あなたは、次のコマンドでminikubeに開始することができます。
スタートコマンド:-vmドライバのVirtualBoxを起動しminikube
私たちがいないMacシステム、他のオペレーティングシステムである場合に起こることは、他のオペレーティングシステムにインストールminikubeサンドボックス環境を参照するには、以下のリンクをご覧ください。
https://kubernetes.io/docs/tasks/tools/install-minikube/
我々はインストールすると、私は3つのことを行うために、あなたと一緒に例をやります。
- nginxの展開を提出します。
適用kubectl -f https://k8s.io/examples/application/deployment.yaml
- nginxの展開をアップグレードします。
適用kubectl -f https://k8s.io/examples/application/deployment-update.yaml
- 拡張nginxの展開。
適用kubectl -f https://k8s.io/examples/application/deployment-update.yaml
最初のステップは、私たちはnginxのの展開を提出し、その後、この展開は、バージョンアップを行うために、それはまた、中央のポッドのバージョンを変更することです。最後に、私たちはnginxの拡張を実施しようとする、ストレッチのレベルと、誰もがこれら三つがそれを操作しようとする私と一緒に来てみましょう。
まず、我々はminikubeの状態を見て、あなたはkubeletマスターとkubectlが設定されて見ることができます。
次に、我々は、クラスタの状態のこの抜粋でkubectl外観を使用し、マスター・ノードはすでにステータスが実行されて見ることができます:
私たちは、今のは何このクラスタの展開リソースを参照してくださいしてみましょう、ノードとしてこれを使用します。
我々は、このリソースの変更の意味クラスタの展開を確認するには、この時計を使用することができ、任意の展開せずにクラスタを見ることができます。
今、私たちは3つのことをやりたい:最初の操作は、展開を作成することです。図は、それは一種の展開で、APIの内容である、第一次参照、名前はnginxの展開ですが、それは、図2のレプリカの数を持っている、それがバージョン1.7.9ミラーリングされていることです。
私たちは、展開の実際の操作を実行するためにcommndに以下または戻りkubectl。私たちは、簡単な操作を見ることができ、それは展開のコピーを保持手放すます。
コピーの配布数が2である、今の展開の状態であるかを説明することができ、以下の通りです。私たちが知っている前に、そこには、このような展開ではありません、そして今、私たちはこのnginxの展開を記述するために行きます。
次の図に見ることができます:nginxの展開は、生成された、それはレプリカの数である私たちが望むものである、セレクタは、それはまた、画像1.7.9のバージョンであり、我々が望むものです。また、このコントローラの展開 - コントローラのバージョンの内部はその世代の経営にもある見ることができます。
まずは、あなたがバージョン1.7.9から1.8にアップグレードするには、それ自体のイメージがあります見ることができる別のファイルのYAML展開update.yamlをダウンロードし、展開のバージョンをアップグレードするために行ってみましょう。
その後、我々はこの新しい展開更新YAMLファイルを再適用します。
最後に、最新の値がすべてのコンテナは、すべての最新バージョンであることを意味し、0〜2から変更されています、画面の反対側に配備をアップグレードするために業務の一部を示す、見ることができますポッドは最新バージョンです。我々はまた、あなたが本当に1.8に更新され、この画像の1.7.9バージョンで見ることができ、更新されているすべてのポッドのdiscribe特定のバージョンではないものを見ることができます。
最後に、我々はまた、新しいコントローラは、コントローラは、全体の展開とポッドの状態を維持し、いくつかの操作を行っている見ることができます。
最後に、私たちは展開水平展開をどうするかを実証し、別のファイルの展開-scale.yamlをダウンロードYAML、レプリカの数が4で2そこから変更されました。
私たちは、展開規模な操作を実行するとkubectlと、ウィンドウの先頭に戻るには、ポッドにコンテナから、それは別のウィンドウで見ることができ、その数2をこの新しい展開scale.yamlファイルを適用するには4。私たちはもう一度、現在のクラスタの展開の状況についてdescrib、あなたはそれのレプリカの数が2から4に変更さ見ることができ、またコントローラは、いくつかの新しい操作、成功したアップスケールしてきた見ることができます。
最後に、私たちはただ削除する展開を作成した削除操作を使用してみましょう。kubectl削除展開我々が今日、私たちのすべてを、それを削除し、完了したら、ちょうど私たち自身のデプロイメント名です。
私たちは再び、この展開を行くために取得、それはこのクラスタは、クリーンな状態の先頭に戻ってきた、このリソースがもう存在しない表示されません。
これは、このレッスンのすべての内容の上にある、我々は中心的な概念のkubernetesに焦点を当て、アーキテクチャ設計をkubernetes、私はあなたがこのレッスンで何かを得ることを願って、私はあなたが教室で他のコンテンツのネイティブクラウド技術に注意を払うことを願って見ていただきありがとうございます!
このセクションでは、要約したもの
- Kubernetesは、弾力性とアプリケーションの配備管理アプリケーション、コンテナに基づいているアプリケーションの責任である自動化されたコンテナのオーケストレーションプラットフォームです。
- Kubernetesアーキテクチャは、一般的なサーバ - クライアントアーキテクチャおよびレイヤアーキテクチャです。