Thứ ba, 07/05/2019 | 00:00 GMT+7

Cách thiết lập WordPress với MySQL trên Kubernetes bằng Helm

Khi ngày càng có nhiều nhà phát triển làm việc trong các môi trường phân tán, các công cụ như Kubernetes đã trở thành trung tâm để giữ cho các thành phần ứng dụng được chuẩn hóa trên các môi trường xây dựng và production động. Với sự phức tạp ngày càng tăng của hệ sinh thái ứng dụng và sự phổ biến ngày càng tăng của Kuberbetes, các công cụ giúp quản lý tài nguyên trong các cụm Kubernetes đã trở nên thiết yếu.

Helm là trình quản lý gói open-souce dành cho Kubernetes giúp đơn giản hóa quá trình triển khai và nâng cấp ứng dụng trên một cụm Kubernetes, đồng thời cung cấp cách tìm và chia sẻ các ứng dụng sẵn sàng cài đặt được đóng gói dưới dạng Kubernetes Charts .

Trong hướng dẫn này, ta sẽ sử dụng Helm để cài đặt WordPress trên đầu một cụm Kubernetes, nhằm tạo một trang web có tính khả dụng cao. Ngoài việc tận dụng khả năng mở rộng nội tại và các khía cạnh sẵn có cao của Kubernetes, cài đặt này sẽ giúp giữ cho WordPress an toàn bằng cách cung cấp quy trình nâng cấp và khôi phục đơn giản thông qua Helm.

Ta sẽ sử dụng một server MySQL bên ngoài để tóm tắt thành phần database , vì nó có thể là một phần của một cụm riêng biệt hoặc dịch vụ được quản lý để có tính khả dụng mở rộng. Sau khi hoàn thành các bước được mô tả trong hướng dẫn này, bạn sẽ có một bản cài đặt WordPress đầy đủ chức năng trong một môi trường cụm chứa được quản lý bởi Kubernetes.

Yêu cầu

Để hoàn thành hướng dẫn này, bạn cần có những thứ sau:

Trước khi tiếp tục, hãy đảm bảo bạn có thể đăng nhập vào server MySQL của bạn và bạn có kết nối với cụm Kubernetes của bạn . Trong trường hợp bạn có nhiều cụm được cài đặt trong file cấu hình kubectl của bạn , bạn nên đảm bảo bạn đã kết nối với đúng cụm bằng cách chạy lệnh sau từ máy local hoặc server phát triển của bạn:

  • kubectl config get-contexts

Đây là kết quả ví dụ:

Output
CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-sfo2-wordpress-cluster do-sfo2-wordpress-cluster do-sfo2-wordpress-cluster-admin minikube minikube minikube

Dấu sao (*) cho biết cụm nào hiện là ngữ cảnh mặc định . Trong trường hợp bạn cần thay đổi ngữ cảnh hiện tại, hãy chạy:

  • kubectl config use-context context-name

Đến đây bạn đã sẵn sàng để làm theo phần còn lại của hướng dẫn.

Bước 1 - Cấu hình MySQL

Đầu tiên, ta sẽ tạo một user MySQL chuyên dụng và một database cho WordPress, cho phép kết nối từ các server bên ngoài. Điều này là cần thiết vì cài đặt WordPress của ta sẽ nằm trên một server riêng biệt bên trong cụm Kubernetes. Trong trường hợp bạn đã cài đặt database và user MySQL chuyên dụng cho WordPress, bạn có thể chuyển sang bước tiếp theo.

Từ server MySQL, đăng nhập vào MySQL bằng lệnh sau:

  • mysql -u root -p

Bạn sẽ được yêu cầu cung cấp password bạn đã cài đặt cho account MySQL gốc khi bạn cài đặt phần mềm lần đầu. Sau khi đăng nhập, MySQL sẽ cung cấp cho bạn một dấu nhắc lệnh mà bạn có thể sử dụng để tạo database và user mà ta cần cho WordPress.

Lưu ý: Đối với hướng dẫn này, ta sẽ tạo database có tên là wordpress và user có tên là wordpress_user , được xác định bằng mật password . Xin lưu ý đây là những giá trị mẫu không an toàn và bạn nên sửa đổi chúng cho phù hợp trong suốt hướng dẫn này.

