Email Doanh NghiệpSSLFirewall Anti DDoS

NỘI DUNG

Banner blog lễ 30.4 và 1.5

2 cách xây dựng website WordPress trên Kubernetes bằng YAML và Helm Chart

Cao Lê Viết Tiến

Đã kiểm duyệt nội dung

Ngày đăng:09/05/2026
Cập nhật cuối:29/04/2026
Lượt xem

Quy trình sản xuất nội dung

Đánh giá

[esi kkstarratings cache="private" ttl="3"]

Xây dựng website WordPress trên Kubernetes là một giải pháp mạnh mẽ, giúp tận dụng khả năng tự động hóa, mở rộng linh hoạt và tính sẵn sàng cao của nền tảng điều phối container hàng đầu này. Thay vì cài đặt trên một máy chủ đơn lẻ, việc container hóa WordPress và quản lý bằng Kubernetes cho phép website chịu tải tốt hơn, dễ dàng cập nhật và phục hồi sau sự cố. Trong bài viết này, bằng kinh nghiệm nhiều lần triển khai cho khách hàng tại Vietnix, mình sẽ cùng bạn tìm hiểu các yêu cầu cần thiết và hai phương pháp phổ biến để triển khai WordPress trên Kubernetes.

Những điểm chính

  • Quan điểm của mình: Việc đưa WordPress lên Kubernetes đòi hỏi một sự thay đổi cơ bản trong tư duy quản trị hạ tầng. Dựa trên kinh nghiệm thực tế, giải pháp này giải quyết một cách hiệu quả các thách thức về khả năng mở rộng (scaling) và tính sẵn sàng cao, những vấn đề mà mô hình hosting truyền thống thường gặp khó khăn. Để triển khai thành công, cần tập trung vào hai yếu tố cốt lõi: quản trị dữ liệu bền vững (sử dụng Persistent Volume) và tối ưu hóa tài nguyên. Việc này đảm bảo hệ thống đạt hiệu suất cao đồng thời có 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 một môi trường nền tảng đầy đủ và sẵn sàng để triển khai WordPress trên Kubernetes một cách thành công.
  • 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ộ các thành phần, từ việc tạo tài nguyên, build image đến triển khai ứng dụng và cơ sở dữ liệu một cách bài bản.
  • Tìm hiểu cách triển khai bằng Helm Chart: Giúp bạn đơn giản hóa và tăng tốc độ triển khai, đồng thời dễ dàng quản lý, nâng cấp và rollback ứng dụng chỉ bằng vài lệnh đơn giản.
  • Giới thiệu Vietnix: Biết đến Vietnix là nhà cung cấp hạ tầng tối ưu, giúp bạn có một nền tảng hạ tầng đáng tin cậy để triển khai các giải pháp Kubernetes.
  • Câu hỏi thường gặp: Giải đáp các thắc mắc liên quan đến việc xây dựng website WordPress trên Kubernetes.
những điểm chính

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 version 1.10 trở lên với RBAC (Role-Based Access Control) được kích hoạt, quyền admin để tạo và quản lý resources như Namespace, Deployment, Service. Cài đặt kubectl trên máy local và cấu hình kết nối đúng cluster context bằng lệnh kubectl config get-contexts để kiểm tra và switch context.
  • Docker và container registry: Docker đã cài đặt trên máy local để build custom WordPress image kết hợp Nginx+PHP. Tài khoản Docker Hub để push image custom như techiescamp/wordpress-nginx:7.0.0 hoặc sử dụng public images sẵn có wordpress:5.8.3-php7.4-apache, mysql:5.7 từ Docker Hub.
  • Helm package manager (phương pháp Helm): Helm client + Tiller server đã cài đặt trên cluster theo hướng dẫn chính thức Kubernetes (helm.sh). Cần quyền SSH truy cập MySQL external server với root password để tạo database wordpress và user wordpress_user.
  • Quyền truy cập và storage provisioner: Quyền admin cluster để deploy Namespace, Secret, ConfigMap, PersistentVolumeClaim (PVC). Storage provisioner (như local storage, NFS, cloud storage) hỗ trợ access mode ReadWriteOnce cho PV/PVC lưu trữ MySQL database và WordPress uploads.
  • MySQL external server (phương pháp Helm): MySQL server có thể truy cập từ Kubernetes cluster qua network. Cấu hình file /etc/mysql/mysql.conf.d/mysqld.cnf thay đổi bind-address=0.0.0.0 thay vì 127.0.0.1, restart MySQL service sudo systemctl restart mysql để chấp nhận kết nối external.
