アプリケーションのスケジューリングと管理のK8S |スクラッチK8Sから開始

著者|張アリババ上級技術専門家

まず、メタ情報リソース

1. Kubernetesリソースオブジェクト

スペック、二つの部分の状況を含む:私たちは、Kubernetesのリソースオブジェクトを知っています。前記所望の状態を説明するための仕様部は、ステータスセクションが観察された状態を説明するために使用されます。

今日、我々は別の部分K8S、そのメタデータセクションをご紹介します。このセクションでは、リソースタグを識別するために含まれていますリソースを記述するために注釈付きラベルを、注釈、OwnerReferenceは、複数のリソース間の関係を記述するために使用されます。これらのメタデータは、K8S操作で非常に重要な役割を果たしています。

2.ラベル

[リソース]タブ - 第1のメタデータは、最も重要なメタデータです。リソースタイプキーを有する識別タグ:メタデータの値は、以下に示すように、いくつかの一般的なラベルを示します。

最初の3つのラベルがそれぞれリリースされ、対応するアプリケーション環境、成熟度やアプリケーションのバージョンを識別し、ポッドオブジェクトで遊んでいました。タグが見ることができるアプリケーション例からは、名前のタグがタグ付けシステムやツールを記述するために、ドメイン名のプレフィックスが含まれ、最後のラベルには、ドメイン名が識別文字列のベータ版を高め、まだ前に、Nodeオブジェクトを打ちます。

資源の画面とラベルの組み合わせに使用される主なリソースは、あなたが選択するSQLに似たクエリを使用することができ、他の関連するリソースをラベルに従って。

ファイル


3.セレクター

最も一般的なタイプのセレクタは、同じセレクタです。簡単な例を使ってみましょう:

フロントラベルは、ポッド左側の列を一致させることができ、同じタイプセレクタは、より等しい等しい複数の条件を含むことができる。システムは、4つのポッドを持っていることを、PODは、各レベルおよび環境ラベルのマーキングシステムを有していると仮定し、我々は、ネクタイを採用しました条件間の論理的な関係「と」です。

前述の例では、タイ=フロントで、Envの= DEVのセレクタは、我々はすべてのタイ=フロントをフィルタリングすることができ、およびEnv = DEVのポッドは、マップポッドの左上にあります。別のタイプのセレクタセレクタは、例えば、全てのセレクタスクリーニングテスト環境またはグレーポッドで、設定されています。

セットの動作に加えて、そのような(前後)notinタイなどの集合演算、notin、スクリーニングが前部の全てを結ぶしない、バックポッドはないであろう。さらに、スクリーニングはlableの存在かどうかに基づくことができる、例えば:リリースポッドとセレクタ放出は、すべてのタグ付きをフィルタリングします。タイプと設定等しいセレクタタイプは、また、「AND「同じ関係が論理的に識別するに接続」」を使用することができます。

ファイル

4.注釈

もう一つの重要なメタデータには、次のとおりです。注釈。リソースを保存するために使用される一般的に非指定情報システム又はツールは、資源/の拡張仕様の状態を記述するために使用することができ、ここで、いくつかの例に注釈:

最初の例は、証明書IDアリクラウドストレージの負荷、私たちは、注釈が同じ接頭辞のドメイン名を持つことができ、ラベルはまた、バージョン情報を含むことができます見ることができます。第二のアノテーションストレージの構成情報nginxのアクセスレイヤは、我々はこのラベルに特殊文字で表示されていない「」注釈には、見ることができます。リソース操作コマンドkubectlを適用した後、第三の一般的な注釈は注釈値が構造化されたデータであり、見ることができ、実際kubectl動作上のリソースのJSON記述標識JSON文字列です。

ファイル

5. Ownereference

最後はOwnereferenceメタデータと呼ばれています。いわゆる所有者、一般的に、ポッド収集、そこさらにreplicaSet、statefulsetとしてコレクションクラスを、リソースを参照、これは後続の過程で述べます。

リソースのコントローラのコレクションは、対応するホームリソースを作成します。たとえば、次の操作ポッドで作成さらにreplicaSetコントローラ、ユーザが容易にリソースを作成するためにオブジェクトを見つけることができるようにOwnereferenceポッドポッドは加えて、カスケード削除の効果を達成するために使用することができ、さらにreplicaSet、Ownereferenceの作成を指すであろう作成。** **

