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

完了

Kubernetes によってコンテナーは自動実行されます。 YAML ファイルを介して Kubernetes に実行させる内容を記述します。 この演習では、Kubernetes 上でバックエンド サービスをデプロイして実行できるように、ファイルの作成手順について説明します。

重要

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

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

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

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

    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
    

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

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

  1. codespace の donet-kubernetes フォルダーに、backend-deploy.yml という名前で新しいファイルを作成します。

  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
    

    結果の出力の NAME 列には、productsbackend 行に続き、ランダムな文字列が表示されます。 準備が完了すると、READY 列に 1/1STATUS 列に 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. donet-kubernetes フォルダーに、frontend-deploy.yml という名前で新しいファイルを作成します

  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 の下に新しい環境変数があります。 storefrontend アプリケーションのコードによってバックエンドが呼び出されますが、完全修飾ドメイン名 (FQDN) が指定してされておらず、バックエンド マイクロサービスの IP アドレスもわからないので、Deploymentmetadata.name ノードで指定した名前を使います。 残りの処理は Kubernetes によって実行されます。
  4. 次のコマンドを使用してコンテナーを Kubernetes にデプロイします。

    kubectl apply -f frontend-deploy.yml
    

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

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

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

    A screenshot of the eSHopLite products page.

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