演習 - マイクロサービス コンテナーを Kubernetes にデプロイする
Kubernetes によってコンテナーは自動実行されます。 YAML ファイルを介して Kubernetes に実行させる内容を記述します。 この演習では、Kubernetes 上でバックエンド サービスをデプロイして実行できるように、ファイルの作成手順について説明します。
重要
先に進む前に、Kubernetes の実装がインストールされていることを確認する必要があります。 codespace で実行されている k3d 実装を使用します。 この実装をインストールして、ラボを開始します。
Kubernetes のツールと実装をインストールする
kubectl ツールと k3d Kubernetes 実装の両方をインストールする必要があります。
codespace で、[ターミナル] タブに切り替えてから、次のコマンドを実行して前提条件をインストールします。
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
バックエンド サービス用のデプロイ ファイルを作成する
Kubernetes へのコンテナーのデプロイを管理するファイルは、YAML ファイルを使用して作成できます。 バックエンド サービスをデプロイするファイルを作成しましょう。
codespace の donet-kubernetes フォルダーに、backend-deploy.yml という名前で新しいファイルを作成します。
次のテキストをファイルにコピーし、保存します。
--- 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
結果の出力の NAME 列には、productsbackend 行に続き、ランダムな文字列が表示されます。 準備が完了すると、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" }, ...
デプロイ ファイルの作成とフロントエンド サービスの実行
バックエンド サービスと同様に、フロントエンドにもデプロイ ファイルが必要です。
donet-kubernetes フォルダーに、frontend-deploy.yml という名前で新しいファイルを作成します
以下のコードをファイルに貼り付けます。
--- 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
の下に新しい環境変数があります。 storefrontend アプリケーションのコードによってバックエンドが呼び出されますが、完全修飾ドメイン名 (FQDN) が指定してされておらず、バックエンド マイクロサービスの IP アドレスもわからないので、Deployment
のmetadata.name
ノードで指定した名前を使います。 残りの処理は Kubernetes によって実行されます。
- デプロイの
次のコマンドを使用してコンテナーを Kubernetes にデプロイします。
kubectl apply -f frontend-deploy.yml
ここでも、
kubectl get pods
を使用してデプロイの状態を確認できます。 STATUS 列で、storefrontend の行が Running と表示されれば、すべての準備は完了です。フロントエンド サービスをテストするには、[PORTS] (ポート) タブに切り替えてから、フロントエンド ポートのローカル アドレスの右側にある地球アイコンを選びます。 ブラウザーにホームページが表示されます。
[製品] を選択します。 カタログには Contoso の商品が示されます。
この演習では、Kubernetes 内でコンテナーを実行する方法を正確に記述したデプロイ ファイルを作成しました。 その後、Kubernetes で Docker Hub のイメージをダウンロードし、コンテナーを起動しました。