Come distribuire un'applicazione multilivello con Kubernetes
Su questa pagina
- Prerequisiti
- Cosa faremo?
- Distribuisci un'applicazione multilivello
- Conclusione
Un'applicazione multilivello è un'applicazione distribuita su più di un livello. Separa logicamente i livelli operativi. Il numero di livelli varia in base ai requisiti aziendali e applicativi. In questo articolo vedremo un'applicazione divisa in 2 layer, backend e frontend. Useremo MongoDB come backend per archiviare dati e Python Flask come server Web frontend. Distribuiremo queste due applicazioni utilizzando le distribuzioni in Kubernetes e disporremo 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. - Comprensione di base di deployment e servizi.
Consulta Servizi per avere una conoscenza di base.
Che cosa faremo?
- Distribuisci 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. var slotId=div-gpt-ad-howtoforge_com-medrectangle-3-0;var ffid=1;var alS=1021%1000;var container=document.getElementById(slotId);container.style.width=100%;var ins =document.createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ins.dataset .fullWidthResponsive=true;}
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 a 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 consiste nel definire un'applicazione frontend. Crea un nuovo file contenente la seguente definizione di distribuzione.
Questo ascolterà sulla porta 5000.
Le richieste a MongoDB verranno inoltrate a MONGODB_HOST, ovvero il 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 Port=31081. Creare un 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 tutti pronti per creare un'applicazione di esempio a 2 livelli. Prima di procedere, controlliamo se il cluster ha oggetti.
Esegui i seguenti comandi per controllare i pod, le distribuzioni e i servizi in esecuzione nel cluster.
kubectl ottieni i pod
kubectl ottiene le distribuzioni
kubectl ottieni il servizio
Nello screenshot sopra, si può vedere che c'è solo 1 servizio predefinito kubernetes nel cluster.
Ora, esegui il seguente comando uno alla volta dalla directory in cui hai creato 4 file per creare la distribuzione MongoDB, il servizio MongoDB, la distribuzione del server Web Python Flask e il servizio il server Web Python Flask.
kubectl create -f test-db-deployment.yaml
kubectl crea -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 MongoDB, il servizio MongoDB, la distribuzione del server Web Python Flask e il servizio server Web Python Flask sono stati creati correttamente.
Per verificare lo stesso, eseguire i seguenti comandi.
kubectl ottieni i pod
kubectl ottiene le distribuzioni
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 dal deployment che abbiamo creato.
Ora siamo tutti pronti per accedere all'applicazione su IP-of-any-Node:31081.
Dopo aver premuto l'URL nel browser, vedrai l'applicazione come segue. Questa è un'applicazione di esempio che utilizza l'immagine docker 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 avrai più bisogno di queste applicazioni, puoi eliminare tutti gli oggetti eseguendo il seguente comando dalla directory in cui sono presenti tutti i tuoi file oggetto Kubernetes.
kubectl elimina -f .
Il comando precedente eliminerà la distribuzione di MongoDB, il servizio MongoDB, la distribuzione del server Web Python Flask e il servizio del server Web Python Flask che abbiamo creato.
Per verificare se tutti gli oggetti che abbiamo creato sono stati eliminati correttamente, esegui il seguente comando.
kubectl ottieni tutto
Nello screenshot 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 un deployment del database e del servizio di back-end MongoDB per accedere al database e per il front-end, abbiamo creato un deployment e un servizio dell'applicazione basato su Python Flask per accedere a questo front-end. Abbiamo anche visto i dati che venivano archiviati nel database di back-end. Questa è un'applicazione di livello 2 di esempio che utilizza immagini docker disponibili pubblicamente.