Để tạo database , bạn có thể sử dụng câu lệnh sau:

  • CREATE DATABASE wordpress;

Bây giờ, hãy tạo một user MySQL chuyên dụng cho database này:

  • CREATE USER wordpress_user IDENTIFIED BY 'password';

User wordpress_user đã được tạo, nhưng nó chưa có bất kỳ quyền truy cập nào. Lệnh sau sẽ cấp cho user này quyền truy cập administrator (tất cả các quyền ) vào database wordpress từ cả mạng local và mạng bên ngoài:

  • GRANT ALL PRIVILEGES ON wordpress.* TO wordpress_user@'%';

Để cập nhật bảng MySQL nội bộ quản lý quyền truy cập, hãy sử dụng câu lệnh sau:

  • FLUSH PRIVILEGES;

Đến đây bạn có thể thoát khỏi client MySQL bằng:

  • exit;

Để kiểm tra xem các thay đổi có thành công hay không, bạn có thể đăng nhập lại vào client dòng lệnh MySQL, lần này bằng cách sử dụng account mới wordpress_user để xác thực:

  • mysql -u wordpress_user -p

Bạn nên sử dụng cùng một password mà bạn đã cung cấp khi tạo user MySQL này với câu lệnh CREATE_USER . Để xác nhận user mới của bạn có quyền truy cập vào database wordpress , bạn có thể sử dụng câu lệnh sau:

  • show databases;

Sản lượng sau được mong đợi:

Output
+--------------------+ | Database | +--------------------+ | information_schema | | wordpress | +--------------------+ 2 rows in set (0.03 sec)

Sau khi xác nhận database wordpress được đưa vào kết quả, bạn có thể thoát khỏi ứng dụng dòng lệnh MySQL bằng:

  • exit;

Đến đây bạn có một database MySQL dành riêng cho WordPress và thông tin xác thực truy cập hợp lệ để sử dụng trong đó. Vì cài đặt WordPress của ta sẽ hoạt động trên một server riêng biệt, ta vẫn cần chỉnh sửa cấu hình MySQL của bạn để cho phép các kết nối đến từ các server bên ngoài.

Trong khi vẫn ở trên server MySQL của bạn, hãy mở file /etc/mysql/mysql.conf.d/mysqld.cnf bằng editor dòng lệnh mà bạn chọn:

  • sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Tìm cài đặt bind-address trong file này. Theo mặc định, MySQL chỉ lắng nghe trên 127.0.0.1 (localhost). Để chấp nhận kết nối từ các server bên ngoài, ta cần thay đổi giá trị này thành 0.0.0.0 . Đây là cách cấu hình bind-address của bạn trông như sau:

/etc/mysql/mysql.conf.d/mysqld.cnf
 # Instead of skip-networking the default is now to listen only on # localhost which is more compatible and is not less secure. bind-address            = 0.0.0.0 

Khi bạn thực hiện xong những thay đổi này, hãy lưu file . Bạn cần khởi động lại MySQL bằng lệnh sau:

  • sudo systemctl restart mysql

Để kiểm tra xem bạn có thể kết nối từ xa hay không, hãy chạy lệnh sau từ máy local hoặc server phát triển của bạn:

  • mysql -h mysql_server_ip -u wordpress_user -p

Hãy nhớ thay đổi mysql_server_ip thành địa chỉ IP server MySQL hoặc tên server của bạn. Nếu bạn có thể kết nối mà không gặp lỗi, bây giờ bạn đã sẵn sàng để tiến hành bước tiếp theo.

Bước 2 - Cài đặt WordPress

Bây giờ ta đã có thông tin cần thiết để kết nối với database MySQL, ta có thể tiếp tục và cài đặt WordPress bằng Helm.

Theo mặc định, biểu đồ WordPress cài đặt MariaDB trên một group riêng biệt bên trong cụm và sử dụng nó làm database WordPress. Ta muốn tắt hành vi này và cấu hình WordPress để sử dụng database MySQL bên ngoài. Tùy chọn cấu hình này và các tùy chọn cấu hình khác (chẳng hạn như password và admin-user WordPress mặc định) có thể được đặt tại thời điểm cài đặt, thông qua các tham số dòng lệnh hoặc thông qua file cấu hình YAML riêng biệt.

