演習 - マイクロサービス コンテナーを Kubernetes にデプロイする

完了

Kubernetes がコンテナーを管理して実行します。 Kubernetes に何をさせたいかを YAML ファイルで記述します。 この演習では、Kubernetes で バックエンド サービスをデプロイして実行できるように、ファイルを作成する手順について説明します。

重要

続行する前に、Kubernetes 実装がインストールされていることを確認する必要があります。 コードスペースで実行されている k3d 実装を使用します。 この実装をインストールしてラボを開始します。

Kubernetes ツールと実装をインストールする

kubectl ツールと k3d Kubernetes 実装の両方をインストールする必要があります。

  1. コードスペースで、[ ターミナル ] タブに切り替え、次のコマンドを実行して前提条件をインストールします。

    sudo apt-get update
    sudo apt-get install -y apt-transport-https ca-certificates curl
    
  2. 次に、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 コマンドを個別に実行します。

  3. 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
    
  4. これで、 kubectl ツールをインストールできます。

    sudo apt-get update
    sudo apt-get install -y kubectl
    
  5. 最後に、Kubernetes の k3d 実装をインストールし、クラスターを作成します。

    curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
    k3d cluster create devcluster --config k3d.yml
    

バックエンド サービスのデプロイ ファイルを作成する

YAML ファイルを使用して、Kubernetes へのコンテナーのデプロイを管理するファイルを作成できます。 バックエンド サービスをデプロイするファイルを作成しましょう。

  1. backend-deploy.ymlという名前のコードスペースの donet-kubernetes フォルダーに新しいファイル 作成します。

  2. 次のテキストをファイルにコピーして保存します。

    ---
    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
    
  3. プレースホルダー [YOUR DOCKER USER NAME] を実際の Docker ユーザー名に置き換えます。

このファイルは、いくつかのことを行います。

最初の部分では、Kubernetes にデプロイするコンテナーのデプロイ 仕様を定義します。 1 つのレプリカ、コンテナー イメージを検索する場所、コンテナーで開くポートを指定し、いくつかの環境変数を設定します。 この最初の部分では、コンテナーと仕様を参照するために使用できるラベルと名前も定義します。

次に、2 番目の部分では、コンテナーが Kubernetes NodePort サービスとして実行されることを定義します。 このモジュールでは、NodePorts のすべての詳細を理解する必要はありません。 ただし、クラスターの外部からサービスをテストできるように、この種類のサービスは外部 IP アドレスを公開していることを知っている必要があります。

バックエンド マイクロサービスをデプロイして実行する

次に、マイクロサービスをデプロイして実行しましょう。

  1. [ターミナル] タブで、次のコマンドを実行します。

    kubectl apply -f backend-deploy.yml
    

    このコマンドは、作成したファイルを実行するように Kubernetes に指示しています。 Docker Hub からイメージをダウンロードし、コンテナーを作成します。

  2. kubectl apply コマンドはすぐに戻ります。 ただし、コンテナーの作成には時間がかかる場合があります。 進行状況を表示するには、次のコードを使用します。

    kubectl get pods
    

    結果の出力では、 productsbackend を含む行の後に 、NAME 列の下にランダムな文字の文字列が続きます。 すべてが準備できたら、READY 列の下に1/1があり、STATUS 列の下にRunningがあります。

  3. サービスをテストするには、バックエンド ポートのローカル アドレスの近くにある [ポート] タブに切り替えて、地球アイコンを選択します。 ブラウザーで、そのアドレスに新しいタブが開きます。

  4. 一部の製品に対してクエリを実行するには、 アドレスを /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"
        },
        ...
    

デプロイ ファイルを作成してフロントエンド サービスを実行する

バックエンド サービスと同様に、フロントエンド用のデプロイ ファイルも必要です。

  1. frontend-deploy.ymlという名前の donet-kubernetes フォルダーに新しいファイル作成します

  2. 以下のコードをファイルに貼り付けます。

    ---
    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
    
  3. プレースホルダー [YOUR DOCKER USERNAME] を実際の Docker ユーザー名に置き換えます。

    このファイルは、バックエンド マイクロサービス用に作成したファイルに似ています。 次の 2 つの違いがあります。

    • デプロイの spec.template.spec.containers.image 値で実行する別のコンテナーを指定しています。
    • spec.template.spec.containers.env セクションの下に新しい環境変数があります。 ネットエンド アプリケーションのコードはバックエンドを呼び出しますが、完全修飾ドメイン名 (FQDN) を指定していないため、バックエンド マイクロサービスの IP アドレスがわからないため、metadata.nameDeployment ノードで指定した名前を使用します。 Kubernetes が残りの処理を行います。
  4. 次のコマンドを使用して、コンテナーを Kubernetes にデプロイします。

    kubectl apply -f frontend-deploy.yml
    

    ここでも、 kubectl get pods を使用してデプロイの状態を確認できます。 storefrontendの行にSTATUS列の下にRunningと表示されたら、すべてが準備完了です。

  5. フロントエンド サービスをテストするには、[ ポート ] タブに切り替え、 フロントエンド ポートのローカル アドレスの右側にある地球アイコンを選択します。 ブラウザーにホームページが表示されます。

  6. [ 製品] を選択します。 カタログには Contoso の商品が示されます。

    eSHopLite 製品ページのスクリーンショット。

この演習では、Kubernetes 内でコンテナーを実行する方法を正確に記述したデプロイ ファイルを作成しました。 その後、Kubernetes に Docker Hub からイメージをダウンロードし、コンテナーを起動しました。