Yêu cầu cần thiết trước khi xây dựng website WordPress trên Kubernetes
Yêu cầu cần thiết trước khi xây dựng website WordPress trên Kubernetes

Để triển khai và quản lý hiệu quả các hệ thống WordPress trên Kubernetes, đòi hỏi một hạ tầng đám mây với hiệu năng cao, khả năng lưu trữ linh hoạt và kết nối mạng đáng tin cậy. Vietnix cung cấp dịch vụ Enterprise Cloud Server hiệu suất vượt trội, lý tưởng để bạn xây dựng và vận hành các cụm Kubernetes. Với các tùy chọn cấu hình mạnh mẽ, bộ vi xử lý hiệu suất cao, ổ cứng NVMe siêu tốc và băng thông ổn định, Vietnix đảm bảo bạn có một nền tảng vững chắc để triển khai các Pod, quản lý Persistent Volume và chạy các Helm Chart một cách mượt mà.

Bước 1: Tạo namespace và Secret/ConfigMap

Bạn clone repository chứa manifests: git clone https://github.com/techiescamp/kubernetes-projects.git rồi cd vào thư mục 04-WordPress-deployment. Sau đó bạn tạo namespace riêng biệt bằng lệnh kubectl create ns wordpress và set context mặc định: kubectl config set-context --current --namespace=wordpress để tất cả lệnh kubectl sau chỉ áp dụng trong namespace này.

Tiếp theo bạn tạo Secret mysql-cred chứa credentials MySQL base64 encoded bằng cách encode từng giá trị: echo -n 'admin@123' | base64 cho admin-password/username/password/db-name, sau đó chạy kubectl apply -f secret.yaml để lưu trữ an toàn.

Cuối cùng bạn tạo 2 ConfigMap: nginx-configmap chứa file wordpress.conf cấu hình Nginx server port 80 với fastcgi PHP8.2 và mysql-configmap chứa init.sql tạo MySQL user/grant privileges, chạy kubectl apply -f nginx-cm.yaml mysql-cm.yaml.

Bước 2: Tạo PersistentVolumeClaim

Bạn tạo PVC wordpress-pvc dung lượng 2Gi với access mode ReadWriteOnce để mount thư mục /var/www/html/wordpress/wp-content/uploads lưu trữ media files lâu dài:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-pvc
spec:
  storageClassName: local-path  
  accessModes: [ReadWriteOnce]
  resources:
    requests:
      storage: 2Gi

PVC mysql-volume dung lượng 2Gi sẽ được tự động tạo qua StatefulSet template và mount tại /var/lib/mysql để đảm bảo database persistence.

Tạo PersistentVolumeClaim
Tạo PersistentVolumeClaim

Do StorageClass local-path sử dụng chế độ volumeBindingMode: WaitForFirstConsumer. Hệ thống sẽ trì hoãn việc cấp phát và gắn định danh ổ đĩa vật lý cho đến khi Pod sử dụng PVC. Nên việc pvc Pending là không ảnh hưởng

Bước 3: Build và push custom Docker image

Bạn cd vào thư mục Docker chứa Dockerfile, php.ini, startup.sh, wordpress.conf, wp-config.php với cấu hình Nginx thay Apache. Bạn build image custom bằng lệnh docker build -t wordpress-nginx:7.0.0. sử dụng base Ubuntu 24.04, cài Nginx + PHP8.2 + WordPress, script startup.sh tự động replace biến DB vào wp-config.php.

Sau khi build thành công, bạn tag image: docker tag wordpress-nginx:7.0.0 techiescamp/wordpress-nginx:7.0.0 rồi push lên Docker Hub: docker push techiescamp/wordpress-nginx:7.0.0 để Kubernetes pull khi deploy.

Bước 4: Deploy MySQL StatefulSet

Bạn chạy kubectl apply -f mysql.yaml để deploy StatefulSet mysql với 1 replica sử dụng image mysql:latest, cấu hình environment variables từ Secret mysql-cred (MYSQL_ROOT_PASSWORD, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE). StatefulSet mount ConfigMap mysql-configmap tại /docker-entrypoint-initdb.d để chạy init script và PVC mysql-volume tại /var/lib/mysql.

Bạn thêm livenessProbe/readinessProbe TCP port 3306 kiểm tra MySQL health, giới hạn resources request 256Mi memory/100m CPU và limit 512Mi/200m CPU. File này đồng thời tạo Service mysql-service ClusterIP port 3306 với selector app: mysql để WordPress kết nối nội bộ.