第二に、操作およびデモンストレーション

ここでは、ACKにkubectlコマンドで接続され、すでにK8Sクラスタを作成し、その後、メタデータK8Sオブジェクトを表示および変更する方法をお見せ、メジャーレーベルポッド、およびノー​​ト、ならびに対応するOwnerferenceです。

まず、現在のクラスタ構成を見てみましょう。

1.ポッドを確認し、今誰ポッド。

  • ポッドを取得kubectl

2.次に、ポッドを作成し、YAMLの事前準備されたポッドを使用します。

  • Fのpod1.yamlを適用kubectl
  • Fのpod2.yamlを適用kubectl

3.今、ポッドプレイタグを見て、--show-ラベルは、私たちは、あなたがラベル・デプロイメント環境とのレベルでマークされている両方のポッドを見ることができます。このオプションを使用します。

  • kubectl GETポッド-show-ラベル

4.我々はまた、特定のリソース情報を別の方法を見ることができます。まず、第1のビューnginx1ポッドのメッセージ、出力-o YAMLの方法は、lablesフィールドを含むポッドのメタデータを参照することができ、2 Lableがあります。

  • kubectl GETポッドnginx1 -o YAML | もっと少なく

5.次に、既存のlableポッドを変更する方法を、考えますか?私たちは、テスト環境に開発環境から、デプロイメント環境に入れ、その後、成功することができないかを確認するために、テストの価値と相まって環境に、ポッドの名前を指定します。ここでは、エラーを報告し、あなたはそれが実際にこのラベルは既に値を持っていると言うことがわかります。

  • kubectlラベルポッドはENV =テストをnginx1

6.あなたがそれを上書きしたい場合は、追加のオプションに加えてカバーを取得します。それを追加した後、我々は成功したマーキングを見ることができるはずです。

  • kubectlラベルポッドはENV =テスト-overwriteをnginx1

7.さんは、今の状況では、あなたが実際にデプロイメント環境のテストラベルを追加しましたnginx1を見ることができ、すべての最初のlableセットのクラスタを、見てみましょう。

  • kubectl GETポッド-show-ラベル

ラベルを削除ポッドにしたい場合は8、ラベルはまた、等号の後のenvを同じ操作で遊んではなく、。唯一、マイナスKによって変更ラベル取り除か上映の等号、続いていないプラスラベル名:V。

  • kubectlラベルポッドnginxのtie-

9.あなたは完全に成功している標準に、ラベルを見ることができます。

  • kubectl GETポッド-show-ラベル

ファイル

10.ラベル構成の次の値を見て、これは確か=正面ラベルnginx1ポッド少なくとも一つのタイを見ることができます。このタブではポッドしたら、ラベルセレクターと一致する方法を見てすることができますか?最初のラベルのセレクタを指定した時間を実行するために指定され、最初に等しいタイプの-lオプションを使用してフィルタリングするためのラベルを試してみてください、私たちは、ポッド・デプロイメント環境を指定するテストに等しい、我々はその画面を見ることができます1;

  • ENV =テスト-l kubectl GETポッド-show-ラベル

11.等しい複数の指定した条件が必要であり、実際にはこれが関係あるに等しいが、再ENV devの言った場合、私たちは実際にポッドを取得するために失敗した場合は、

  • ENV =テスト、ENV = DEV -l kubectl GETポッド-show-ラベル

12.次に、そのENV = DEVが、タイ=正面場合、我々は、すなわちnginx2第二ポッドに一致することが可能です。

  • kubectl GETポッド-show-ラベルは=フロントENV = DEV、ネクタイを-l

13.我々はまた、フィルタリングするラベルセレクタのセットタイプを使用する方法を再試行することができます。我々はすべてのデプロイメント環境にマッチさせたいこの時間は、テストまたはDEVで引用符を追加し、括弧内のすべてのデプロイメント環境のセットを指定するので、ここで、ポッドです。ポッド2がスクリーニングさを作成することができます。

  • -l kubectl GETポッド-show-ラベル '(DEV、テスト)中のenv'

マーキングが同じ操作ですが、注釈コマンドにlabelコマンドで14.私たちは、それにポッドにコメントを増やす方法を見てみてください。それから、指定されたタイプと、対応する名前として。ラベルの後ろにKと結合されていません。vのではなく、kの注釈を追加します。v。ここでは、カンマができ、スペースを追加し、例えば、任意の文字列を指定することができます。

  • ポッドに注釈を付けるkubectl nginx1私-注釈は=「私の注釈、OK」

