Cách xây dựng đám mây lai sử dụng Kubernetes có thể thay thế DBaaS

Tên tôi là Petr Zaitsev, tôi là CEO, người sáng lập percona và tôi muốn nói với bạn:

  • cách chúng tôi chuyển từ giải pháp nguồn mở sang Cơ sở dữ liệu dưới dạng Dịch vụ;
  • những cách tiếp cận nào hiện có để triển khai cơ sở dữ liệu trên đám mây;
  • cách Kubernetes có thể thay thế DBaaS, loại bỏ sự phụ thuộc vào nhà cung cấp và duy trì tính đơn giản của DBMS như một dịch vụ.

Bài viết được chuẩn bị dựa trên báo cáo tại @Databases Meetup của Mail.ru Cloud Solutions & Tarantool. Nếu không muốn đọc, bạn có thể xem:


Cách chúng tôi chuyển từ nguồn mở sang Cơ sở dữ liệu dưới dạng Dịch vụ trên đám mây

Tôi đã làm việc trong lĩnh vực nguồn mở từ cuối những năm 90. Hai mươi năm trước, việc sử dụng nguồn mở, chẳng hạn như cơ sở dữ liệu, không dễ dàng như vậy. Cần phải tải mã nguồn xuống, vá lỗi, biên dịch và chỉ sau đó sử dụng nó.

Nguồn mở sau đó đã trải qua một loạt đơn giản hóa:

  • Các nguồn Tar.gz và INSTALL cần được biên dịch;
  • các gói có phần phụ thuộc như .deb và .rpm, trong đó bạn chỉ cần cài đặt một bộ gói;
  • kho lưu trữ gói như APT và YUM, với cài đặt tự động;
  • các giải pháp như Docker và Snap, cho phép bạn nhận các gói bằng cách cài đặt mà không cần phụ thuộc vào bên ngoài.

Kết quả là việc sử dụng phần mềm nguồn mở trở nên dễ dàng hơn và cũng giảm bớt rào cản gia nhập phát triển các ứng dụng đó.

Đồng thời, không giống như tình hình 20 năm trước, khi mọi người đều là chuyên gia lắp ráp, giờ đây hầu hết các nhà phát triển không thể xây dựng các công cụ họ sử dụng từ nguồn.

Thực ra điều này không hề xấu, bởi vì:

  1. Chúng ta có thể sử dụng phần mềm phức tạp hơn nhưng thân thiện với người dùng hơn. Ví dụ: một trình duyệt rất thuận tiện khi sử dụng nhưng nó bao gồm nhiều thành phần nguồn mở và bất tiện khi xây dựng từ đầu.
  2. Nhiều người hơn có thể trở thành nhà phát triển nguồn mở và phần mềm khác, nhiều phần mềm được các doanh nghiệp sử dụng hơn và nhu cầu về nó cũng lớn hơn.

Nhược điểm là bước tiếp theo trong quá trình đơn giản hóa có liên quan đến việc sử dụng các giải pháp đám mây và điều này dẫn đến sự ràng buộc của một nhà cung cấp nhất định, nghĩa là ràng buộc với một nhà cung cấp. Chúng tôi sử dụng các giải pháp đơn giản và các nhà cung cấp sử dụng các thành phần nguồn mở, nhưng trên thực tế, chúng được gắn chặt vào một trong những đám mây lớn. Nghĩa là, cách dễ nhất và nhanh nhất để triển khai nguồn mở (và phần mềm tương thích với nó) là trên đám mây, sử dụng API độc quyền.

Khi nói đến cơ sở dữ liệu trên đám mây, có hai cách tiếp cận:

  1. Lắp ráp cơ sở hạ tầng cơ sở dữ liệu, như trong một trung tâm dữ liệu thông thường. Nghĩa là, lấy các khối xây dựng tiêu chuẩn: tính toán, lưu trữ, v.v., cài đặt Linux và cơ sở dữ liệu trên chúng rồi định cấu hình chúng.
  2. Sử dụng Cơ sở dữ liệu làm Dịch vụ, trong đó nhà cung cấp cung cấp cơ sở dữ liệu được tạo sẵn bên trong đám mây.

DBaaS hiện là một thị trường đang phát triển nhanh chóng vì nó cho phép các nhà phát triển làm việc trực tiếp với cơ sở dữ liệu và giảm thiểu công việc thường ngày. Nhà cung cấp cam kết đảm bảo Tính sẵn sàng cao và dễ dàng mở rộng quy mô, vá cơ sở dữ liệu, sao lưu và điều chỉnh hiệu suất.

