Un'applicazione multilivello è un'applicazione distribuita su più livelli. Separa logicamente i livelli operativi. Il numero di livelli varia in base ai requisiti aziendali e dell'applicazione. In questo articolo vedremo un'applicazione divisa in 2 livelli, backend e frontend. Useremo MongoDB come back-end per archiviare dati e Python Flask come server Web front-end. Distribuiremo queste due applicazioni utilizzando le distribuzioni in Kubernetes e disponiamo di servizi per inoltrare loro le richieste.
Prerequisiti
- Cluster Kubernetes con almeno 1 nodo di lavoro.
Se vuoi imparare a creare un Cluster Kubernetes, fai clic qui. Questa guida ti aiuterà a creare un cluster Kubernetes con 1 master e 2 nodi su istanze AWS Ubuntu 18.04 EC2. - Conoscenza di base di implementazioni e servizi.
Fai riferimento a implementazioni e servizi per ottenere una comprensione di base.
Cosa faremo?
- Distribuire un'applicazione multilivello
Distribuisci un'applicazione multilivello
Crea un nuovo file denominato "test-db-deployment.yaml" con il seguente contenuto. Questo definirà una distribuzione di MongoDB che fungerà da database, un livello di back-end.
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
Ora, crea un servizio che servirà le richieste al MongoDB dalla nostra applicazione frontend. Questo servizio ascolterà sulla porta 27017 e inoltrerà le richieste a MongoDB sulla stessa porta.
vim test-db-service.yaml
apiVersion: v1 kind: Service metadata: name: mongodb labels: app: testdb spec: ports: - port: 27017 protocol: TCP selector: appdb: testdb
Il passaggio successivo è definire un'applicazione frontend. Crea un nuovo file contenente la seguente definizione di distribuzione.
Questo sarà in ascolto sulla porta 5000.
Le richieste a MongoDB verranno inoltrate a MONGODB_HOST, ovvero al servizio 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
Per accedere al frontend, creeremo un servizio di tipo NodePort in ascolto sulla porta 31081. Ciò significa che è possibile accedere al server Web Python Flask su IP=IP-Of-Any-Node e Porta=31081. Creane uno nuovo con la seguente definizione di servizio.
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
Ora siamo pronti per creare un'applicazione di esempio a 2 livelli. Prima di procedere, controlliamo se il cluster ha degli oggetti.
Esegui i seguenti comandi per controllare pod, distribuzioni e servizi in esecuzione nel cluster.
kubectl ottieni i pod
kubectl ottiene implementazioni
kubectl ottieni il servizio
Nello screenshot sopra, si può vedere che c'è solo 1 servizio predefinito kubernetes nel cluster.
Ora, esegui il comando seguente uno per uno dalla directory in cui hai creato 4 file per creare la distribuzione MongoDB, il servizio MongoDB, la distribuzione Python Flask Webserver e il servizio Python Flask Webserver.
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
Nello screenshot sopra, puoi vedere che la distribuzione di MongoDB, il servizio MongoDB, la distribuzione di Python Flask Webserver e il servizio di Python Flask Webserver sono stati creati correttamente.
Per verificare lo stesso, esegui i seguenti comandi.
kubectl ottieni i pod
kubectl ottiene implementazioni
kubectl ottieni il servizio
Nello screenshot seguente, puoi vedere che sono stati creati 2 pod e 2 servizi. I pod che sono stati creati sono controllati dalla distribuzione che abbiamo creato.
Ora siamo pronti per accedere all'applicazione su IP-of-any-Node:NodePort, ovvero IP-of-any-Node:31081.
Una volta premuto l'URL nel browser, vedrai l'applicazione come segue. Questa è un'applicazione di esempio che utilizza l'immagine della finestra mobile disponibile pubblicamente e appartiene a CloudYuga. Qui puoi vedere che il conteggio RSVP è 0, questo significa che MongoDB non contiene dati.
Ora possiamo aggiungere alcune voci demo.
Dopo aver aggiunto alcune voci, possiamo vedere che il conteggio è cambiato. Ciò significa che i dati sono stati archiviati in MongoDB.
Ora, quando non hai più bisogno di queste applicazioni, puoi eliminare tutti gli oggetti eseguendo il comando seguente dalla directory in cui hai tutti i file degli oggetti Kubernetes.
kubectl delete -f .
Il comando sopra eliminerà la distribuzione di MongoDB, il servizio MongoDB, la distribuzione di Python Flask Webserver e il servizio di Python Flask Webserver che abbiamo creato.
Per verificare se tutti gli oggetti che abbiamo creato sono stati eliminati correttamente, esegui il comando seguente.
kubectl ottieni tutto
Nella schermata seguente, puoi vedere che esiste un solo servizio kubernetes predefinito e gli oggetti che avevamo creato non esistono più.
Conclusione
In questo articolo, abbiamo creato una distribuzione del database e del servizio back-end MongoDB per accedere al database e per il front-end, abbiamo creato una distribuzione e un servizio dell'applicazione basata su Python Flask per accedervi fine frontale. Abbiamo anche visto i dati essere archiviati nel database di back-end. Questa è un'applicazione di esempio a 2 livelli che utilizza immagini Docker disponibili pubblicamente.