今日は、[Kubernetes] DaemonSet の詳細な説明を共有して、履歴書を充実させ、面接のレベルを向上させ、話すトピックをいくつか用意し、数秒で面接の専門家に変えていきます。 BATは夢ではありません。 3 分で次のことが学べます:
1. DaemonSet の紹介1. DaemonSet が必要な理由は何ですか?Kubernetes クラスターでは、通常、ノードの健全性の監視やログの収集などを行うために、各ノードでデーモンを実行する必要があります。これらのデーモンは通常、Kubernetes Cluster Autoscaler や Kubernetes DNS などのシステムレベルデーモンと呼ばれます。ポッドは、Deployment または StatefulSet を使用して作成できます。これらのポッドは、任意のノードで実行するようにスケジュールできます。ただし、場合によっては、各ノードで Pod レプリカ バージョンが実行されていることを確認する必要があり、そのためには DaemonSet を使用する必要があります。 2. DaemonSet の紹介DaemonSet は、Kubernetes のコントローラー オブジェクトの一種で、各ノードで Pod レプリカ バージョンを実行し、各ノードに 1 つ以上の Pod レプリカが存在することを保証するために使用されます。 DaemonSet コントローラーは、新しいノードが追加されたときに新しいノード上に Pod レプリカが自動的に作成され、ノードが削除されたときにノード上の Pod レプリカが自動的に削除されるようにすることができます。 3. DaemonSetと他のKubernetesオブジェクトの違いDaemonSet が実行されると、クラスター内の各ノードに Pod レプリカが作成されますが、Deployment や StatefulSet などの他のコントローラーは、クラスター内の異なるノードで実行しようとする Pod を作成します。さらに、DaemonSet は、ノードが参加および離脱するときに Pod の作成と削除を自動的に処理し、クラスター全体の各ノードで Pod のコピーが実行されていることを保証します。クラスター サービスまたは一部の常駐メモリ サービスのデーモン コンテナーを実行するのに適しています。動的な拡張と縮小を必要とするアプリケーションのデプロイには、Deployment と StatefulSet の方が適しています。
2. DaemonSetを作成する1. kubectlコマンドを使用してDaemonSetを作成するkubectl コマンドを使用して DaemonSet を作成するには、次の手順に従います。 (1)以下のコマンドでYAMLファイルを作成します。 この例では、「example-daemonset」という名前の DaemonSet を作成し、Nginx コンテナをテンプレートとして使用しました。ここで、「app: example」というラベルが重要な役割を果たすことに注意してください。このラベルは、この DaemonSet を実行するノードを選択するために使用されるためです。 (2)以下のコマンドを使用してDaemonSetを作成します。 これにより、以前に作成した YAML ファイルを使用して DaemonSet が作成されます。次のコマンドを使用して、DaemonSet が作成されたかどうかを確認できます。 「example-daemonset」と表示される場合、DaemonSet が正常に作成されたことを意味します。 2. YAMLファイルを使用してDaemonSetを作成するYAML ファイルを使用して DaemonSet を作成するには、次の手順に従います。 (1)以下の内容のYAMLファイルを作成します。 この例では、「example-daemonset」という名前の DaemonSet を作成し、Nginx コンテナをテンプレートとして使用しました。ここで、「app: example」というラベルが重要な役割を果たすことに注意してください。このラベルは、この DaemonSet を実行するノードを選択するために使用されるためです。 (2)以下のコマンドを使用してDaemonSetを作成します。 これにより、以前に作成した YAML ファイルを使用して DaemonSet が作成されます。次のコマンドを使用して、DaemonSet が作成されたかどうかを確認できます。 「example-daemonset」と表示される場合、DaemonSet が正常に作成されたことを意味します。 3. Terraformを使用してDaemonSetを作成するTerraform を使用して DaemonSet を作成することは、Kubernetes アプリケーションのデプロイと管理を自動化する方法です。 Terraform は、インフラストラクチャを定義および管理するためのコードを記述できるインフラストラクチャ アズ コード ツールです。 Terraform を使用して DaemonSet を作成するには、次の手順を実行する必要があります。
このコードは、my-container という名前のコンテナーが含まれ、Nginx イメージを使用する my-daemonset という名前の DaemonSet を作成します。 (3)Terraformプロジェクトを初期化する:以下のコマンドを使用してTerraformプロジェクトを初期化します。 (4) Terraform プロジェクトを構成する: 次のコマンドを使用して、Terraform プロジェクトを構成します。 このコマンドは、Terraform を使用して DaemonSet を作成します。 3. DaemonSetの応用シナリオ1. ノードにシステムレベルのデーモンを導入するDaemonSet の最も一般的なアプリケーション シナリオの 1 つは、ノードにシステム レベルのデーモンを展開することです。たとえば、Kubernetes が公式に提供している 以下は、kube-proxy DaemonSet をデプロイする YAML ファイルの例です。 この YAML ファイルでは、apps/v1 API バージョンを使用して kube-proxy という名前の DaemonSet を作成します。セレクター フィールドは、この DaemonSet を実行する必要がある Pod のラベルを指定し、updateStrategy は更新戦略 (ローリング更新) を指定します。テンプレート フィールドは、コンテナ、マウントされたボリューム、コマンド パラメータなど、Pod のテンプレートを定義します。 2. ノード上で通常のコンテナを実行するKubernetes クラスターでは、通常、ログ収集エージェント、監視エージェント、セキュリティ エージェントなど、各ノードで実行する必要があるコンテナーが多数あります。DaemonSet コントローラーを使用すると、これらのコンテナーを各ノードで簡単に実行できます。 以下は、fluentd ログ収集エージェントを実行する DaemonSet の YAML ファイルの例です。 上記の YAML ファイルでは、fluentd という名前の DaemonSet を定義しました。この DaemonSet は、各ノードで fluentd という名前のコンテナを実行します。 コンテナは fluent/fluentd:v1.7-1 イメージを使用し、ホスト ノード上の /var/log ディレクトリをコンテナ内の /var/log ディレクトリにマウントします。これにより、コンテナはノード上のログ ファイルからログを収集できるようになります。 3. クラスターステータスの維持DaemonSet アプリケーションのもう 1 つの一般的なシナリオは、クラスターのステータスを維持することです。 Kubernetes クラスターには、ネットワーク プラグイン、ストレージ プラグイン、DNS プラグインなど、各ノードで実行する必要があるコントローラーが多数あります。通常、これらのコントローラーは、クラスターの状態を維持するために各ノードで実行する必要があります。 たとえば、CNI (Container Network Interface) プラグインは、Kubernetes クラスター内のコンテナーに IP アドレスとルーティング情報を割り当てる役割を担っているため、各ノードで実行する必要があります。 Kubernetes が公式に提供する CNI プラグインは、DaemonSet の形で各ノード上で実行されます。 以下は、CNI プラグインをデプロイするためのサンプル YAML ファイルです。 この YAML ファイルでは、apps/v1 API バージョンを使用して kube-flannel-ds-amd64 という名前の DaemonSet を作成します。セレクター フィールドは、この DaemonSet を実行する必要がある Pod のラベルを指定し、updateStrategy は更新戦略 (ローリング アップデート) を指定します。テンプレート フィールドは、コンテナ、マウントされたボリューム、コマンド パラメータなど、Pod のテンプレートを定義します。 この YAML ファイルは、kube-flannel という名前のコンテナを定義し、quay.io/coreos/flannel:v0.14.0 イメージを使用し、コンテナのネットワーク インターフェースを enp0s8 に設定します。コンテナは configMap から構成ファイルもマウントし、特権モードを有効にします。 4. ノード上でツールを実行するデーモン、通常のコンテナ、コントローラーに加えて、DaemonSet を使用して各ノードでツールを実行することもできます。これらのツールは通常、クラスターのステータスのデバッグ、監視、診断に使用されます。 たとえば、DaemonSet を使用して各ノードで診断ツールを実行するサンプル YAML ファイルは次のようになります。 この YAML ファイルでは、diagnostic-tool という DaemonSet を定義します。この DaemonSet は、各ノードで、diagnostic-tool という名前のコンテナを実行します。 コンテナーはカスタム Docker イメージを使用し、いくつかの診断タスクを実行する while ループを実行します。さらに、コンテナはノード上の /var/run ディレクトリをコンテナ内の /host/var/run ディレクトリにマウントして、ノード上のランタイム情報を読み取ります。 DaemonSet を使用して診断ツールを実行すると、ネットワークの問題、ストレージの問題、パフォーマンスの問題など、ノードおよびクラスター レベルの問題をすばやく特定できます。 4. DaemonSetオブジェクトの詳細な説明1. DaemonSetの構造とその各部の機能DaemonSet は、Kubernetes のコントローラー オブジェクトの一種で、各ノードで Pod レプリカ バージョンを実行し、各ノードに 1 つ以上の Pod レプリカが存在することを保証するために使用されます。 DaemonSet コントローラーは、新しいノードが追加されたときに新しいノード上に Pod レプリカが自動的に作成され、ノードが削除されたときにノード上の Pod レプリカが自動的に削除されるようにすることができます。 DaemonSet オブジェクトには、次の部分があります。
spec 部分は DaemonSet オブジェクトの最も重要な部分です。次のフィールドが含まれます。
2. DaemonSet のライフサイクルDaemonSet のライフ サイクルには、次の段階が含まれます。
3. DaemonSetセレクターセレクターは DaemonSet オブジェクトの一部であり、その DaemonSet の Pod レプリカがどのノードで実行されるかを決定するために使用されます。 Pod テンプレートのラベルまたはアノテーションを使用するか、DaemonSet オブジェクトのセレクターでラベルまたはアノテーションを指定して、セレクターを決定できます。 以下は、ラベル セレクターを使用して、この DaemonSet の Pod レプリカがどのノードで実行されるかを決定する DaemonSet YAML ファイルの例です。 この例では、nodeSelector を使用して、この DaemonSet の Pod レプリカがディスク タイプが ssd のノードでのみ実行されるように指定します。 4. DaemonSet 更新戦略更新戦略は、DaemonSet オブジェクトの Pod レプリカを更新する方法を決定します。 Kubernetes では、次の 3 つの更新戦略から選択できます。
更新戦略は、DaemonSet オブジェクトの spec フィールドで設定できます。以下は、RollingUpdate 戦略を使用する DaemonSet の例です。 この YAML ファイルでは、nginx-daemonset という名前の DaemonSet を定義します。この DaemonSet は、各ノードで nginx という名前のコンテナを実行します。 このコンテナは最新バージョンの Nginx イメージを使用します。進行中のリクエストが完了できるように、コンテナは 30 秒の猶予期間を経て終了します。 この DaemonSet オブジェクトは RollingUpdate 戦略を使用し、maxUnavailable オプションを指定します。このオプションは、更新中に使用できない Pod レプリカが最大 1 つであることを指定します。これにより、更新中に少なくとも 1 つの Pod レプリカが常に利用可能になります。 5. DaemonSet の一般的な問題と解決策1. ノード上にコンテナを作成できません(1)問題の説明DaemonSet を作成するときに、次のエラーが発生する場合があります。 このエラー メッセージは、スケジューラが特定のノードで DaemonSet Pod を実行するようにスケジュールできないことを意味します。通常、これはノードがスケジュール不可能な状態にあるためです。たとえば、「メンテナンス中」または「障害」としてマークされています。 (2)解決策これを修正するには、ノードのステータスを確認する必要があります。次のコマンドを使用してノードのステータスを確認できます。 ノードのステータスが「メンテナンス」または「失敗」の場合は、「使用可能」状態に復元する必要があります。次のコマンドを使用してノードを再スケジュールできます。 2. 更新に失敗しました(1)問題の説明DaemonSet を更新すると、次のエラーが発生する場合があります。 このエラー メッセージは、DaemonSet の更新が失敗したことを意味します。通常、これはノード障害やコンテナのクラッシュなどにより、ノード上の Pod が利用できないために発生します。 (2)解決策この問題を解決するには、ノードとポッドのステータスを確認する必要があります。次のコマンドを使用して、ノードとポッドのステータスを確認できます。 ノードまたはポッドが使用不可の状態になっている場合は、使用可能な状態に復元する必要があります。次のコマンドを使用して、ノードまたはポッドを再起動できます。 3. ネットワーク構成の問題(1)問題の説明DaemonSet を作成するときに、次のエラーが発生する場合があります。 このエラー メッセージは、Pod の同期が失敗したことを意味します。通常、これはネットワークが正しく構成されていないことが原因です。 (2)解決策この問題を解決するには、ネットワーク構成を確認する必要があります。次のコマンドを使用してネットワーク構成を確認できます。 ネットワークが正しく構成されていないことが判明した場合は、更新する必要があります。次のコマンドを使用してネットワーク構成を更新できます。 4. DaemonSetの実行状態を監視する方法Kubernetes では、DaemonSet の実行ステータスの監視は次の方法で実現できます。 (1)kubectlコマンドラインツールの使用kubectl コマンドライン ツールは、以下に示すように、DaemonSet の実行ステータスを監視するためのさまざまなコマンドを提供します。
(2)Kubernetesダッシュボードの使用Kubernetes Dashboard は、DaemonSet の実行ステータスを監視するためのユーザーフレンドリーな Web インターフェースを提供します。 Kubernetes ダッシュボードでは、すべての DaemonSet とその Pod を表示できるほか、Pod のログ出力など、各 Pod の詳細情報も表示できます。 (3)PrometheusとGrafanaの使用Prometheus と Grafana は、DaemonSet の実行状態を監視するために使用できる一般的な監視およびメトリック収集ツールです。 Prometheus はクラスターからメトリックを収集するために使用され、Grafana はこれらのメトリックを視覚化するために使用されます。視覚化されたメトリックには、DaemonSet Pod の数、ノード上の CPU 使用率、メモリ使用量が含まれます。 5. トラブルシューティングとデバッグの方法DaemonSet を使用すると、さまざまな問題が発生する可能性があります。以下に、よくある問題とその解決策をいくつか示します。 (1)ポッドは保留状態にあるDaemonSet 内の Pod が Pending 状態の場合、いくつかの理由が考えられます。
(2)ポッド起動失敗DaemonSet 内の Pod が起動に失敗する場合は、いくつかの理由が考えられます。
(3)ポッドランタイムエラーDaemonSet 内の Pod の操作中にエラーが発生した場合、いくつかの原因が考えられます。
(4)トラブルシューティングとデバッグの方法トラブルシューティングとデバッグを行うときは、次の手法を使用できます。
この記事はWeChatの公開アカウント「Nezha Programming」から転載したもので、以下のQRコードからフォローできます。この記事を転載する場合は、Nezha Programming 公式アカウントまでご連絡ください。 |
<<: 天一クラウドの「西然」が第6回デジタル中国建設サミットで「トップ10ハードコア技術」の称号を獲得
>>: Dockerコンテナのネイティブヘルスチェックメカニズムの詳細な説明
123systems の 6 つのコンピュータ ルームのすべての VPS には 50% 割引コードが...
ウェブサイトの編集はウェブサイトの魂です。編集と執筆によってもたらされる欠点をどのように標準化できる...
もう7月も下旬になりましたが、HostCat は今月素晴らしいプロモーションを行っている VPS を...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス2019年、万慈八平は大...
仮想プライベート クラウド (VPC) は少なくとも 10 年ほど前から存在していますが、使用する前...
いわゆる「タイトル党」とは、「さまざまなマーケティング目的を達成するために、あらゆる種類の独創的なタ...
Baidu 百科事典は、標準化されたエントリを基本単位とする、オープンで無料のオンライン百科事典です...
私たちは知らないうちに愛国マーケティングの罠や、いわゆるテンセントアバターカラフルマーケティングの罠...
昨日、第11期全国人民代表大会常務委員会第30回会議で投票が行われ、ネットワーク情報の保護強化に関す...
急速に進化する今日のデジタル環境において、スケーラビリティ、柔軟性、コスト効率の向上を目指す企業にと...
日中、グループ内でVALvpsについてみんなが話しているのを見ました。個人的に、この会社はちょっと信...
この記事は、KubeCon 2020 Cloud Native + Open Source Virt...
ここ数か月、Baidu は中国の SEO 実践者全員を大いに苦しめてきました。多くの人が「SEO は...
インターネット企業は、ネットユーザーが毎日利用し、そのサービスにはより高い広報能力が求められる百度、...
月収10万元の起業の夢を実現するミニプログラム起業支援プラン青菜鳥のウェブマスターである老旭がこの悲...