Cách triển khai ứng dụng đa tầng với Kubernetes

theanh

Administrator
Nhân viên
Ứng dụng đa tầng là ứng dụng được phân phối giữa nhiều lớp. Nó tách biệt hợp lý các lớp hoạt động. Số lượng lớp thay đổi tùy theo yêu cầu của doanh nghiệp và ứng dụng. Trong bài viết này, chúng ta sẽ xem một ứng dụng được chia thành 2 lớp, lớp backend và lớp frontend. Chúng ta sẽ sử dụng MongoDB làm lớp backend để lưu trữ dữ liệu và Python Flask làm Webserver frontend. Chúng ta sẽ triển khai hai ứng dụng này bằng cách triển khai trong Kubernetes và có các dịch vụ để chuyển tiếp các yêu cầu đến chúng.

Điều kiện tiên quyết​

  1. Cụm Kubernetes có ít nhất 1 nút worker.
    Nếu bạn muốn tìm hiểu cách tạo Cụm Kubernetes, hãy nhấp vào đây. Hướng dẫn này sẽ giúp bạn tạo cụm Kubernetes với 1 Master và 2 Node trên AWS Ubuntu 18.04 EC2 Instances.
  2. Hiểu biết cơ bản về Triển khai và Dịch vụ.
    Tham khảo Triển khai và Dịch vụ để hiểu biết cơ bản.

Chúng ta sẽ làm gì?​

  1. Triển khai Ứng dụng Đa tầng

Triển khai Ứng dụng Đa tầng​

Tạo tệp mới có tên "test-db-deployment.yaml" với nội dung sau. Điều này sẽ xác định một triển khai MongoDB sẽ hoạt động như một cơ sở dữ liệu, một lớp phụ trợ.

vim test-db-deployment.yaml
Mã:
apiVersion: apps/v1kind: Triển khaimetadata: name: test-dbspec: 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




Bây giờ, hãy tạo một dịch vụ sẽ phục vụ các yêu cầu đến MongoDB từ ứng dụng giao diện người dùng của chúng ta. Dịch vụ này sẽ lắng nghe trên Cổng 27017 và chuyển tiếp các yêu cầu đến MongoDB trên cùng một cổng.

vim test-db-service.yaml
Mã:
apiVersion: v1kind: Servicemetadata: name: mongodb labels: app: testdbspec: ports: - port: 27017 protocol: TCP selector: appdb: testdb


Bước tiếp theo là xác định một ứng dụng giao diện người dùng. Tạo một tệp mới chứa định nghĩa triển khai sau.

Tệp này sẽ lắng nghe trên Cổng 5000.

Các yêu cầu đến MongoDB sẽ được chuyển tiếp đến MONGODB_HOST tức là dịch vụ mongodb.

vim test-web-deployment.yaml
Mã:
apiVersion: apps/v1kind: Triển khaimetadata: name: testspec: 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


Để truy cập giao diện người dùng, chúng ta sẽ tạo một dịch vụ gõ NodePort lắng nghe trên Cổng 31081. Điều này có nghĩa là Python Flask Webserver có thể được truy cập trên IP=IP-Of-Any-Node và Cổng=31081. Tạo một dịch vụ mới với định nghĩa dịch vụ sau.

vim test-web-service.yaml
Mã:
apiVersion: v1kind: Servicemetadata: name: test labels: apps: testspec: type: NodePort ports: - name: tcp-31081-5000 nodePort: 31081 port: 5000 protocol: TCP selector: app: test


Bây giờ, chúng ta đã sẵn sàng để tạo một ứng dụng mẫu 2 tầng. Trước khi tiếp tục, hãy kiểm tra xem cụm có đối tượng nào không.

Thực hiện các lệnh sau để kiểm tra các pod, triển khai và dịch vụ đang chạy trong cụm.

kubectl get pods

kubectl get deployments

kubectl get service



Trong ảnh chụp màn hình ở trên, có thể thấy chỉ có 1 dịch vụ mặc định của kubernetes trong cụm.

Bây giờ, hãy thực hiện từng lệnh sau từ thư mục mà bạn đã tạo 4 tệp để tạo triển khai MongoDB, dịch vụ MongoDB, triển khai Python Flask Webserver và dịch vụ Python Flask Webserver.

kubectl tạo -f test-db-deployment.yaml

kubectl tạo -f test-db-service.yaml

kubectl tạo -f test-web-deployment.yaml

kubectl tạo -f test-web-service.yaml



Trong ảnh chụp màn hình ở trên, bạn có thể thấy rằng triển khai MongoDB, dịch vụ MongoDB, triển khai Python Flask Webserver và dịch vụ Python Flask Webserver đã được tạo thành công.

Để xác minh điều này, hãy thực hiện các lệnh sau.

kubectl get pods

kubectl get deployments

kubectl get service

Trong ảnh chụp màn hình sau, bạn có thể thấy rằng 2 pod và 2 dịch vụ đã được tạo. Các pod đã được tạo ra được kiểm soát bởi triển khai mà chúng tôi đã tạo.



Bây giờ, chúng ta đã sẵn sàng truy cập ứng dụng trên IP-of-any-Node:NodePort tức là IP-of-any-Node:31081.

Khi bạn nhấn vào URL trong trình duyệt, bạn sẽ thấy ứng dụng như sau. Đây là một ứng dụng mẫu sử dụng hình ảnh docker có sẵn công khai và thuộc về CloudYuga. Tại đây, bạn có thể thấy số lượng RSVP là 0, điều này có nghĩa là MongoDB không có bất kỳ dữ liệu nào trong đó.



Bây giờ, chúng ta có thể thêm một vài mục demo.

Sau khi thêm một vài mục, chúng ta có thể thấy số lượng đã thay đổi. Điều này có nghĩa là dữ liệu đã được lưu trữ trong MongoDB.



Bây giờ, khi bạn không còn cần những ứng dụng này nữa, bạn có thể xóa tất cả các đối tượng bằng cách thực hiện lệnh sau từ thư mục nơi bạn có tất cả các tệp đối tượng Kubernetes của mình.

kubectl delete -f .



Lệnh trên sẽ xóa triển khai MongoDB, dịch vụ MongoDB, triển khai Python Flask Webserver và dịch vụ Python Flask Webserver mà chúng ta đã tạo.

Để kiểm tra xem tất cả các đối tượng chúng ta đã tạo đã được xóa thành công hay chưa, hãy thực hiện lệnh sau.

kubectl get all

Trong ảnh chụp màn hình sau, bạn có thể thấy rằng chỉ có một dịch vụ Kubernetes mặc định và các đối tượng chúng ta đã tạo không còn nữa tồn tại.


Kết luận​

Trong bài viết này, chúng tôi đã tạo triển khai cơ sở dữ liệu và dịch vụ MongoDB backend để truy cập cơ sở dữ liệu và đối với frontend, chúng tôi đã tạo triển khai ứng dụng và dịch vụ dựa trên Python Flask để truy cập frontend này. Chúng tôi cũng thấy dữ liệu được lưu trữ trong cơ sở dữ liệu backend. Đây là một ứng dụng 2 tầng mẫu sử dụng hình ảnh docker có sẵn công khai.
 
Back
Bên trên