Để giữ mọi thứ có tổ chức và có thể mở rộng dễ dàng, ta sẽ sử dụng file cấu hình.

Từ máy local hoặc server phát triển của bạn, hãy tạo một folder mới cho cài đặt dự án của bạn và chuyển vào đó:

  • mkdir myblog-settings
  • cd myblog-settings

Tiếp theo, tạo một file có tên là values.yaml , sử dụng editor mà bạn chọn:

  • nano values.yaml

Trong file này, ta cần cài đặt một số biến sẽ xác định cách WordPress kết nối với database , cũng như một số thông tin cơ bản về trang web và admin-user ban đầu để đăng nhập vào WordPress khi cài đặt hoàn tất.

Ta sẽ dựa trên cấu hình của bạn trên file giá values.yaml mặc values.yaml từ biểu đồ WordPress Helm . Phần Blog / Thông tin Trang web chứa các tùy chọn chung cho blog WordPress của bạn, chẳng hạn như tên của blog và thông tin đăng nhập ban đầu của user . Phần Cài đặt Database của file này chứa các cài đặt để kết nối với server MySQL từ xa. MariaDB bị tắt trong phần cuối cùng.

Sao chép các nội dung sau vào file giá values.yaml của bạn, thay thế các giá trị được đánh dấu bằng các giá trị tùy chỉnh của bạn:

giá trị.yaml
 ## Blog/Site Info wordpressUsername: sammy wordpressPassword: password wordpressEmail: sammy@example.com wordpressFirstName: Sammy wordpressLastName: the Shark wordpressBlogName: Sammy's Blog!  ## Database Settings externalDatabase:   host: mysql_server_ip   user: wordpress_user   password: password   database: wordpress  ## Disabling MariaDB mariadb:   enabled: false 

Ta vừa cấu hình các tùy chọn sau:

  • wordpressUsername : Đăng nhập của user WordPress.
  • wordpressPassword : Mật khẩu của user WordPress.
  • wordpressEmail : Email của user WordPress.
  • wordpressFirstName : Tên user Wordpress.
  • wordpressLastName : Họ của user Wordpress.
  • wordpressBlogName : Tên của Trang web hoặc Blog.
  • server : Địa chỉ IP server MySQL hoặc tên server .
  • user : Người dùng MySQL.
  • mật khẩu : Mật khẩu MySQL.
  • database : Tên database MySQL.

Khi bạn chỉnh sửa xong, hãy lưu file và thoát khỏi editor .

Bây giờ ta đã có tất cả các cài đặt, đã đến lúc thực thi helm để cài đặt WordPress. Lệnh sau yêu cầu helm cài đặt bản phát hành ổn định mới nhất của biểu đồ WordPress dưới tên myblog , sử dụng giá values.yaml làm file cấu hình:

  • helm install --name myblog -f values.yaml stable/wordpress

Bạn sẽ nhận được kết quả tương tự như sau:

Output
NAME: myblog LAST DEPLOYED: Fri Jan 25 20:24:10 2019 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1/Deployment NAME READY UP-TO-DATE AVAILABLE AGE myblog-wordpress 0/1 1 0 1s ==> v1/PersistentVolumeClaim NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myblog-wordpress Pending do-block-storage 1s ==> v1/Pod(related) NAME READY STATUS RESTARTS AGE myblog-wordpress-5965f49485-8zfl7 0/1 Pending 0 1s ==> v1/Secret NAME TYPE DATA AGE myblog-externaldb Opaque 1 1s myblog-wordpress Opaque 1 1s ==> v1/Service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE myblog-wordpress LoadBalancer 10.245.144.79 <pending> 80:31403/TCP,443:30879/TCP 1s (...)

