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
- 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. - Základní znalosti o implementacích a službách.
Základní informace naleznete v části Nasazení a služby.
Co budeme dělat?
- 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ů.