ホームページ  >  記事  >  ウェブフロントエンド  >  CKA フルコースデー マルチコンテナ ポッド Kubernetes - サイドカーと Init コンテナ

CKA フルコースデー マルチコンテナ ポッド Kubernetes - サイドカーと Init コンテナ

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-30 01:17:28536ブラウズ

CKA Full Course Day Multi Container Pod Kubernetes - Sidecar vs Init Container

私からのメモ

このプロジェクトでは、init コンテナやサイドカー コンテナなどの Kubernetes の概念を適用したいと考えていましたが、ただチュートリアルに従うだけにはしたくありませんでした。

私の目標は、思い出に残るものを構築することでした。

ブレーンストーミングを行った後、Get Me App を紹介します!


Get Me アプリの機能

Get Me App は、さまざまな GitHub リポジトリからコンテンツを動的に取得して表示するように設計されています。アプリケーションは Kubernetes ポッド内で実行され、2 つの主要コンポーネントで構成されます:

  1. Nginx コンテナ: これはメイン アプリケーションとして機能し、動的に取得されたコンテンツをホストします。軽量で効率的であるため、静的な Web ページを提供するのに最適です。

  2. サイドカー コンテナ: これはプライマリ nginx コンテナと並行して実行されます。ランダムに選択された GitHub ページから最新の HTML を取得することで、5 秒ごとにコンテンツを更新します。これにより、Nginx によって提供されるコンテンツが常に最新であることが保証されます。

  3. Init Container: メイン コンテナが起動する前に環境を初期化します。 DNS エントリを解決することで、Get Me App Service が利用できるかどうかを確認します。この手順により、アプリケーションが実行開始後にサービスと対話できる状態になります。続きはここで読んでください(そうしなければなりませんでした)

nginx コンテナは、更新された HTML Web ページを提供し、NodePort サービスを介してブラウザからアクセスできるようにします。


前提条件

始める前に、Kubernetes クラスターを作成するための構成ファイルがあることを確認してください。 Kind クラスターのセットアップ手順の詳細については、Kind クイック スタート ガイドを参照してください。

クラスター構成 (config.yml)

次の内容を含む config.yml という名前のファイルを作成して、Kind クラスターを定義します。

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cka-cluster  
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30001  # Change this to match the NodePort
    hostPort: 30001
    listenAddress: "0.0.0.0" 
    protocol: tcp
- role: worker  
- role: worker 

次のコマンドを実行してクラスターを作成します:

kind create cluster --name kind-cka-cluster --config config.yml

次のコマンドを使用して、新しいクラスターにコンテキストを設定します。

kubectl config use-context kind-kind-cka-cluster

ステップ 1: プロジェクト ディレクトリとファイルを作成する

まず、プロジェクトのディレクトリとファイル構造を設定します。

mkdir get-me-app
cd get-me-app
nano get-me-app.yml

ステップ 2: Kubernetes ポッド仕様を定義する

get-me-app.yml ファイルで、nginx コンテナ、コンテンツ更新用のサイドカー コンテナ、および初期データ フェッチ用の init コンテナを含む Kubernetes ポッドを定義します。

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cka-cluster  
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30001  # Change this to match the NodePort
    hostPort: 30001
    listenAddress: "0.0.0.0" 
    protocol: tcp
- role: worker  
- role: worker 

このポッド仕様の各部分の役割

  1. nginx コンテナ: これはプライマリ コンテナであり、ポート 80 でコンテンツを提供します。 volumeMount により、ポッドの workdir ボリュームで /usr/share/nginx/html ディレクトリが利用可能になります。

  2. サイドカー コンテナ (content-refresher): このコンテナは while true ループを実行し、Web ページの最新バージョンを 5 秒ごとにダウンロードします。これにより、workdir ボリューム内のコンテンツが常に最新の状態に保たれます。

  3. コンテナーの初期化 (init-myservice): これは、DNS ルックアップを継続的に実行することで get-me-app-service が使用可能になるのを待ちます。初期化中に 1 回だけ実行され、完了後に再起動されません。

  4. ボリューム: workdir ボリューム (emptyDir タイプ) はコンテナー間で共有され、init コンテナー、サイドカー、および nginx が同じコンテンツにアクセスして提供できるようにします。


ステップ 3: NodePort を使用してローカルでテストする (オプション)

ローカル マシン上のブラウザを通じてアプリにアクセスできるようにするには、ポッドのポート 80 を公開するように NodePort サービスを構成します。

このサービス定義を get-me-app-service.yml に追加します:

kind create cluster --name kind-cka-cluster --config config.yml

次のコマンドを使用してセットアップをデプロイします。

kubectl config use-context kind-kind-cka-cluster

ブラウザで http://localhost:30001 にアクセスし、github ページにアクセスしてください。 5 秒後にページを更新すると、別の github ページが表示されるはずです。


重要なポイント

このプロジェクトは、init コンテナーが共有リソースを初期化する方法と、サイドカー コンテナーがそれらのリソースをメイン アプリケーションに対してどのように更新し続けるかを理解するのに役立ちました。これは、Kubernetes でのリアルタイム データ処理を実験し、学習するための魅力的な方法です。


あなたが提供したセクションの書式設定されたコンテンツは次のとおりです:


タグとメンション

  • @piyushsachdeva
  • 8 日目: ビデオチュートリアル

終了ノート: このプロジェクトはビデオ チュートリアルの一部ではないことに注意してください。一般的なガイダンスとしてチュートリアルの概念を使用して、自分で何かを構築したいと考えていました。

以上がCKA フルコースデー マルチコンテナ ポッド Kubernetes - サイドカーと Init コンテナの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。