Sau khi cài đặt xong, một dịch vụ có tên myblog-wordpress được tạo trong cụm Kubernetes của bạn, nhưng có thể mất vài phút trước khi containers sẵn sàng và có sẵn thông tin External-IP . Để kiểm tra trạng thái của dịch vụ này và truy xuất địa chỉ IP bên ngoài của nó, hãy chạy:

  • kubectl get services

Bạn sẽ nhận được kết quả tương tự như sau:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 20h myblog-wordpress LoadBalancer 10.245.144.79 203.0.113.110 80:31403/TCP,443:30879/TCP 3m40s

Lệnh này cung cấp cho bạn thông tin chi tiết về các dịch vụ đang chạy trên cụm của bạn, bao gồm tên và loại dịch vụ, cũng như địa chỉ IP được các dịch vụ này sử dụng. Như bạn thấy từ kết quả , cài đặt WordPress đang được phân phát dưới dạng myblog-wordpress trên địa chỉ IP bên ngoài 203.0.113.110 .

Lưu ý: Trong trường hợp bạn đang sử dụng minikube để kiểm tra cài đặt này, bạn cần chạy minikube service myblog-wordpress để hiển thị web server containers để bạn có thể truy cập nó từ trình duyệt của bạn .

Cài đặt WordPress của bạn hiện đã hoạt động. Để truy cập giao diện quản trị, hãy sử dụng địa chỉ IP công cộng có được từ kết quả của các kubectl get services , theo sau là /wp-admin trong trình duyệt web :

http://203.0.113.110/wp-admin 

Màn hình đăng nhập

Bạn nên sử dụng thông tin đăng nhập được xác định trong file giá values.yaml của bạn để đăng nhập và bắt đầu cấu hình trang web WordPress của bạn .

Bước 3 - Nâng cấp WordPress

Vì tính phổ biến của nó, WordPress thường là mục tiêu cho việc khai thác độc hại, vì vậy điều quan trọng là phải cập nhật nó. Ta có thể nâng cấp bản phát hành Helm bằng helm upgrade chỉ helm upgrade .

Để liệt kê tất cả các bản phát hành hiện tại của bạn, hãy chạy lệnh sau từ máy local hoặc server phát triển của bạn:

  • helm list

Bạn sẽ nhận được kết quả tương tự như sau:

Output
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE myblog 1 Fri Jan 25 20:24:10 2019 DEPLOYED wordpress-5.1.2 5.0.3 default

Như bạn thấy từ kết quả , version WordPress hiện tại của ta là 5.0.3 (phiên bản ứng dụng), trong khi version biểu đồ là 5.1.2 . Nếu bạn muốn nâng cấp bản phát hành lên version biểu đồ mới hơn, trước tiên hãy cập nhật repository Helm của bạn với:

  • helm repo update

Bạn có thể mong đợi kết quả sau:

Output
Hang tight while we grab the latest from your chart repositories... ...Skip local chart repository ...Successfully got an update from the "stable" chart repository Update Complete. ⎈ Happy Helming!⎈

Đến đây bạn có thể kiểm tra xem có version mới hơn của biểu đồ WordPress hay không với:

  • helm inspect chart stable/wordpress

Bạn sẽ thấy kết quả tương tự như sau:

Output
apiVersion: v1 appVersion: 5.1.1 description: Web publishing platform for building blogs and websites. engine: gotpl home: http://www.wordpress.com/ icon: https://bitnami.com/assets/stacks/wordpress/img/wordpress-stack-220x234.png keywords: - wordpress - cms - blog - http - web - application - php maintainers: - email: containers@bitnami.com name: Bitnami name: wordpress sources: - https://github.com/bitnami/bitnami-docker-wordpress version: 5.9.0

Như bạn thấy từ kết quả , có một biểu đồ mới (phiên bản 5.9.0) với WordPress 5.1.1 (phiên bản ứng dụng). Khi nào bạn muốn nâng cấp bản phát hành WordPress của bạn lên biểu đồ WordPress mới nhất, bạn nên chạy:

  • helm upgrade -f values.yaml myblog stable/wordpress

Lệnh này sẽ tạo ra kết quả rất giống với kết quả được tạo bởi helm install . Điều quan trọng là phải cung cấp cùng một file cấu hình mà ta đã sử dụng khi cài đặt biểu đồ WordPress lần đầu tiên, vì nó chứa các cài đặt database tùy chỉnh mà ta đã xác định cho cài đặt của bạn .

