GNU/Linux >> Linux Esercitazione >  >> Linux

Come distribuire un'applicazione multilivello con Kubernetes

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

  1. 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.
  2. Conoscenza di base di implementazioni e servizi.
    Fai riferimento a implementazioni e servizi per ottenere una comprensione di base.

Cosa faremo?

  1. 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.


Linux
  1. Come configurare un cluster Kubernetes con Rancher

  2. Distribuisci un'applicazione Flask con Dokku

  3. Come distribuire l'applicazione Flask con Nginx e Gunicorn su Ubuntu 20.04

  4. Come rimuovere le cartelle con un certo nome

  5. Come eliminare un file con un nome strano?

Come distribuire Kubernetes a nodo singolo con Microk8s su Ubuntu 20.04

Come distribuire Docker Compose Stack su Kubernetes con Kompose

Come distribuire CouchDB come cluster con Docker

Come distribuire rapidamente applicazioni full-stack con i modelli di applicazione Portainer

Come distribuire un'applicazione PHP con Nginx e MySQL utilizzando Docker e Docker Compose

Come distribuire l'applicazione Laravel con Nginx su Ubuntu?