多層アプリケーションは、複数のレイヤーに分散されたアプリケーションです。運用レイヤーを論理的に分離します。レイヤーの数は、ビジネスおよびアプリケーションの要件によって異なります。この記事では、アプリケーションがバックエンド層とフロントエンド層の2つの層に分かれていることを確認します。データを保存するためのバックエンドとしてMongoDBを使用し、フロントエンドWebサーバーとしてPythonFlaskを使用します。 Kubernetesでのデプロイを使用して、これら2つのアプリケーションをデプロイし、リクエストを転送するサービスを提供します。
前提条件
- 少なくとも1つのワーカーノードを持つKubernetesクラスター。
Kubernetesクラスターの作成方法を学びたい場合は、ここをクリックしてください。このガイドは、AWS Ubuntu18.04EC2インスタンスで1つのマスターと2つのノードを持つKubernetesクラスターを作成するのに役立ちます。 - 導入とサービスの基本的な理解。
基本的な理解を得るには、導入とサービスを参照してください。
何をしますか?
- 多層アプリケーションを導入する
多層アプリケーションをデプロイする
次の内容の「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層アプリケーションです。