Bây giờ, nếu bạn chạy lại helm list , bạn sẽ thấy thông tin cập nhật về bản phát hành của bạn :

Output
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE myblog 2 Fri May 3 14:51:20 2019 DEPLOYED wordpress-5.9.0 5.1.1 default

Bạn đã nâng cấp thành công WordPress của bạn lên version mới nhất của biểu đồ WordPress.

Quay lại bản phát hành

Mỗi khi bạn nâng cấp bản phát hành, Helm sẽ tạo một bản sửa đổi mới của bản phát hành đó. Bản sửa đổi cài đặt một điểm kiểm tra cố định để bạn có thể quay lại nếu mọi thứ không hoạt động như mong đợi. Nó tương tự như một commit trong Git, vì nó tạo ra một lịch sử thay đổi có thể được so sánh và hoàn nguyên. Nếu có gì đó xảy ra sự cố trong quá trình nâng cấp, bạn luôn có thể quay lại bản sửa đổi trước đó của bản phát hành Helm nhất định bằng lệnh helm rollback :

  • helm rollback release-name revision-number

Ví dụ: nếu ta muốn hoàn tác nâng cấp và khôi phục bản phát hành WordPress của bạn về version đầu tiên , ta sẽ sử dụng:

  • helm rollback myblog 1

Điều này sẽ khôi phục cài đặt WordPress về bản phát hành đầu tiên. Bạn sẽ thấy kết quả sau, cho biết rằng quá trình khôi phục đã thành công:

Output
Rollback was a success! Happy Helming!

Chạy lại helm list bây giờ sẽ cho biết WordPress đã bị hạ cấp trở lại 5.0.3, version biểu đồ 5.1.2:

Output
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE myblog 3 Mon Jan 28 22:02:42 2019 DEPLOYED wordpress-5.1.2 5.0.3 default

Lưu ý việc quay lại một bản phát hành sẽ tạo ra một bản sửa đổi mới, dựa trên bản sửa đổi mục tiêu của bản quay lại. Bản phát hành WordPress có tên myblog của ta hiện đang ở bản sửa đổi số ba , dựa trên bản sửa đổi số một .

Kết luận

Trong hướng dẫn này, ta đã cài đặt WordPress với một server MySQL bên ngoài trên một cụm Kubernetes bằng công cụ dòng lệnh Helm. Ta cũng đã học cách nâng cấp bản phát hành WordPress lên version biểu đồ mới và cách khôi phục bản phát hành nếu có sự cố trong suốt quá trình nâng cấp.

Như các bước bổ sung, bạn có thể cân nhắc cài đặt Nginx Ingress với Cert-Manager để kích hoạt lưu trữ ảo dựa trên tên và cấu hình certificate SSL cho trang web WordPress của bạn. Bạn cũng nên kiểm tra cài đặt production được đề xuất cho biểu đồ WordPress mà ta đã sử dụng trong hướng dẫn này.

Nếu bạn muốn tìm hiểu thêm về Kubernetes và Helm, vui lòng xem phần Kubernetes trên trang cộng đồng của ta .


Tags:

Các tin liên quan

Cách cho phép truy cập từ xa vào MySQL
2019-03-07
Cách sửa chữa bảng bị hỏng trong MySQL
2019-03-07
Cách khắc phục sự cố lỗi socket trong MySQL
2019-03-07
Cách giải quyết sự cố trong MySQL
2019-03-07
Cách khắc phục sự cố truy vấn MySQL
2019-03-07
Giới thiệu về Truy vấn trong MySQL
2018-10-17
Cách cài đặt MySQL mới nhất trên Debian 9
2018-09-05
Cách đặt lại mật khẩu gốc MySQL hoặc MariaDB của bạn trên Ubuntu 18.04
2018-09-04
Cách tạo một cụm MySQL nhiều node trên Ubuntu 18.04
2018-07-26
Cách cài đặt MySQL mới nhất trên Ubuntu 18.04
2018-07-12