Hai loại Cơ sở dữ liệu dưới dạng Dịch vụ dựa trên nguồn mở và một loại thay thế dưới dạng Kubernetes

Có hai loại Cơ sở dữ liệu dưới dạng Dịch vụ dành cho cơ sở dữ liệu mở:

  1. Một sản phẩm nguồn mở tiêu chuẩn được đóng gói trong phần phụ trợ quản trị để dễ dàng triển khai và quản lý.
  2. Một giải pháp thương mại tiên tiến với nhiều tiện ích bổ sung khác nhau, tương thích với nguồn mở.

Cả hai tùy chọn đều làm giảm khả năng di chuyển giữa các đám mây và giảm tính di động của dữ liệu và ứng dụng. Ví dụ, mặc dù thực tế là các loại đám mây khác nhau về cơ bản hỗ trợ cùng một MySQL tiêu chuẩn, nhưng vẫn có những khác biệt đáng kể giữa chúng: về hoạt động, hiệu suất, sao lưu, v.v. Việc di chuyển từ đám mây này sang đám mây khác có thể là một thách thức, đặc biệt đối với các ứng dụng phức tạp.

Và ở đây câu hỏi được đặt ra - liệu có thể tận dụng được sự tiện lợi của Cơ sở dữ liệu dưới dạng Dịch vụ nhưng lại là một giải pháp nguồn mở đơn giản không?

Tin xấu là thật không may, vẫn chưa có giải pháp nào như vậy trên thị trường. Tin vui là đã có Kubernetes, cho phép bạn triển khai các giải pháp như vậy.

Kubernetes là một hệ điều hành dành cho đám mây hoặc trung tâm dữ liệu, cho phép bạn triển khai và quản lý ứng dụng trên nhiều máy chủ trong một cụm thay vì trên một máy chủ duy nhất.

Bây giờ Kubernetes là công ty dẫn đầu trong danh mục phần mềm như vậy. Có nhiều giải pháp khác nhau cho những vấn đề như vậy nhưng nó đã trở thành tiêu chuẩn. Nhiều công ty từng tập trung vào các giải pháp thay thế hiện đang tập trung vào việc điều chỉnh sản phẩm của họ để hỗ trợ Kubernetes.

Ngoài ra, Kubernetes là một giải pháp phổ quát được hỗ trợ trên các đám mây riêng, công cộng và lai của nhiều nhà cung cấp, ví dụ: AWS, Google Cloud, Microsoft Azure, Giải pháp đám mây Mail.ru.

Cách Kubernetes hoạt động với cơ sở dữ liệu

Kubernetes ban đầu được thiết kế cho các ứng dụng không trạng thái xử lý dữ liệu nhưng không lưu trữ bất kỳ thứ gì, chẳng hạn như vi dịch vụ hoặc ứng dụng web. Cơ sở dữ liệu nằm ở đầu kia của quang phổ, nghĩa là chúng là các ứng dụng có trạng thái. Và Kubernetes ban đầu không dành cho những ứng dụng như vậy.

Tuy nhiên, gần đây có những tính năng xuất hiện trong Kubernetes cho phép sử dụng cơ sở dữ liệu và các ứng dụng có trạng thái khác:

  1. Khái niệm StatefulSet là một loạt các nguyên hàm để xử lý các sự kiện về việc dừng hoạt động của các nhóm và triển khai Graceful Shutdown (tắt ứng dụng có thể dự đoán được).
  2. Persistent Volume là các kho lưu trữ dữ liệu được liên kết với các nhóm, đối tượng quản lý Kubernetes.
  3. Khung vận hành - nghĩa là khả năng tạo các thành phần để quản lý cơ sở dữ liệu và các ứng dụng trạng thái khác được phân phối trên nhiều nút.

Hiện tại, trên các đám mây công cộng đã có Cơ sở dữ liệu lớn dưới dạng Dịch vụ, phần phụ trợ của nó là Kubernetes, ví dụ: CockroachCloud, InfluxDB, PlanetScale. Nghĩa là, cơ sở dữ liệu trên Kubernetes không chỉ là thứ có thể thực hiện được về mặt lý thuyết mà còn là thứ có thể hoạt động trong thực tế.