15.それでは、ポッドのメタデータのいくつかを見てみましょう、ここで我々は内部ポッドのメタデータ注釈を見ることができ、これは注釈を私・アノテーションです。

  • kubectl GETポッドnging1 -O YAML | レス

その後、我々はここで見ることができ、実際には、kubectlツールはまた、JSON文字列で注釈を追加するとき、kubectlが適用されています。

ファイル

16.その後、我々はポッドOwnereferenceが出ている確認する方法を紹介します。さらにreplicaSetオブジェクトを作成することにより、ポッドを作成するには:元ポッドポッドは直接、作成する方法については、この時間は、リソースを作成するには、この方法によって作成されます。まず、さらにreplicaSetオブジェクトを作成し、このオブジェクトは、特定の外観をさらにreplicaSetすることができます。

  • kubectlが適用されます-f rs.yaml
  • YAML -o kubectl GET replicasetsのnginx-replicasets |レス

ファイル

17.私たちは、一致するように、このラベルの製品である生産環境を照合することによって2ポッド、セレクタ・デプロイメント環境を作成します言及し、内部のスペックこのさらにreplicaSet内部を見ることができます。だから我々は今の状況ポッドのクラスタを見ることができます。

  • ポッドを取得kubectl

ファイル

さらに2つのポッドは、これらの2つのポッド詳しく見て見つける18.'ll、あなたはさらにreplicaSetは、ポッドは、それが名前と呼ばれるreplicasetsタイプを指すOwnereference、そしてOwnereferenceを、持っているという特徴を持っているの外に作成され見ることができますnginxの-replicasets。

  • YAML -o kubectl GETポッドのnginx-replicasets-rhd68 | もっと少なく

ファイル

第三に、コントローラモード

図1に示すように、制御周期

制御されたモデルは、制御ループの中核概念です。コントローラ、システムが制御され、及びセンサシステムを含む制御サイクルで観察することができる、3つの論理コンポーネント。

当然のことながら、これらの論理コンポーネントはれるリソースを制御し、外部リソースの仕様を変更し、コントローラは、リソース仕様ステータスを比較し、それにより、差分を算出し、最終的にシステムが制御動作を行うかを決定するために使用される差分、ように制御動作によって、ありますシステムが新しい出力センサとリソースステータスレポートフォームを生成するシステムが最終状態仕様を表すに接近し続けるように、コントローラの様々なコンポーネントは、独立して動作します。

ファイル

図2に示すように、センサー

センサ論​​理制御周期は、主反射鏡、フォーマ、インデクサ3つの構成要素から構成される。

リストウォッチK8Sサーバを介してデータリソースを取得するためのリフレクター。リストは、コントローラとウォッチの場合に使用され、システムリソースの更新の全額を中断し、再起動、および複数のリストの間で増分更新リソースをご覧ください。リフレクター新しいリソースデータを取得した後、デルタはキューになりますリソースオブジェクトそのものとデルタのイベントレコードのタイプを含むリソースオブジェクト情報を詰め、デルタキューは、キュー内の同じオブジェクトが1つのレコードのみ、再リフレクターウォッチリストを避けるために、重複レコードを生成するようにすることを保証することができます。

インフォーマアセンブリは、連続して、キャッシュ内のインデクサリソースレコードは、キャッシュのデフォルト設定は、名前空間のリソースインデックスを行うために使用されるように、インデクサに、記録デルタデルタキューから、リソースオブジェクトを排出し、コントローラとすることができますコントローラのマネージャー以上の共有。その後、このイベントコールバック関数のイベントへ

ファイル

制御ループ・コントローラ・コンポーネントは、主にイベントハンドラとワーカー組成により、イベントハンドラ各追加のリソース、更新間関係イベントを削除し、ロジックコントローラによる治療の必要性を決定するであろう。イベントを処理する必要がある、イベントが名前空間には、リソース名に関連付けられているとワークキューを詰め、プールでワーカー、その後の作業員によって処理され、より多くのを避けるために、重いものを格納する作業キューます同じリソースのWokerハンドリング。