Sau đó bạn kiểm tra deployment bằng kubectl get sts svc để xác nhận StatefulSet mysql ready và service port 3306 đã expose.

➜  ~ kubectl get sts
NAME    READY   AGE
mysql   1/1     4m17s
➜  ~ kubectl get svc
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
mysql-service   ClusterIP   10.254.35.65   <none>        3306/TCP   4m19s
➜  ~ kubectl get pod
NAME      READY   STATUS    RESTARTS       AGE
mysql-0   1/1     Running   1 (2m6s ago)   4m23s
➜  ~ kubectl get pvc
NAME                   STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
mysql-volume-mysql-0   Bound     pvc-febb8229-6de1-4310-b2f4-e39089f041d4   2Gi        RWO            local-path     <unset>                 4m26s
wordpress-pvc          Pending                                                                        local-path     <unset>                 17m
Kiểm tra deployment bằng kubectl get sts svc
Kiểm tra deployment bằng kubectl get sts svc

Bước 5: Deploy WordPress Deployment

Bạn chạy kubectl apply -f wordpress.yaml deploy Deployment wordpress 1 replica sử dụng image custom techiescamp/wordpress-nginx:7.0.0, cấu hình env DB_HOST=mysql-service.wordpress.svc.cluster.local, DB_USER/PASSWORD/NAME lấy từ Secret mysql-cred. Deployment mount ConfigMap nginx-configmap tại /etc/nginx/conf.d và PVC wordpress-pvc tại /var/www/html/wordpress/wp-content/uploads.

Bạn thêm readinessProbe HTTP /wp-login.php port 80 kiểm tra app ready nhận traffic, livenessProbe /wp-admin/install.php restart pod nếu fail, resources request 256Mi/100m CPU. File này tạo Service wordpress-service NodePort 30004 expose port 80 ra ngoài cluster. Bạn kiểm tra toàn bộ bằng kubectl get pvc,pod,deploy,svc xác nhận Deployment ready, PVC status Bound, 2 PV đã provision thành công.

Deploy WordPress Deployment
Deploy WordPress Deployment

Bước 6: NetworkPolicy và truy cập

Bạn chạy kubectl apply -f networkpolicy.yaml tạo mysql-network-policy chỉ cho phép ingress traffic từ pod label app: wordpress đến MySQL port 3306, đồng thời cho phép tất cả egress traffic để tăng bảo mật.

Tạo mysql-network-policy
Tạo mysql-network-policy

Bạn truy cập WordPress dashboard qua YOUR-NODE-IP:30004, chọn ngôn ngữ, điền site title/username/password/email để hoàn tất setup WordPress lần đầu. Sau đó xác nhận storage persistence bằng kubectl get pvc,pv kiểm tra cả 2 PVC ở status Bound với PV tương ứng đã được tạo tự động.

Xác nhận storage persistence
Xác nhận storage persistence

Bước 1: Cấu hình MySQL external server

Bạn bắt đầu bằng cách SSH vào MySQL server external và đăng nhập root account: mysql -u root -p. Tiếp theo bạn tạo database dành riêng cho WordPress bằng lệnh CREATE DATABASE wordpress;. Sau khi database được tạo, bạn tạo user chuyên dụng CREATE USER wordpress_user IDENTIFIED BY 'password'; rồi cấp toàn quyền truy cập GRANT ALL PRIVILEGES ON wordpress.* TO wordpress_user@'%'; FLUSH PRIVILEGES;.

Có thể sử dụng lệnh sau để tạo database demo:

kubectl run mysql-external --image=mysql:5.7 --env="MYSQL_ROOT_PASSWORD=password" --env="MYSQL_DATABASE=wordpress"

Và lấy IP mysql bằng lệnh:

➜  ~ kubectl get pod mysql-external -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP            NODE                             NOMINATED NODE   READINESS GATES
mysql-external   1/1     Running   0          32s   10.100.2.84   cloud-docs-gnlhbj5jyooy-node-1   <none>           <none>
Lấy IP MySQL
Lấy IP MySQL

Để xác nhận cấu hình thành công, bạn đăng nhập lại bằng user mới mysql -u wordpress_user -p và kiểm tra show databases; Nếu thấy database wordpress đã xuất hiện, sau đó thoát bằng exit;. Cuối cùng bạn chỉnh sửa file /etc/mysql/mysql.conf.d/mysqld.cnf thay bind-address=127.0.0.1 thành bind-address=0.0.0.0 rồi restart service sudo systemctl restart mysql để MySQL chấp nhận kết nối từ Kubernetes cluster.

Bước 2: Sử dụng helm sẵn của binami

