GNU/Linux >> Znalost Linux >  >> Linux

Jak nasadit vícevrstvou aplikaci s Kubernetes

Vícevrstvá aplikace je aplikace distribuovaná do více než jedné vrstvy. Logicky odděluje provozní vrstvy. Počet vrstev se liší podle obchodních a aplikačních požadavků. V tomto článku uvidíme aplikaci rozdělenou na 2 vrstvy, backend a frontend vrstvu. Použijeme MongoDB jako backend pro ukládání dat a Python Flask jako frontendový webový server. Tyto dvě aplikace nasadíme pomocí nasazení v Kubernetes a budeme mít služby, které jim budou předávat požadavky.

Předpoklady

  1. Cluster Kubernetes s alespoň 1 pracovním uzlem.
    Pokud se chcete naučit vytvářet cluster Kubernetes, klikněte sem. Tato příručka vám pomůže vytvořit cluster Kubernetes s 1 hlavním a 2 uzly na instancích AWS Ubuntu 18.04 EC2.
  2. Základní znalosti o implementacích a službách.
    Základní informace naleznete v části Nasazení a služby.

Co budeme dělat?

  1. Nasazení vícevrstvé aplikace

Nasazení vícevrstvé aplikace

Vytvořte nový soubor s názvem „test-db-deployment.yaml“ s následujícím obsahem. To bude definovat nasazení MongoDB, které bude fungovat jako databáze, backendová vrstva.

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

Nyní vytvořte službu, která bude obsluhovat požadavky do MongoDB z naší frontendové aplikace. Tato služba bude naslouchat na portu 27017 a předávat požadavky do MongoDB na stejném portu.

vim test-db-service.yaml

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

Dalším krokem je definování frontendové aplikace. Vytvořte nový soubor obsahující následující definici nasazení.

To bude poslouchat na portu 5000.

Požadavky na MongoDB budou předány na MONGODB_HOST, tj. službu 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

Pro přístup k frontendu vytvoříme službu typu NodePort naslouchající na portu 31081. To znamená, že k webovému serveru Python Flask lze přistupovat na IP=IP-Of-Any-Node a Port=31081. Vytvořte novou s následující definicí služby.

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

Nyní jsme připraveni vytvořit dvouvrstvou ukázkovou aplikaci. Než budeme pokračovat, zkontrolujme, zda cluster obsahuje nějaké objekty.

Provedením následujících příkazů zkontrolujte moduly, nasazení a služby běžící v clusteru.

kubectl získat pods

kubectl získat nasazení

kubectl získat službu

Na výše uvedeném snímku obrazovky je vidět, že v clusteru je pouze 1 výchozí služba kubernetes.

Nyní spusťte následující příkaz jeden po druhém z adresáře, kde jste vytvořili 4 soubory, pro vytvoření nasazení MongoDB, služby MongoDB, nasazení webového serveru Python Flask a služby webového serveru Python Flask.

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

Na výše uvedeném snímku obrazovky můžete vidět, že nasazení MongoDB, služba MongoDB, nasazení webového serveru Python Flask a služba Webový server Python Flask byly úspěšně vytvořeny.

Chcete-li totéž ověřit, proveďte následující příkazy.

kubectl získat pods

kubectl získat nasazení

kubectl získat službu

Na následujícím snímku obrazovky můžete vidět, že byly vytvořeny 2 pody a 2 služby. Vytvořené moduly jsou řízeny námi vytvořeným nasazením.

Nyní jsme všichni připraveni přistupovat k aplikaci na adrese IP-of-any-Node:NodePort, tj. IP-of-any-Node:31081.

Jakmile v prohlížeči narazíte na adresu URL, zobrazí se aplikace následovně. Toto je ukázková aplikace, která používá veřejně dostupný docker image a patří CloudYuga. Zde můžete vidět, že počet RSVP je 0, což znamená, že MongoDB nemá žádná data.

Nyní můžeme přidat několik ukázkových položek.

Po přidání několika položek vidíme, že se počet změnil. To znamená, že data byla uložena v MongoDB.

Nyní, když tyto aplikace již nepotřebujete, můžete všechny objekty smazat spuštěním následujícího příkazu z adresáře, kde máte všechny soubory objektů Kubernetes.

kubectl delete -f .

Výše uvedený příkaz odstraní nasazení MongoDB, službu MongoDB, nasazení webového serveru Python Flask a službu Python Flask Webserver, kterou jsme vytvořili.

Chcete-li zkontrolovat, zda byly všechny objekty, které jsme vytvořili, úspěšně odstraněny, proveďte následující příkaz.

kubectl získat vše

Na následujícím snímku obrazovky můžete vidět, že existuje pouze jedna výchozí služba kubernetes a objekty, které jsme vytvořili, již neexistují.

Závěr

V tomto článku jsme vytvořili nasazení backendové databáze a služby MongoDB pro přístup k databázi a pro frontend jsme vytvořili nasazení aplikací a službu na bázi Python Flask pro přístup k tomuto frontend. Také jsme viděli, jak se data ukládají do backendové databáze. Toto je ukázková dvouvrstvá aplikace, která používá veřejně dostupné obrázky dockerů.


Linux
  1. Nasaďte aplikaci Flask s Dokku

  2. Jak odstranit složky s určitým názvem

  3. Jak odstranit soubor s podivným názvem?

  1. Jak nastavit Kubernetes Cluster pomocí Rancher

  2. Jak nasadit Elasticsearch na Kubernetes

  3. Jak nasadit aplikaci Flask s Nginx a Gunicorn na Ubuntu 20.04

  1. Jak nainstalovat Jenkins na Kubernetes

  2. Jak nasadit RabbitMQ na Kubernetes

  3. Jak nasadit PostgreSQL na Kubernetes