リソースオブジェクトに対処する労働者は、一般的にプロセスがするときワーカー、通常の状況下で、意志のリソースを失敗した場合、更新リソースオブジェクト、または他の外部サービスの呼び出しを作成したりするために、最新のリソースデータの名前を持つリソースを回復する必要があります作業キューに再参加の名前、その利便後に再試行してください。

図3に示すように、制御サイクルの例 - 拡張

制御サイクルの動作原理を説明するために簡単な例を与えるために。

さらにreplicaSetステートレスアプリケーションリソース容量スケーリング挙動を記述するために使用される、アプリケーションのさらにreplicaSet用のcontroler数がさらにreplicaSetリソースを監視することによって、所望の状態を維持するために、さらにreplicaSetポッドは、レプリカを、セレクタを介して関連する一致するさらにreplicaSet RSAここで考えられていますこれは、シーンに2から3に変更されました。

ファイル

まず、リフレクターはさらにreplicaSetポッドと2つのリソースを変更するために見ますと、なぜ我々は、変更ポッドリソースは後述する監視します。発見さらにreplicaSetを変更した後、オブジェクトはRSAに挿入され、更新のタイプは、デルタキューに記録されています。

一方では情報提供の新しいさらにreplicaSetはインデックスとしてキャッシュ、および名前空間NSAを更新します。一方、コールバックコールの更新、コントローラが見つからさらにreplicaSet文字列NSA / RSA文字列を変更しますさらにreplicaSet労働者は、NSA / RSAに作業キューから取り出した後、作業キューにジョブキューを急落この文字列のキー、および最新のデータをさらにreplicaSetにキャッシュから取られました。

値にスペックの状態でさらにreplicaSetを比較することにより、労働者や拡張のため、このさらにreplicaSetの必要性を発見したが、その労働者はポッド、OwnereferenceさらにreplicaSet RSAにおけるポッドの向きを作成してさらにreplicaSet。

ファイル


その後、コールバックさらにreplicaSetコントローラを追加しますと呼ばれる一方で、インデクサによってキャッシュに追加デルタ型DETAレコード、一方では新しいポッドのレコードストアを追加への参加を、キュー内のポッドリフレクターウォッチイベントに追加さらにreplicaSet名前空間を備えた対応さらにreplicaSetポッドownerReferencesをチェックしていたコールバック関数、および文字列を追加し、作業キューに突入。

新さらにreplicaSetレコードにキャッシュから取られた新しい作業項目を、取得した後WokerのさらにreplicaSet、それはポッドを作成し、すべてを持って、状態が最新でないさらにreplicaSetので、それは、すべての創造の数ポッドは最新ではありません。したがって、この時点でさらにreplicaSetの更新状況はスペックとステータス合意することができます。

ファイル

第四に、コントローラモードの概要

1つの2 APIの設計手法

依存宣言型コントローラモードのAPIをKubernetes。APIの別の一般的なタイプは不可欠APIです。なぜ、全体のAPI制御、それを設計するというよりも、不可欠、宣言型のAPIを使用してKubernetes?

まず、対話的な行動上の2つの異なるAPIを比較します。生活の中で、親と子供のコミュニケーションの間の相互作用の共通不可欠、子どもたちは目的意識がないため、両親の期待を理解することができない、両親はしばしばいくつかのコマンドを通じて、彼らにいくつかの明示的なアクションを教える、例えば:のように寝る、食べますコマンド。私たちは、コンテナシステムを配置し、明確なAPIを送信することが不可欠で行うために、オペレーティング・システムを介してです。

一般的な宣言型の相互作用は、従業員のためのコミュニケーションのボスです。雇用者は、一般的なものではない明確な従業員として、自分自身を動作させるために、実際の上司であってもよいし、自らの従業員で、非常に明確な決定を与えることはありません。したがって、定量化可能なビジネス目標の方法を設定することで、従業員の上司は自分のイニシアチブに再生します。例えば、所有者は、製品の市場シェアは80%に達したが、具体的な動作の詳細を行い、これを達成するために市場シェアを示すものではありませんが必要になります。

同様に、コンテナの配置システムでは、3つにコピーの数を確保するために、既存のポッドポッドを消去または削除する拡張せず、維持するために、3枚のコピーに応用例の数を実行することができます。

ファイル

2、不可欠APIの問題

