1概要

このリンクで/kubernetes[前の記事]では、Kubernetesについての理論的な紹介を取り上げました。

このチュートリアルでは、Spring BootアプリケーションをローカルのKubernetes環境(Minikubeとも呼ばれる)にデプロイする方法について説明します。

この記事の一部として、

  • 私たちのローカルマシンにMinikubeをインストールしてください

  • 2つのSpring Bootサービスからなるサンプルアプリケーションを開発する

  • ミニキューブを使用して1ノードクラスタでアプリケーションを設定する

  • 設定ファイルを使ってアプリケーションをデプロイする


2ミニキューブをインストールする

Minikubeのインストールは基本的に3つのステップから成ります。

ハイパーバイザ(VirtualBoxなど)、CLI

kubectl

、およびMinikube自体をインストールする。


公式文書

には、各ステップの詳細な説明と、一般的なすべてのオペレーティングシステムの詳細な説明があります。

インストールが完了したら、Minikubeを起動し、VirtualBoxをHypervisorに設定し、

minikube

というクラスターと通信するように

kubectl

を設定します。

$> minikube start
$> minikube config set vm-driver virtualbox
$> kubectl config use-context minikube

その後、

kubectl

がクラスタと正しく通信していることを確認できます。

$> kubectl cluster-info

出力は次のようになります。

Kubernetes master is running at https://192.168.99.100:8443
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

この段階では、レスポンス内のIPアドレスを閉じます(この場合は

192.168.99.100

)。後でそれを

NodeIP

と呼びます。これはクラスタの外部からリソースを呼び出すために必要です。 g。私たちのブラウザから。

最後に、私達は私達のクラスターの状態を調べることができます。

$> minikube dashboard

このコマンドはデフォルトのブラウザでサイトを開き、クラスタの状態に関する広範な概要を提供します。


4デモアプリケーション

これでクラスタが実行され、デプロイの準備が整ったので、デモアプリケーションが必要です。

この目的のために、2つのSpring Bootサービスからなるシンプルな「Hello world」アプリケーションを作成します。これらのサービスを

frontend



backend

と呼びます。

バックエンドはポート8080で1つのRESTエンドポイントを提供し、そのホスト名を含む

String

を返します。フロントエンドはポート8081で利用可能です、それは単にバックエンドエンドポイントを呼び出し、その応答を返します。

その後、各アプリからDockerイメージを作成する必要があります。そのために必要なファイルはすべてhttps://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-kubernetes[on GitHub]からも入手できます。

Dockerイメージを構築する方法の詳細な説明についてはリンクを見てください:/dockerizing-spring-boot-application#Dockerize[Dockerizing a Spring Bootアプリケーション]

  • MinikubeクラスタのDockerホスト上でビルドプロセスを起動することを確認する必要があります。さらに、ホスト上のワークスペースはMinikube VMにマウントされている必要があります。

$> minikube ssh
$> cd/c/workspace/tutorials/spring-cloud/spring-cloud-kubernetes/demo-backend
$> docker build --file=Dockerfile \
  --tag=demo-backend:latest --rm=true .

その後、Minikube VMからログアウトできます。それ以降のすべての手順は、

kubectl

および

minikube

コマンドラインツールを使用してホスト上で実行されます。


5命令型コマンドを使用した簡単な展開

最初のステップでは、1つのPodのみで構成される

demo-backend

アプリのDeploymentを作成します。それに基づいて、展開を確認し、ログを調べ、最後にクリーンアップできるように、いくつかのコマンドについて説明します。


5.1. 配置の作成

必要なすべてのコマンドを引数として渡して、

kubectl

を使用します。

$> kubectl run demo-backend --image=demo-backend:latest \
  --port=8080 --image-pull-policy Never

ご覧のとおり、

demo-backendという名前のDeploymentを作成します。これは

demo-backend

という名前のイメージからバージョン

latest__でインスタンス化されています。


-port

を使用して、DeploymentがそのPod用にポート8080を開くように指定します(

demo-backend

アプリはポート8080をリッスンするため)。


-image-pull-policy Never

フラグを使用すると、Minikubeはレジストリからイメージを取り出そうとせず、代わりにローカルのDockerホストから取ります。


5.2. 展開の確認

これで、展開が成功したかどうかを確認できます。

$> kubectl get deployments

出力は次のようになります。

NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
demo-backend   1         1         1            1           19s

アプリケーションログを見たい場合は、最初にPod IDが必要です。

$> kubectl get pods
$> kubectl logs <pod id>


5.3. 展開用サービスの作成

バックエンドアプリケーションのRESTエンドポイントを利用可能にするには、サービスを作成する必要があります。

$> kubectl expose deployment demo-backend --type=NodePort


– type = NodePort

は、サービスをクラスターの外側から利用できるようにします。それは

<NodeIP>で利用可能になるでしょう:<NodePort>

、すなわち。 e。サービスは、

<NodePort>

で着信するすべての要求を、割り当てられたPodのポート8080にマッピングします。

exposeコマンドを使用するので、

NodePort

はクラスタによって自動的に設定されます(これは技術的な制限です)。デフォルトの範囲は30000〜32767です。次のセクションで説明するように、私たちが選んだ移植版を入手するために、構成ファイルを使用することができます。

サービスが正常に作成されたことを確認できます。

$> kubectl get services

出力は次のようになります。

NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
demo-backend   NodePort    10.106.11.133   <none>        8080:30117/TCP   11m

ご覧のとおり、

NodePort

タイプの

demo-backend

という名前の1つのサービスがあります。これは、クラスタ内部のIP 10.106.11.133で利用できます。

ポート8080が展開で定義されているので、サービスはこのポートにトラフィックを転送します。

ただし、ブラウザから

__ demo-backend