Percona có hai giải pháp nguồn mở cho Kubernetes:

  1. Toán tử Kubernetes cho Máy chủ Percona cho MongoDB.
  2. Kubernetes Operator cho XtraDB CLUSTER là một dịch vụ tương thích với MySQL và cung cấp tính sẵn sàng và nhất quán cao. Bạn cũng có thể sử dụng một nút duy nhất nếu không cần tính sẵn sàng cao, chẳng hạn như đối với cơ sở dữ liệu nhà phát triển.

Người dùng Kubernetes có thể được chia thành hai nhóm. Một số người sử dụng trực tiếp Kubernetes Operators - đây chủ yếu là những người dùng nâng cao có hiểu biết tốt về cách hoạt động của công nghệ. Những người khác chạy nó trên phần phụ trợ - những người dùng như vậy quan tâm đến thứ gì đó như Cơ sở dữ liệu dưới dạng Dịch vụ, họ không muốn đi sâu vào các sắc thái của Kubernetes. Đối với nhóm người dùng thứ hai, chúng tôi có một giải pháp nguồn mở khác - Percona DBaaS CLI Tool. Đây là giải pháp thử nghiệm dành cho những ai muốn có DBaaS nguồn mở dựa trên Kubernetes mà không có hiểu biết sâu về công nghệ.

Cách chạy DBaaS của Percona trên Google Kubernetes Engine

Theo tôi, Google Kubernetes Engine là một trong những cách triển khai công nghệ Kubernetes hiệu quả nhất. Nó có sẵn ở nhiều khu vực trên thế giới và có Công cụ dòng lệnh (SDK) đơn giản và tiện lợi, cho phép bạn tạo tập lệnh thay vì quản lý nền tảng theo cách thủ công.

Để DBaaS của chúng tôi hoạt động, chúng tôi cần các thành phần sau:

  1. Kubectl.
  2. SDK đám mây của Google.
  3. Percona DBaaS CLI.

Cài đặt kubectl

Chúng tôi cài đặt gói cho hệ điều hành của bạn, chúng tôi sẽ xem ví dụ về Ubuntu. Thêm chi tiết đây.

sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

Cài đặt Google Cloud SDK

Chúng tôi cài đặt gói phần mềm theo cách tương tự. Thêm chi tiết đây.

# Add the Cloud SDK distribution URI as a package source
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] 
http://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

# Import the Google Cloud Platform public key
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key --keyring /usr/share/keyrings/cloud.google.gpg add -

# Update the package list and install the Cloud SDK
sudo apt-get update && sudo apt-get install google-cloud-sdk

Cài đặt Percona DBaaS CLI

Cài đặt từ kho Percona. Percona DBaaS CLI Tool vẫn là một sản phẩm thử nghiệm nên nó nằm trong kho lưu trữ thử nghiệm, phải được kích hoạt riêng, ngay cả khi bạn đã cài đặt kho lưu trữ Percona.

hơn đây.

Thuật toán cài đặt:

  1. Thiết lập kho lưu trữ Percona bằng công cụ phát hành percona. Trước tiên, bạn cần tải xuống và cài đặt gói phát hành percona chính thức từ Percona:
    wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
    sudo dpkg -i percona-release_latest.generic_all.deb
  2. Kích hoạt thành phần kho lưu trữ công cụ thử nghiệm như sau:
    sudo percona-release enable tools experimental
    
  3. Cài đặt gói percona-dbaas-cli:
    sudo apt-get update
    sudo apt-get install percona-dbaas-cli

Thiết lập hoạt động của các thành phần

Tìm hiểu thêm về cài đặt đây.

Đầu tiên bạn cần đăng nhập vào tài khoản Google của mình. Hơn nữa, Google Cloud cho phép một người dùng có nhiều dự án độc lập, vì vậy bạn cần chỉ định một dự án đang hoạt động bằng mã cho dự án này:

gcloud auth login
gcloud config set project hidden-brace-236921

Tiếp theo, chúng ta tạo một cụm. Đối với bản demo, tôi đã tạo một cụm Kubernetes chỉ gồm ba nút - đây là yêu cầu tối thiểu để có tính sẵn sàng cao:

gcloud container clusters create --zone us-central1-a your-cluster-name --cluster-version 1.15 --num-nodes=3

Lệnh kubectl sau đây cung cấp các đặc quyền mong muốn cho người dùng hiện tại của chúng tôi:

kubectl create clusterrolebinding cluster-admin-binding-$USER 
--clusterrole=cluster-admin --user=$(gcloud config get-value core/account)