違いを理解するには、2つの対話型のAPIが完了したら、問題が不可欠APIを分析することができます。

  • APIは、最大の問題は、エラーが取り扱うことであるコマンド。

大規模な分散システムでは、エラーがユビキタスです。コマンドは、それが応答しない発行されると、呼び出し側は専用モードを再試行を繰り返してエラーを回復しようとしたが、大きな問題につながる可能性がブラインドを再試行することができます。

元の順序は、バックグラウンドが実際に実行を完了し、その後マルチリトライコマンド操作の実行を再試行したと仮定すると。再試行の問題を回避するために、システムが頻繁に実行するコマンド何を記録するために、コマンドを実行する前に必要があり、他のシーンに再起動し、実行するコマンドをやり直し、だけでなく、実装プロセスでは、また、我々はより多くを考慮する必要があります一連のコマンド、関係など、いくつかの複雑なロジックの状況をカバーします。

  • 実際には、多くの不可欠の対話型システムは、多くの場合、アウトコマンド処理時間を修正する再試行に使用される背景検査システム、およびデータの不整合によって引き起こされるいくつかのシーンを行います。

ロジック検査や日常業務ロジックは、オペレーショナル・リスクの多くで、エラー処理に十分な厳格ではない、テストでカバーするのに十分な頻度ではない、同じではありませんので、しかし、それほど頻繁に手動検査システムの多くは、トリガされます。

  • 最後に、複数の同時アクセスを処理し、問題に非常になりやすい不可欠API。

操作エラーが発生し、その上に、リソース要求の複数の同時操作がある場合、再試行する必要があります。そして、最終的に有効になり、確認することは困難である、保証はありません。多くのコマンド体系は、このように有効に最後の行動の予測が、ロックの振る舞いをシステム全体を確保し、オペレーティングシステムがロックされる前に実施される傾向があり、システム全体の効率を遅くします。

  • これとは対照的に、宣言型APIシステムは現在、自然のシステムと、最終的な状態を記録しました。

追加の運用データがありません。また、理由は冪等の状態を、動作がいつでも繰り返すことができます。システムが稼働している宣言的な方法では、リソースの通常の動作状態には、追加の検査システムの開発、システムの動作ロジックはまた、日常の操作でテストしないと焼きすることができ、実際に検査され、その全体の動作安定性を保証することができます。

最終状態のリソースがクリアされているので、最後に、我々は状態に複数の変更をマージすることができます。あなたは、複数の関係者への同時アクセスをサポートするために、ロックする必要はありません。

ファイル

図3に示すように、制御モードの概要

最後に、我々は要約します:

コントローラモード1.Kubernetesは、宣言型のAPIが駆動され、採用さ。正確には、駆動Kubernetesリソースオブジェクトの変更に基づいています。
2.Kubernetesリソースの後に、リソースの制御を懸念しています。近端状態を駆動するように構成されたコントローラ非同期制御システム;
3.このようなコントローラは自律的に動作している、そのような自動化無人システム可能;
4としてKubernetesコントローラとリソースがより可能です定義は、拡張制御モードを容易にすることが可能です。特に、ステートフルなアプリケーションのための、私たちが多いのカスタムリソースコントローラとにより、操作やメンテナンス作業を自動化する方法。これは、フォローアップは、シーンのオペレータを紹介しますです。

ファイル


本論文では、要約したもの

ここでは、簡単にこの記事の主な内容を要約したものです。

  • メタデータ部分は、リソースを識別するために使用されるタグを含むリソース・オブジェクト、Kubernetes:リソースを記述するために注釈付きラベルを、注釈、OwnerReferenceは、複数のリソース間の関係を記述するために使用されます。これらのメタデータは、K8S操作で非常に重要な役割を果たしています。
  • 制御型モード制御サイクルの中核概念です。
  • API設計方法の二種類:宣言型と命令型APIのAPI、使用Kubernetesコントローラモデル、宣言APIにより駆動されます。

アリババクラウドネイティブマイクロチャネルパブリック番号(ID:Alicloudnative)マイクロサービス、サーバレス、コンテナ、サービスメッシュ及び他の技術分野に焦点を当て、クラウドネイティブで人気の技術動向を中心に、クラウドネイティブの大規模な着陸の練習、ほとんどがクラウドネイティブ開発を理解してください公共の番号。

おすすめ

転載: www.cnblogs.com/alisystemsoftware/p/11555895.html
おすすめ