展开菜单
首页 精品内容 本月促销 装机必备 Windows macOS软件 IOS软件 Android AI PDF教程 专题
全部分类

当前位置:

首页 > 编程开发 > 使用k8s部署wordpress的完整流程

使用k8s部署wordpress的完整流程

一、部署流程 在Kubernetes上部署WordPress,整体思路其实不算复杂,但涉及的环节比较多。先梳理一下大致步骤: 制作服务镜像:准备基础镜像、代码文件和Dockerfile,构建出包含Nginx+PHP+WordPress的容器镜像。 制作Kubernetes资源:确定服务运行模式(内部

一、部署流程

在Kubernetes上部署WordPress,整体思路其实不算复杂,但涉及的环节比较多。先梳理一下大致步骤:

  1. 制作服务镜像:准备基础镜像、代码文件和Dockerfile,构建出包含Nginx+PHP+WordPress的容器镜像。
  2. 制作Kubernetes资源:确定服务运行模式(内部还是对外)、选择控制器(Deployment/StatefulSet)、是否需要后端存储(PVC)、是否需要Service和Ingress等。
  3. 运行数据库:可以集群内跑MySQL,也可以对接外部已有的MySQL。
  4. 部署WordPress应用:挂载配置文件、共享存储、暴露服务。
  5. 发布并验证:通过Ingress域名访问,完成安装。

下面一步步来走一遍。

二、下载代码

首先从WordPress官网下载最新版本(这里用的是6.0中文版),解压后进入目录。

[root@testserver01 ~]# wget  --no-check-certificate https://cn.wordpress.org/wordpress-6.0-zh_CN.tar.gz
[root@testserver01 ~]# tar xf wordpress-6.0-zh_CN.tar.gz
[root@testserver01 ~]# cd wordpress

然后需要准备wp-config.php。复制示例文件,并把数据库连接信息改成占位符变量,方便后续通过环境变量动态注入。同时Authentication的key可以保留默认生成的(生产环境建议单独生成),后续也可以通过环境变量覆盖。

[root@testserver01 wordpress]# cp wp-config-sample.php wp-config.php
[root@testserver01 wordpress]# vim wp-config.php
R4V}+()^]Y>db|Y8@yY-;|hemOR|VA/5MUP;h7E&yR*FVYO9a?Rq');
// ... 其余密钥省略 ...
$table_prefix = 'wp_';
define( 'WP_DEBUG', false );
/* 停止编辑,开始发布 */
require_once ABSPATH . 'wp-settings.php';

三、Dockerfile

构建镜像前需要安装Nginx和PHP。由于YUM安装过程中网络可能较慢,可以提前把RPM包下载到本地,再复制进镜像,这样构建更快也更稳定。

[root@testserver01 ~]# rpm -ivh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
[root@testserver01 ~]# yum install --downloadonly --downloaddir=./download nginx php71w-fpm php71w-xsl php71w php71w-ldap php71w-cli php71w-common php71w-devel php71w-gd php71w-pdo php71w-mysqL php71w-mbstring php71w-bcmath php71w-mcrypt 
# 如果还缺依赖包,执行下条命令
[root@testserver01 ~]# yum install --downloadonly --downloaddir=./download gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients postgresql-devel libxslt-devel libmcrypt libmcrypt-devel

编写Dockerfile,基于CentOS 7,将RPM包复制进去安装,再复制WordPress代码,配置Nginx和PHP-FPM的用户,最后暴露80端口,使用自定义的entrypoint脚本启动。