https://artifacthub.io/packages/helm/bitnami/wordpress

helm install myblog bitnami/wordpress \
  --set externalDatabase.host=<IP_MYSQL_Ở_TRÊN> \
  --set externalDatabase.user=root \
  --set externalDatabase.password=password \
  --set externalDatabase.database=wordpress \
  --set mariadb.enabled=false
Sau khi chạy lệnh, sẽ có Helm Note in ra để bạn biết các thao tác sử dụng
Sau khi chạy lệnh, sẽ có Helm Note in ra để bạn biết các thao tác sử dụng
Kiểm tra load Balancer IP
Kiểm tra load Balancer IP
Thông tin WordPress URL
Thông tin WordPress URL

Vì đây mình đang sử dụng k8s trên cloud nên Vietnix cloud, nên sẽ có kí tự VIP ở sau IP, nhằm đánh dấu đây là một IP dành cho dịch vụ Load Balancing

Thông tin login
Thông tin login
echo Username: user
echo Password: $(kubectl get secret --namespace default myblog-wordpress -o jsonpath="{.data.wordpress-password}" | base64 -d)

Bước 3: Nâng cấp và rollback

Để quản lý phiên bản, bạn kiểm tra Helm releases hiện tại bằng helm list xem revision number và app/chart version của myblog. Khi có bản cập nhật, bạn refresh repo helm repo update rồi kiểm tra chart mới nhất helm inspect chart bitnami wordpress.

Bạn nâng cấp release bằng helm upgrade myblog bitnami/wordpress \ --reuse-values \ --set wordpressBlogName="Vietnix Blog Official" để cập nhật WordPress lên version mới mà vẫn giữ cấu hình external database. Nếu upgrade gặp vấn đề, bạn rollback về phiên bản ổn định trước đó bằng helm rollback myblog 1 và kiểm tra helm list xác nhận revision đã khôi phục thành công.

Lưu ý từ chuyên gia: Mình gợi ý mọi người nên sử dụng giải pháp Object Storage (như S3, GCS) cho các file media thay vì chỉ dùng Persistent Volume. Cách tiếp cận này tách biệt dữ liệu tĩnh khỏi vòng đời của Pod, cho phép các Pod WordPress có thể scale ngang một cách linh hoạt và hiệu quả. Đồng thời, nó tối ưu hóa việc phân phối tài nguyên và đảm bảo tính sẵn sàng cao cho dữ liệu.

Vietnix – Cung cấp hạ tầng tối ưu cho mọi giải pháp Kubernetes

Bên cạnh Cloud Server, để triển khai và quản lý thành công website WordPress trên Kubernetes, bạn còn cần một nền tảng hosting chất lượng làm gốc rễ. Việc này đảm bảo hiệu suất và bảo mật được tối ưu ngay từ đầu, trước khi bước vào giai đoạn phức tạp hơn. Đối với nhiều doanh nghiệp, một giải pháp hosting chuyên biệt cho WordPress không chỉ là bước đệm mà còn là lựa chọn chiến lược, giúp đạt được tốc độ và sự ổn định cao mà không cần đầu tư nguồn lực lớn vào việc quản trị hạ tầng phức tạp.

Một trong những giải pháp nổi bật trong lĩnh vực này là WordPress Hosting của Vietnix. Đây là dịch vụ được thiết kế chuyên sâu để giải quyết các bài toán về tốc độ, bảo mật và khả năng chịu tải dành riêng cho mã nguồn WordPress, mang lại một nền tảng vững chắc cho mọi website.

Các lợi thế chính của WordPress Hosting tại Vietnix:

  • Tốc độ vượt trội: Tăng tốc website gấp 10 lần nhờ nền tảng LiteSpeed, 100% ổ cứng NVMe và công nghệ tăng tốc độc quyền.
  • Bảo mật toàn diện: Chủ động chống tấn công DDoS, quét mã độc bằng AI và tự động backup dữ liệu 2 lần mỗi ngày.
  • Quản lý chuyên biệt: Dễ dàng quản trị, tạo môi trường thử nghiệm (Staging) và chẩn đoán lỗi với bộ công cụ WordPress Toolkit & PHP X-Ray.
  • Quà tặng giá trị: Tặng kèm bộ theme và plugin bản quyền (Elementor Pro, Rank Math SEO Pro,…) giúp tiết kiệm chi phí đáng kể.

