Những điểm chính
• Quan điểm của mình: Theo kinh nghiệm triển khai thực tế, việc đưa WordPress lên Kubernetes giúp giải quyết hiệu quả các vấn đề về khả năng mở rộng và tính sẵn sàng cao mà mô hình hosting truyền thống thường gặp hạn chế. Tuy nhiên, để hệ thống hoạt động ổn định cần đặc biệt chú ý đến quản lý Persistent Volume và tối ưu tài nguyên để đảm bảo hiệu suất cũng như chi phí vận hành hợp lý.
• Nắm vững các yêu cầu chuẩn bị: Giúp bạn thiết lập đầy đủ môi trường cần thiết trước khi triển khai WordPress trên Kubernetes.
• Nắm vững quy trình triển khai bằng YAML: Giúp bạn kiểm soát chi tiết toàn bộ tài nguyên Kubernetes từ build image, deploy database đến triển khai ứng dụng.
• Tìm hiểu triển khai bằng Helm Chart: Giúp đơn giản hóa quá trình cài đặt, dễ dàng quản lý, nâng cấp và rollback ứng dụng bằng vài lệnh cơ bản.
Yêu cầu cần thiết trước khi triển khai
Để triển khai WordPress trên Kubernetes thành công, bạn cần chuẩn bị đầy đủ các yêu cầu kỹ thuật cho cả hai phương pháp YAML manifests và Helm Chart:
• Kubernetes cluster và công cụ quản lý: Kubernetes cluster phiên bản 1.10 trở lên, đã bật RBAC (Role-Based Access Control), có quyền admin để tạo và quản lý Deployment, Namespace, Service, PVC… Đồng thời cần cài kubectl trên máy local và cấu hình đúng cluster context.
• Docker và container registry: Máy local cần cài Docker để build custom WordPress image. Ngoài ra cần có Docker Hub hoặc container registry để push image custom hoặc sử dụng image public như wordpress:5.8.3-php7.4-apache, mysql:5.7.
• Helm package manager (đối với phương pháp Helm): Cần cài Helm client và cấu hình kết nối tới cluster Kubernetes.
• Quyền truy cập và storage provisioner: Cluster cần có StorageClass hỗ trợ ReadWriteOnce để cấp phát PersistentVolume cho MySQL và dữ liệu uploads của WordPress.
• MySQL external server (đối với Helm): MySQL server cần cho phép kết nối từ Kubernetes cluster bằng cách chỉnh bind-address=0.0.0.0 và restart lại MySQL service.
Xây dựng website WordPress trên Kubernetes bằng YAML manifests
Bước 1: Tạo namespace và Secret/ConfigMap
Bạn clone repository chứa manifests:
Tiếp theo tạo namespace riêng cho WordPress:
Sau đó tạo Secret mysql-cred chứa thông tin đăng nhập MySQL bằng base64 encode và apply bằng:
Tiếp theo tạo ConfigMap cho Nginx và MySQL init script:
Bước 2: Tạo PersistentVolumeClaim
Bạn tạo PVC wordpress-pvc với dung lượng 2Gi để lưu uploads WordPress:
MySQL StatefulSet cũng sẽ tự tạo PVC riêng để lưu dữ liệu database tại /var/lib/mysql.
Do StorageClass local-path dùng volumeBindingMode: WaitForFirstConsumer nên trạng thái Pending ban đầu là bình thường.
Bước 3: Build và push custom Docker image
Bạn di chuyển vào thư mục Docker chứa Dockerfile, startup.sh, php.ini và cấu hình WordPress.
Build image:
Sau đó tag và push image lên Docker Hub:
Bước 4: Deploy MySQL StatefulSet
Bạn deploy MySQL bằng:
StatefulSet sử dụng image mysql:latest, mount PVC để lưu database và ConfigMap để chạy init
Sau khi deploy, kiểm tra trạng thái:
Khi MySQL Pod ở trạng thái Running và PVC đã Bound nghĩa là database đã hoạt động bình thường.
Bước 5: Deploy WordPress Deployment
Tiếp theo deploy WordPress:
Deployment sử dụng custom image techiescamp/wordpress-nginx:7.0.0, kết nối tới MySQL thông qua Service nội bộ.
WordPress Deployment sẽ mount:
• ConfigMap Nginx tại /etc/nginx/conf.d
• PVC uploads tại /var/www/html/wordpress/wp-content/uploads
Sau đó kiểm tra tài nguyên:
Đảm bảo Pod WordPress ở trạng thái Running và Service đã expose đúng NodePort.
Bước 6: Tạo NetworkPolicy và truy cập website
Bạn apply NetworkPolicy để chỉ cho phép WordPress truy cập MySQL:
Sau đó truy cập WordPress bằng:
Tiến hành cài đặt WordPress lần đầu bằng cách chọn ngôn ngữ, nhập site title, username, password và email quản trị.
Cuối cùng kiểm tra lại PVC/PV để đảm bảo dữ liệu đã được lưu persistent.
Xây dựng website WordPress trên Kubernetes bằng Helm Chart
Bước 1: Cấu hình MySQL external server
Bạn SSH vào MySQL server rồi đăng nhập:
Tạo database WordPress:
Tạo user riêng cho WordPress:
Kiểm tra lại database:
Sau đó chỉnh file:
Thay:
thành:
rồi restart MySQL:
Bước 2: Deploy WordPress bằng Helm Chart Bitnami
Bạn thêm repository Bitnami:
Tiếp theo deploy WordPress:
Lệnh trên sẽ deploy toàn bộ WordPress bằng Helm Chart và sử dụng MySQL external thay vì MariaDB internal.
Bước 3: Nâng cấp và rollback Helm release
Để kiểm tra release hiện tại:
Khi có phiên bản mới, cập nhật repository:
Kiểm tra chart:
Nâng cấp release:
Nếu gặp lỗi sau khi update, bạn có thể rollback về revision cũ:
Helm giúp việc quản lý phiên bản, nâng cấp và rollback WordPress trên Kubernetes đơn giản hơn rất nhiều so với triển khai YAML thủ công.
So sánh triển khai bằng YAML và Helm Chart
|
Tiêu chí |
YAML Manifests |
Helm Chart |
|
Mức độ kiểm soát |
Chi tiết, tùy biến cao |
Nhanh và tự động hơn |
|
Độ phức tạp |
Cao hơn |
Đơn giản hơn |
|
Quản lý phiên bản |
Thủ công |
Hỗ trợ upgrade/rollback |
|
Phù hợp |
Hệ thống cần custom sâu |
Triển khai nhanh |
|
Thời gian triển khai |
Lâu hơn |
Nhanh hơn |
Khi nào nên chọn YAML hoặc Helm?
• Nên dùng YAML manifests khi bạn cần kiểm soát toàn bộ cấu hình Kubernetes, custom sâu hoặc muốn học chi tiết cách hoạt động của từng resource.
• Nên dùng Helm Chart khi cần triển khai nhanh, dễ nâng cấp, rollback và quản lý ứng dụng theo mô hình package manager trên Kubernetes.