[root@testserver01 wordpress]# vim Dockerfile
FROM docker.m.daocloud.io/centos:7
ENV Web_Dir="/usr/share/nginx/html"
RUN mkdir /download
COPY ./download/*.rpm /download/
RUN rpm -ivh --nodeps --force /download/*.rpm
RUN rm -rf ${Web_Dir}  /download/
COPY . ${Web_Dir}
RUN useradd -M www &&  \
    sed -i '/^user/c user www;' /etc/nginx/nginx.conf && \
    sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf && \
    sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf && \
    chown -R www.www  ${Web_Dir} /var/lib/nginx/
EXPOSE 80
COPY ./entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["bash","-c","/entrypoint.sh"]

启动脚本的作用是在容器启动时替换wp-config.php中的数据库连接变量,然后启动PHP-FPM和Nginx。

[root@testserver01 wordpress ]# vim entrypoint.sh
#1.替换变量
Wordpress_File=/usr/share/nginx/html/wp-config.php
sed -i s/{DB_NAME}/${DB_NAME:-wordpress}/g ${Wordpress_File}
sed -i s/{DB_USER}/${DB_USER:-wordpress}/g ${Wordpress_File}
sed -i s/{DB_PASSWORD}/${DB_PASSWORD:-wordpress}/g ${Wordpress_File}
sed -i s/{DB_HOST}/${DB_HOST:-localhost}/g ${Wordpress_File}
#2. 启动nginx php
php-fpm && \
nginx -g "daemon off;"

最后构建镜像并推送到私有仓库(Harbor)。

[root@testserver01 wordpress ]# docker build -t harbor.xxxx.com/base/wordpress:v6.0 -f Dockerfile .
[root@testserver01 wordpress ]# docker push harbor.xxxx.com/base/wordpress:v6.0

四、运行数据库服务

数据库有两种选择:集群内跑MySQL,或者使用集群外已有的MySQL。

集群内MySQL

使用StatefulSet部署MySQL,通过Headless Service实现稳定网络标识。同时创建一个ConfigMap来配置MySQL的my.cnf参数。

[root@master01 wordpress]# cat 01-mysql.yaml
### headless
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
spec:
  clusterIP: None
  selector:
    app: mysql
  ports:
  - port: 3306
    targetPort: 3306
---
### statefulset
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql-svc
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      nodeName: node01.xxxx.com
      containers:
      - name: db
        image: harbor.xxxx.com/base/mysql:5.7
        imagePullPolicy: Always
        securityContext:
          privileged: true
        resources:
          requests:
            cpu: 1
            memory: 2Gi
          limits:
            cpu: 2
            memory: 4Gi
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: 12345678
        - name: MYSQL_DATABASE
          value: wordpress
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: data
          mountPath: /var/lib/mysql
        - name: mysqlconf
          mountPath: /etc/my.cnf
          subPath: my.cnf
      volumes:
      - name: mysqlconf
        configMap:
          name: mysql-config
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      storageClassName: "nfs-provisioner-storage"
      accessModes:
      - "ReadWriteMany"
      resources:
        requests:
          storage: "20Gi"
[root@master01 wordpress]# cat mysql_conf.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
data:
  my.cnf: |-
    [mysqld]
    max_connections = 100
    key_buffer_size = 32M
    max_allowed_packet = 16M
    thread_stack = 192K
    sort_buffer_size = 256K
    read_buffer_size = 256K
    read_rnd_buffer_size = 256K
    myisam_sort_buffer_size = 64M
    innodb_buffer_pool_size = 128M

集群外部MySQL

如果不想在K8s集群内跑MySQL,也可以直接使用外部的MySQL实例。只需创建一个无头Service和一个Endpoints对象,指向外部数据库的IP和端口。

[root@harbor002 wordpress]# docker run -p3306:3306 -e "MYSQL_ROOT_PASSWORD=oldxu3957" harbor.xxxx.com/base/mysql:5.7
[root@master01 wordpress]# vim 06-external-mysql.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-external
spec:
  ports:
  - port: 3306
    targetPort: 3306
  clusterIP: None
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-external
subsets:
- addresses:
  - ip: 192.168.20.232
  ports:
  - port: 3306

五、准备nginx配置文件

WordPress需要Nginx解析PHP请求,所以先写一个简单的Nginx虚拟主机配置,处理静态文件和PHP转发。

[root@master01 wordpress]# cat wp.conf
server {
    listen 80;
    server_name _;
    root /usr/share/nginx/html;
    location / {
        index index.php;
    }
    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

然后将这个配置文件挂载到集群中,使用ConfigMap来管理。

[root@master01 wordpress]# kubectl create configmap nginxconfs --from-file=./wp.conf

六、准备链接数据库Secret

WordPress启动时需要知道数据库连接信息,这些敏感数据应该放在Kubernetes Secret中,而不是硬编码在镜像里。下面创建一个Secret,将数据库名、用户名、密码、主机地址都存进去。

[root@master01 wordpress]# cat 04-wp-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: wordpress-secret
stringData:
  DB_NAME: wordpress
  DB_USER: root
  DB_PASSWORD: oldxu3957
  DB_HOST: mysql-external.default.svc.cluster.local   # 这里指向外部MySQL的Service域名

七、准备pvc共享图片

WordPress的上传图片目录(wp-content/uploads)需要持久化,并且当Pod重新调度时数据不能丢失。这里使用StorageClass动态创建PVC,挂载到NFS上。

[root@master01 wordpress]# cat 03-wp-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: wordpress-data
spec:
  storageClassName: "nfs-provisioner-storage"
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 10Gi

八、部署wordpress

万事俱备,最后创建Deployment和Service。Deployment中挂载了Nginx配置的ConfigMap、图片存储的PVC,并通过Secret注入环境变量。

[root@master01 wordpress]# vim 02-wordpress.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: harbor.iha vecar.com/base/wordpress:v6.0
        ports:
        - containerPort: 80
        envFrom:
        - secretRef:
            name: wordpress-secret
        volumeMounts:
        - name: config
          mountPath: /etc/nginx/conf.d/
        - name: images
          mountPath: /usr/share/nginx/html/wp-content/uploads/
      volumes:
      - name: config
        configMap:
          name: nginxconfs
      - name: images
        persistentVolumeClaim:
          claimName: wordpress-data
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress-svc
spec:
  selector:
    app: wordpress
  ports:
  - port: 80
    targetPort: 80

九、发布wordpress

最后一步,通过Ingress将WordPress暴露到集群外,绑定一个域名(比如wordpress.xxxx.com)。

[root@master01 wordpress]# cat 05-wordpress-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: wordpress-ingress
spec:
  ingressClassName: "nginx"
  rules:
  - host: "wordpress.xxxx.com"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: wordpress-svc
            port:
              number: 80

配置完成后,在浏览器访问http://wordpress.xxxx.com,就能看到WordPress的安装界面了。填写数据库信息(这里数据库已经预先创建好,直接使用root用户即可),然后完成安装。

使用k8s部署wordpress的完整流程

至此,整个Kubernetes部署WordPress的流程就结束了。从镜像构建、数据库搭建、配置注入到服务发布,每一步都通过Kubernetes原生资源实现,既灵活又易于维护。如果后续需要扩展,只需要调整副本数或更新镜像即可。

本文内容来源于网友投稿,如有侵权请联系删除。
作者最新文章
编程开发
相关文章 更多
精品专题 更多
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

macOS软件

正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

Mac软件 更多
photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

灵活计算器
灵活计算器

灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

赤友清理大师
赤友清理大师

赤友清理大师是一款为 Mac 设计的智能清理优化工具,可精准扫描垃圾、大文件、重复文件等,释放磁盘空间。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

图几
图几

图几是一款适用于 macOS 的截图、标注与美化工具,支持离线操作保障隐私。界面整理和高频系统操作被放到一起考虑,桌面或窗口内容一多时,管理起来会更省心。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。

Mountain Duck
Mountain Duck

Mountain Duck 是一款能将多个网盘挂载到本地的工具,像本地磁盘一样使用网盘。清理链路的完整性会更好一些,做应用卸载、残留处理和空间整理时,通常能少走很多手动排查步骤。

WINDOWS 更多
3dmax(3ds max)
3dmax(3ds max)

Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

photoshop
photoshop

Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

Blender
Blender

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Windows 10
Windows 10

Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。

极度公式
极度公式

极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

密码键盘
密码键盘

密码键盘是一款兼具安全性与便捷性的高效密码管理器。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

思源笔记
思源笔记

思源笔记是一款本地笔记软件,提供所见即所得的编辑方式,为长文写作带来顺滑的体验。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

傲梅轻松备份
傲梅轻松备份

傲梅轻松备份是一款专业易用的数据备份软件,为重要数据提供安全保障。日常使用里的持续防护和信息管理会更突出,适合把安全控制放进长期使用流程中的场景。

Office 365 简体中文
Office 365 简体中文

一款文字处理软件,一种订阅式的跨平台办公软件,基于云平台提供多种服务,通过将 Excel 和 Outlook 等应用与 OneDrive 和 Microsoft Teams 等强大的云服务相结合,Office 365 可让任何人使用任何设备随时随地创建和共享内容。

Mac
Wise Folder Hider Pro
Wise Folder Hider Pro

Wise Folder Hider Pro 是一款专业级文件和文件夹隐藏加密软件,为私密数据添加多重保护。高频操作更强调就近处理,浏览、整理和跨目录移动文件时,来回切换和重复点击都会少很多。

WALTR PRO
WALTR PRO

WALTR是一款电脑至iOS文件传输转换工具,操作简单,快速实现文件识别与传送。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。

CodeExpander
CodeExpander

CodeExpander 是一款快捷短语输入增强工具,通过键入缩写自动展开为自定义文段,提升工作效率。任务管理和过程控制会更完整,持续下载、批量同步或需要稳定传输流程的场景会更适合它。