Đồng thời, dịch vụ S3 Object Storage của Vietnix sẽ là lựa chọn hoàn hảo cho việc sao lưu dữ liệu WordPress và các Persistent Volume, giúp bạn bảo vệ thông tin quan trọng và phục hồi nhanh chóng khi cần. Hãy để Vietnix cung cấp hạ tầng tin cậy, giúp bạn làm chủ Kubernetes và tập trung vào phát triển website. Liên hệ ngay!

Thông tin liên hệ:

  • Website: https://vietnix.vn/
  • Hotline: 1800 1093
  • Email: sales@vietnix.com.vn
  • Địa chỉ: 265 Hồng Lạc, Phường Bảy Hiền, Thành Phố Hồ Chí Minh

Câu hỏi thường gặp

Sự khác biệt chính giữa việc triển khai WordPress bằng YAML manifests và bằng Helm Chart là gì?

YAML manifests: Cung cấp sự kiểm soát chi tiết và minh bạch trên từng tài nguyên Kubernetes. Tuy nhiên, việc quản lý nhiều tệp YAML có thể trở nên phức tạp.
Helm Chart: Đóng gói tất cả các tài nguyên cần thiết vào một gói duy nhất, giúp đơn giản hóa việc cài đặt, nâng cấp và rollback. Nó cũng cho phép tùy chỉnh dễ dàng thông qua tệp values.yaml.

Tại sao lại sử dụng StatefulSet cho MySQL thay vì Deployment?

StatefulSet được sử dụng cho các ứng dụng có trạng thái (stateful) như MySQL vì nó cung cấp các đặc tính quan trọng mà Deployment không có. StatefulSet đảm bảo mỗi Pod có một danh tính mạng ổn định, duy nhất và một Persistent Volume riêng biệt, giúp duy trì tính nhất quán và toàn vẹn của dữ liệu cơ sở dữ liệu khi Pod được khởi động lại hoặc scale.

PersistentVolumeClaim có vai trò gì trong việc triển khai WordPress trên Kubernetes?

PVC đóng vai trò yêu cầu và liên kết một không gian lưu trữ bền vững cho các Pod. Trong trường hợp WordPress, PVC được sử dụng để lưu trữ các tệp tải lên (trong wp-content/uploads) và dữ liệu của cơ sở dữ liệu MySQL. Điều này đảm bảo rằng dữ liệu không bị mất khi Pod bị xóa hoặc khởi động lại.

Xây dựng website WordPress trên Kubernetes là một bước tiến quan trọng, giúp website của bạn đạt được khả năng mở rộng, tính sẵn sàng và khả năng phục hồi vượt trội. Dù bạn chọn phương pháp sử dụng YAML manifests để kiểm soát chi tiết hay Helm Chart để đơn giản hóa và tự động hóa, cả hai đều là những cách tiếp cận mạnh mẽ để vận hành WordPress trong môi trường Cloud Native. Việc hiểu rõ các yêu cầu, quy trình triển khai và cách quản lý sẽ là chìa khóa để bạn xây dựng một website WordPress không chỉ mạnh mẽ về mặt chức năng mà còn vững chắc về mặt hạ tầng.

THEO DÕI VÀ CẬP NHẬT CHỦ ĐỀ BẠN QUAN TÂM

Đăng ký ngay để nhận những thông tin mới nhất từ blog của chúng tôi. Đừng bỏ lỡ cơ hội truy cập kiến thức và tin tức hàng ngày

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Kết nối với mình qua

Kết nối với mình qua

Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận

wordpress

thiet-ke-web-wordpress

text
icon popup single post

CẢM ƠN BẠN ĐÃ ĐÁNH GIÁ BÀI VIẾT

Vietnix sẽ luôn cố gắng cải thiện chất lượng dịch vụ mỗi ngày

ĐÓNG

Đánh giá mức độ hữu ích của bài viết

icon 1 sao

Thất vọng

icon 2 sao

Chưa hữu ích

icon 3 sao

Bình thường

icon 4 sao

Hữu ích

icon 5 sao

Rất hữu ích

Icon
ĐĂNG KÝ NHẬN TÀI LIỆU THÀNH CÔNG
Cảm ơn bạn đã đăng ký nhận tài liệu mới nhất từ Vietnix!
ĐÓNG

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1

ĐĂNG KÝ DÙNG THỬ HOSTING

Asset

7 NGÀY MIỄN PHÍ

Asset 1
Icon
XÁC NHẬN ĐĂNG KÝ DÙNG THỬ THÀNH CÔNG
Cảm ơn bạn đã đăng ký thông tin thành công. Đội ngũ CSKH sẽ liên hệ trực tiếp để kích hoạt dịch vụ cho bạn nhanh nhất!
ĐÓNG