演習 - マイクロサービス コンテナーを Kubernetes にデプロイする
Kubernetes がコンテナーを管理して実行します。 Kubernetes に何をさせたいかを YAML ファイルで記述します。 この演習では、Kubernetes で バックエンド サービスをデプロイして実行できるように、ファイルを作成する手順について説明します。
重要
続行する前に、Kubernetes 実装がインストールされていることを確認する必要があります。 コードスペースで実行されている k3d 実装を使用します。 この実装をインストールしてラボを開始します。
Kubernetes ツールと実装をインストールする
kubectl ツールと k3d Kubernetes 実装の両方をインストールする必要があります。
コードスペースで、[ ターミナル ] タブに切り替え、次のコマンドを実行して前提条件をインストールします。
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl次に、Kubernetes パッケージ リポジトリの署名キーをダウンロードするには、次のコマンドを実行します。
sudo mkdir /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpgディレクトリが既に存在するというエラーが発生した場合は、
curlコマンドを個別に実行します。Kubernetes リポジトリを apt 構成に追加します。
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.listこれで、 kubectl ツールをインストールできます。
sudo apt-get update sudo apt-get install -y kubectl最後に、Kubernetes の k3d 実装をインストールし、クラスターを作成します。
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash k3d cluster create devcluster --config k3d.yml
バックエンド サービスのデプロイ ファイルを作成する
YAML ファイルを使用して、Kubernetes へのコンテナーのデプロイを管理するファイルを作成できます。 バックエンド サービスをデプロイするファイルを作成しましょう。
backend-deploy.ymlという名前のコードスペースの donet-kubernetes フォルダーに新しいファイル を作成します。
次のテキストをファイルにコピーして保存します。
--- apiVersion: apps/v1 kind: Deployment metadata: name: productsbackend spec: replicas: 1 template: metadata: labels: app: productsbackend spec: containers: - name: productsbackend image: [YOUR DOCKER USER NAME]/productservice:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 selector: matchLabels: app: productsbackend --- apiVersion: v1 kind: Service metadata: name: productsbackend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32001 selector: app: productsbackendプレースホルダー
[YOUR DOCKER USER NAME]を実際の Docker ユーザー名に置き換えます。
このファイルは、いくつかのことを行います。
最初の部分では、Kubernetes にデプロイするコンテナーのデプロイ 仕様を定義します。 1 つのレプリカ、コンテナー イメージを検索する場所、コンテナーで開くポートを指定し、いくつかの環境変数を設定します。 この最初の部分では、コンテナーと仕様を参照するために使用できるラベルと名前も定義します。
次に、2 番目の部分では、コンテナーが Kubernetes NodePort サービスとして実行されることを定義します。 このモジュールでは、NodePorts のすべての詳細を理解する必要はありません。 ただし、クラスターの外部からサービスをテストできるように、この種類のサービスは外部 IP アドレスを公開していることを知っている必要があります。
バックエンド マイクロサービスをデプロイして実行する
次に、マイクロサービスをデプロイして実行しましょう。
[ターミナル] タブで、次のコマンドを実行します。
kubectl apply -f backend-deploy.ymlこのコマンドは、作成したファイルを実行するように Kubernetes に指示しています。 Docker Hub からイメージをダウンロードし、コンテナーを作成します。
kubectl applyコマンドはすぐに戻ります。 ただし、コンテナーの作成には時間がかかる場合があります。 進行状況を表示するには、次のコードを使用します。kubectl get pods結果の出力では、 productsbackend を含む行の後に 、NAME 列の下にランダムな文字の文字列が続きます。 すべてが準備できたら、READY 列の下に1/1があり、STATUS 列の下にRunningがあります。
サービスをテストするには、バックエンド ポートのローカル アドレスの近くにある [ポート] タブに切り替えて、地球アイコンを選択します。 ブラウザーで、そのアドレスに新しいタブが開きます。
一部の製品に対してクエリを実行するには、 アドレスを /api/product に追加し、 Enter キーを押します。 いくつかの製品情報が JSON 形式で一覧表示されます。
[ { "id": 1, "name": "Solar Powered Flashlight", "description": "A fantastic product for outdoor enthusiasts", "price": 19.99, "imageUrl": "product1.png" }, { "id": 2, "name": "Hiking Poles", "description": "Ideal for camping and hiking trips", "price": 24.99, "imageUrl": "product2.png" }, { "id": 3, "name": "Outdoor Rain Jacket", "description": "This product will keep you warm and dry in all weathers", "price": 49.99, "imageUrl": "product3.png" }, ...
デプロイ ファイルを作成してフロントエンド サービスを実行する
バックエンド サービスと同様に、フロントエンド用のデプロイ ファイルも必要です。
frontend-deploy.ymlという名前の donet-kubernetes フォルダーに新しいファイルを作成します
以下のコードをファイルに貼り付けます。
--- apiVersion: apps/v1 kind: Deployment metadata: name: storefrontend spec: replicas: 1 template: metadata: labels: app: storefrontend spec: containers: - name: storefrontend image: [YOUR DOCKER USER NAME]/storeimage:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 - name: ProductEndpoint value: http://productsbackend selector: matchLabels: app: storefrontend --- apiVersion: v1 kind: Service metadata: name: storefrontend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32000 selector: app: storefrontendプレースホルダー
[YOUR DOCKER USERNAME]を実際の Docker ユーザー名に置き換えます。このファイルは、バックエンド マイクロサービス用に作成したファイルに似ています。 次の 2 つの違いがあります。
- デプロイの
spec.template.spec.containers.image値で実行する別のコンテナーを指定しています。 -
spec.template.spec.containers.envセクションの下に新しい環境変数があります。 ネットエンド アプリケーションのコードはバックエンドを呼び出しますが、完全修飾ドメイン名 (FQDN) を指定していないため、バックエンド マイクロサービスの IP アドレスがわからないため、metadata.nameのDeploymentノードで指定した名前を使用します。 Kubernetes が残りの処理を行います。
- デプロイの
次のコマンドを使用して、コンテナーを Kubernetes にデプロイします。
kubectl apply -f frontend-deploy.ymlここでも、
kubectl get podsを使用してデプロイの状態を確認できます。 storefrontendの行にSTATUS列の下にRunningと表示されたら、すべてが準備完了です。フロントエンド サービスをテストするには、[ ポート ] タブに切り替え、 フロントエンド ポートのローカル アドレスの右側にある地球アイコンを選択します。 ブラウザーにホームページが表示されます。
[ 製品] を選択します。 カタログには Contoso の商品が示されます。
この演習では、Kubernetes 内でコンテナーを実行する方法を正確に記述したデプロイ ファイルを作成しました。 その後、Kubernetes に Docker Hub からイメージをダウンロードし、コンテナーを起動しました。