Sau đó, chúng tôi tạo một không gian tên và kích hoạt nó. Nói một cách đại khái, không gian tên cũng giống như một dự án hoặc môi trường, nhưng đã nằm trong cụm Kubernetes. Nó độc lập với các dự án Google Cloud:

kubectl create namespace my-namespace
kubectl config set-context --current --namespace=my-namespace

Bắt đầu cụm

Sau khi thực hiện xong một số bước này, chúng ta có thể bắt đầu cụm ba nút bằng lệnh đơn giản này:

# percona-dbaas mysql create-db example
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     example
Resource Endpoint: example-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              Nt9YZquajW7nfVXTTrP
Status:            ready

Cách kết nối với một cụm

Theo mặc định, nó chỉ khả dụng trong Kubernetes. Nghĩa là, nó không thể truy cập được từ máy chủ mà bạn đã chạy lệnh “Tạo”. Ví dụ: để cung cấp cổng này cho các thử nghiệm với khách hàng, bạn cần chuyển tiếp cổng thông qua Bản đồ cổng:

kubectl port-forward svc/example-proxysql 3306:3306 $

Sau đó, chúng tôi kết nối máy khách MySQL của bạn:

mysql -h 127.0.0.1 -P 3306 -uroot -pNt9YZquajW7nfVXTTrP

Các lệnh quản lý cụm nâng cao

Cơ sở dữ liệu trên IP công cộng

Nếu muốn có giải pháp lâu dài hơn cho tính khả dụng của cụm, bạn có thể lấy địa chỉ IP bên ngoài. Trong trường hợp này, cơ sở dữ liệu sẽ có thể truy cập được từ mọi nơi. Điều này kém an toàn hơn nhưng thường thuận tiện hơn. Đối với IP bên ngoài, chúng tôi sử dụng lệnh sau:

# percona-dbaas mysql create-db exposed 
--options="proxysql.serviceType=LoadBalancer"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     exposed
Resource Endpoint: 104.154.133.197
Port:              3306
User:              root
Pass:              k0QVxTr8EVfgyCLYse
Status:            ready

To access database please run the following command:
mysql -h 104.154.133.197 -P 3306 -uroot -pk0QVxTr8EVfgyCLYse

Đặt mật khẩu rõ ràng

Thay vì hệ thống tạo mật khẩu ngẫu nhiên, bạn có thể đặt mật khẩu một cách rõ ràng:

# percona-dbaas mysql create-db withpw --password=mypassword
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     withpw
Resource Endpoint: withpw-proxysql.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              mypassword
Status:            ready

Tôi đang hiển thị đầu ra của tập lệnh ở định dạng mà con người có thể đọc được nhưng định dạng JSON cũng được hỗ trợ.

Tắt tính sẵn sàng cao

Với lệnh sau, bạn có thể vô hiệu hóa tính sẵn sàng cao để triển khai một nút duy nhất:

# percona-dbaas mysql create-db singlenode 
--options="proxysql.enabled=false, allowUnsafeConfigurations=true,pxc.size=1"
Starting ......................................... [done]
Database started successfully, connection details are below:
Provider:          k8s
Engine:            pxc
Resource Name:     singlenode
Resource Endpoint: singlenode-pxc.my-namespace.pxc.svc.local
Port:              3306
User:              root
Pass:              22VqFD96mvRnmPMGg
Status:            ready

Đây là một giải pháp dành cho các tác vụ thử nghiệm nhằm thiết lập và chạy MySQL nhanh chóng và dễ dàng nhất có thể, kiểm tra nó rồi tắt hoặc sử dụng nó để phát triển.

Công cụ Percona DBaaS CLI giúp bạn đạt được giải pháp giống DBaaS trên Kubernetes. Đồng thời, chúng tôi tiếp tục nghiên cứu chức năng và khả năng sử dụng của nó.

Báo cáo này lần đầu tiên được trình bày tại Cuộc gặp gỡ @Databases bởi Mail.ru Giải pháp đám mây & Tarantool. Nhìn video các buổi biểu diễn khác và đăng ký nhận thông báo sự kiện trên Telegram Xung quanh Kubernetes tại Mail.ru Group.

Những gì khác để đọc về chủ đề này:

  1. Cơ sở dữ liệu trong nền tảng IIoT hiện đại.
  2. Cách chọn cơ sở dữ liệu cho dự án để bạn không phải chọn lại.

Nguồn: www.habr.com

Thêm một lời nhận xét