GNU/Linux >> Linux の 問題 >  >> Linux

Kubernetesを使用して多層アプリケーションをデプロイする方法

多層アプリケーションは、複数のレイヤーに分散されたアプリケーションです。運用レイヤーを論理的に分離します。レイヤーの数は、ビジネスおよびアプリケーションの要件によって異なります。この記事では、アプリケーションがバックエンド層とフロントエンド層の2つの層に分かれていることを確認します。データを保存するためのバックエンドとしてMongoDBを使用し、フロントエンドWebサーバーとしてPythonFlaskを使用します。 Kubernetesでのデプロイを使用して、これら2つのアプリケーションをデプロイし、リクエストを転送するサービスを提供します。

前提条件

  1. 少なくとも1つのワーカーノードを持つKubernetesクラスター。
    Kubernetesクラスターの作成方法を学びたい場合は、ここをクリックしてください。このガイドは、AWS Ubuntu18.04EC2インスタンスで1つのマスターと2つのノードを持つKubernetesクラスターを作成するのに役立ちます。
  2. 導入とサービスの基本的な理解。
    基本的な理解を得るには、導入とサービスを参照してください。

何をしますか?

  1. 多層アプリケーションを導入する

多層アプリケーションをデプロイする

次の内容の「test-db-deployment.yaml」という名前の新しいファイルを作成します。これにより、データベース、バックエンドレイヤーとして機能するMongoDBのデプロイが定義されます。

vim test-db-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-db
spec:
  selector:
    matchLabels:
      appdb: testdb
  replicas: 1
  template:
    metadata:
      labels:
        appdb: testdb
    spec:
      containers:
      - name: test-db
        image: mongo:3.3
        env:
        - name: MONGODB_DATABASE
          value: testdata
        ports:
        - containerPort: 27017

次に、フロントエンドアプリケーションからMongoDBへのリクエストを処理するサービスを作成します。このサービスはポート27017でリッスンし、同じポートでMongoDBにリクエストを転送します。

vim test-db-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mongodb
  labels:
    app: testdb
spec:
  ports:
  - port: 27017
    protocol: TCP
  selector:
    appdb: testdb

次のステップは、フロントエンドアプリケーションを定義することです。次のデプロイメント定義を含む新しいファイルを作成します。

これはポート5000でリッスンします。

MongoDBへのリクエストは、MONGODB_HOST、つまりmongodbサービスに転送されます。

vim test-web-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: test
  replicas: 1
  template:
    metadata:
      labels:
        app: test
    spec:
      containers:
      - name: test-app
        image: teamcloudyuga/rsvpapp
        env:
        - name: MONGODB_HOST
          value: mongodb
        ports:
        - containerPort: 5000
          name: web-port

フロントエンドにアクセスするには、ポート31081でリッスンするNodePortタイプのサービスを作成します。これは、PythonFlaskWebサーバーにIP=IP-Of-Any-Nodeでアクセスできることを意味します。およびポート=31081。次のサービス定義を使用して新しいものを作成します。

vim test-web-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: test
  labels:
    apps: test
spec:
  type: NodePort
  ports:
  - name: tcp-31081-5000
    nodePort: 31081
    port: 5000
    protocol: TCP
  selector:
    app: test

これで、2層のサンプルアプリケーションを作成する準備が整いました。先に進む前に、クラスターにオブジェクトがあるかどうかを確認しましょう。

次のコマンドを実行して、クラスターで実行されているポッド、デプロイメント、およびサービスを確認します。

kubectl get pods

kubectl get deploys

kubectl get service

上のスクリーンショットでは、クラスター内にkubernetesのデフォルトサービスが1つしかないことがわかります。

次に、4つのファイルを作成したディレクトリから次のコマンドを1つずつ実行して、MongoDBデプロイメント、MongoDBサービス、Python Flask Webサーバーデプロイメント、およびPythonFlaskWebサーバーサービスを作成します。

kubectl create -f test-db-deployment.yaml

kubectl create -f test-db-service.yaml

kubectl create -f test-web-deployment.yaml

kubectl create -f test-web-service.yaml

上のスクリーンショットでは、MongoDBデプロイメント、MongoDBサービス、Python Flask Webサーバーデプロイメント、およびPythonFlaskWebサーバーサービスが正常に作成されていることがわかります。

同じことを確認するには、次のコマンドを実行します。

kubectl get pods

kubectl get deploys

kubectl get service

次のスクリーンショットでは、2つのポッドと2つのサービスが作成されていることがわかります。作成されたポッドは、作成したデプロイメントによって制御されます。

これで、IP-of-any-Node:NodePort、つまりIP-of-any-Node:31081でアプリケーションにアクセスできるようになりました。

ブラウザでURLを押すと、次のようなアプリケーションが表示されます。これは、公開されているDockerイメージを使用し、CloudYugaに属するサンプルアプリケーションです。ここでは、RSVPカウントが0であることがわかります。これは、MongoDBにデータが含まれていないことを意味します。

これで、いくつかのデモエントリを追加できます。

いくつかのエントリを追加すると、カウントが変更されたことがわかります。これは、データがMongoDBに保存されていることを意味します。

これで、これらのアプリケーションが不要になったときに、すべてのKubernetesオブジェクトファイルがあるディレクトリから次のコマンドを実行して、すべてのオブジェクトを削除できます。

kubectldelete-f。

上記のコマンドは、作成したMongoDBデプロイメント、MongoDBサービス、Python Flask Webサーバーデプロイメント、およびPythonFlaskWebサーバーサービスを削除します。

作成したすべてのオブジェクトが正常に削除されたかどうかを確認するには、次のコマンドを実行します。

kubectl get all

次のスクリーンショットでは、デフォルトのkubernetesサービスが1つだけで、作成したオブジェクトが存在しなくなっていることがわかります。

結論

この記事では、データベースにアクセスするためのMongoDBバックエンドデータベースとサービスのデプロイを作成し、フロントエンド用に、これにアクセスするためのPythonFlaskベースのアプリケーションデプロイメントとサービスを作成しましたフロントエンド。また、データがバックエンドデータベースに保存されていることも確認しました。これは、公開されているDockerイメージを使用するサンプルの2層アプリケーションです。


Linux
  1. Dokkuを使用してFlaskアプリケーションをデプロイする

  2. Ubuntu20.04にNginxとGunicornを使用してFlaskアプリケーションをデプロイする方法

  3. 変な名前のファイルを削除するには?

  1. Rancherを使用してKubernetesクラスターをセットアップする方法

  2. KubernetesにElasticsearchをデプロイする方法

  3. 特定の名前のフォルダを削除する方法

  1. KubernetesにJenkinsをインストールする方法

  2. KubernetesにRabbitMQをデプロイする方法

  3. KubernetesにPostgreSQLをデプロイする方法