__を呼び出したい場合は、クラスタの外部からアクセスできるポート30117を使用する必要があります。


5.4. サービスを呼び出す

これで、バックエンドサービスを初めて呼び出すことができます。

$> minikube service demo-backend

このコマンドは、デフォルトのブラウザを起動し、

<NodeIP>:<NodePort>を開きます。この例では、


http://192.168.99.100:30117__になります。


5.5. サービスと展開のクリーンアップ

その後、Service and Deploymentを削除できます。

$> kubectl delete service demo-backend
$> kubectl delete deployment demo-backend


6. 設定ファイルを使用した複雑な配置

より複雑な設定の場合は、コマンドライン引数ですべてのパラメータを渡すのではなく、設定ファイルの方が適しています。

設定ファイルは、私たちのデプロイメントを文書化するのに優れた方法であり、バージョン管理することができます。


6.1. バックエンドアプリケーションのサービス定義

設定ファイルを使用してバックエンド用にサービスを再定義しましょう。

kind: Service
apiVersion: v1
metadata:
  name: demo-backend
spec:
  selector:
    app: demo-backend
  ports:
  - protocol: TCP
    port: 8080
  type: ClusterIP


metadataによって示される

demo-backend

という名前の

Service__を作成します。

name__フィールド

それは

app = demo-backend

ラベルを持つ任意のPodのTCPポート8080をターゲットにします。

最後に、

type:ClusterIP

は、それがクラスタの内側からしか使用できないことを示します(今回は

demo-frontend

アプリからエンドポイントを呼び出したいが、前の例のようにブラウザから直接呼び出すことはできません)。


6.2. バックエンドアプリケーションのデプロイメント定義

次に、実際の配置を定義します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-backend
spec:
  selector:
      matchLabels:
        app: demo-backend
  replicas: 3
  template:
    metadata:
      labels:
        app: demo-backend
    spec:
      containers:
        - name: demo-backend
          image: demo-backend:latest
          imagePullPolicy: Never
          ports:
            - containerPort: 8080


metadata:name

フィールドで示される

demo-backend

という名前の

Deployment

を作成します。


spec:selector

フィールドは、DeploymentがどのPodを管理するのかを定義する方法を定義します。この場合は、Podテンプレートで定義されている1つのラベル(

app:demo-backend

)を選択するだけです。

私たちは

replicas

フィールドで示す3つの複製されたPodを持ちたいです。

テンプレートフィールドは実際のポッドを定義します。

  • ポッドは

    app:demo-backend

    としてラベル付けされています


  • template:spec

    フィールドは、各Podレプリケーションが実行されていることを示します。

1つのコンテナ、

demo-backend

、バージョン

latest

** Podsオープンポート8080


6.3. バックエンドアプリケーションのデプロイ

これで展開を開始できます。

$> kubectl create -f backend-deployment.yaml

展開が成功したことを確認しましょう。

$> kubectl get deployments

出力は次のようになります。

NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
demo-backend   3         3         3            3           25s

サービスが利用可能かどうかも確認できます。

$> kubectl get services

出力は次のようになります。

NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
demo-backend    ClusterIP   10.102.17.114   <none>        8080/TCP         30s

ご覧のとおり、Serviceは

ClusterIP

型であり、セクション5の前の例とは異なり、30000〜32767の範囲の外部ポートを提供していません。


6.4. 私たちのフロントエンドアプリ

の展開とサービス定義

その後、フロントエンド用にサービスとデプロイメントを定義できます。

kind: Service
apiVersion: v1
metadata:
  name: demo-frontend
spec:
  selector:
    app: demo-frontend
  ports:
  - protocol: TCP
    port: 8081
    nodePort: 30001
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-frontend
spec:
  selector:
      matchLabels:
        app: demo-frontend
  replicas: 3
  template:
    metadata:
      labels:
        app: demo-frontend
    spec:
      containers:
        - name: demo-frontend
          image: demo-frontend:latest
          imagePullPolicy: Never
          ports:
            - containerPort: 8081

フロントエンドとバックエンドはどちらもほぼ同じです。

フロントエンドでは、(フロントエンドをクラスタの外側で利用できるようにするため)

NodePort

として型を定義します。バックエンドはクラスタ内から到達可能である必要があるだけなので、

type



ClusterIP

でした。

前述のように、

nodePort

フィールドを使用して

NodePort

を手動で指定することもできます。


6.5. フロントエンドアプリケーションの展開

これで、この展開を同じ方法で起動できます。

$> kubectl create -f frontend-deployment.yaml

展開が成功し、サービスが利用可能であることをすぐに確認しましょう。

$> kubectl get deployments
$> kubectl get services

その後、最後にフロントエンドアプリケーションのRESTエンドポイントを呼び出します。

$> minikube service demo-frontend

このコマンドは再び

<NodeIP>:<NodePort>

を開くデフォルトのブラウザを起動します。


6.6. サービスと展開のクリーンアップ

最後に、サービスと配置を削除することでクリーンアップできます。

$> kubectl delete service demo-frontend
$> kubectl delete deployment demo-frontend
$> kubectl delete service demo-backend
$> kubectl delete deployment demo-backend


7. 結論

この記事では、Minikubeを使用してローカルのKubernetesクラスタにSpring Bootの「Hello world」アプリをデプロイする方法について簡単に説明しました。

以下の方法で詳細に説明しました。

  • 私たちのローカルマシンにMinikubeをインストールしてください

  • 2つのSpring Bootアプリからなる例を開発して構築する

  • 命令型コマンドを使用して、1ノードクラスタにサービスをデプロイする


kubectl

と設定ファイル

いつものように、例の完全なソースコードはhttps://github.com/eugenp/tutorials/tree/master/spring-cloud/spring-cloud-kubernetes[GitHubで入手可能]です。