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