bitnamicharts/wordpressWordPress 是全球最流行的博客和内容管理平台。它功能强大且简单易用,从学生到跨国公司,都使用它来构建美观、实用的网站。
Bitnami WordPress Helm Chart 用于在 Kubernetes 集群上通过 Helm 包管理器引导 WordPress 部署。该 Chart 还集成了 Bitnami MariaDB Chart(满足 WordPress 的数据库需求)和 Bitnami Memcached Chart(用于缓存数据库查询)。
WordPress 官方概述
.htaccess 配置consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress
使用指定发布名称安装:
consolehelm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/wordpress
需替换占位符:
REGISTRY_NAME(如registry-1.docker.io)和REPOSITORY_NAME(如bitnamicharts)
查看所有发布:
consolehelm list
Bitnami Charts 允许为所有容器设置资源请求和限制,通过 resources 参数配置。生产环境必须设置资源请求,并根据实际需求调整。示例:
yamlresources: requests: cpu: 500m memory: 512Mi limits: cpu: 1000m memory: 1Gi
也可使用 resourcesPreset 预设(如 small、medium、large),但生产环境建议手动配置以适配具体需求。
Bitnami Charts 在首次启动时配置凭证,后续更新需手动操作:
SECRET_NAME、PASSWORD 和 SMTP_PASSWORD):
shellkubectl create secret generic SECRET_NAME \ --from-literal=wordpress-password=PASSWORD \ --from-literal=smtp-password=SMTP_PASSWORD \ --dry-run -o yaml | kubectl apply -f -
metrics.enabled=true,将部署包含 apache-exporter 的 Sidecar 容器和 metrics Servicemetrics.serviceMonitor.enabled=true,自动创建 ServiceMonitor 资源禁用内置 MariaDB 并连接外部数据库:
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress \ --set mariadb.enabled=false \ --set externalDatabase.host=myexternalhost \ --set externalDatabase.user=myuser \ --set externalDatabase.password=mypassword \ --set externalDatabase.database=mydatabase \ --set externalDatabase.port=3306
若数据库包含现有 WordPress 数据,需设置
wordpressSkipInstall=true跳过安装向导
启用内置 Memcached
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress \ --set wordpressConfigureCache=true \ --set memcached.enabled=true
对接外部 Memcached
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress \ --set wordpressConfigureCache=true \ --set memcached.enabled=false \ --set externalCache.host=myexternalcachehost \ --set externalCache.port=***
启用 Ingress 以通过域名访问 WordPress:
yamlingress: enabled: true hostname: wordpress.example.com tls: true annotations: kubernetes.io/ingress.class: nginx cert-manager.io/cluster-issuer: letsencrypt-prod # 若使用 cert-manager # 额外主机配置(可选) extraHosts: - name: blog.example.com path: /blog annotations: {}
需确保集群已安装 Ingress 控制器(如 nginx-ingress-controller)
支持多种 TLS 证书管理方式:
手动创建 TLS Secret:
consolekubectl create secret tls wordpress-tls \ --cert=path/to/certificate.pem \ --key=path/to/private-key.pem
(Secret 名称需为 <ingress.hostname>-tls,如 wordpress.example.com-tls)
通过 cert-manager 自动签发: 在 Ingress 注解中添加:
yamlannotations: cert-manager.io/cluster-issuer: "letsencrypt-prod" acme.cert-manager.io/http01-ingress-class: "nginx"
Helm 管理证书:
yamlingress: tls: true secrets: - name: wordpress-tls certificate: | -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- key: | -----BEGIN RSA PRIVATE KEY----- ... -----END RSA PRIVATE KEY-----
wordpress-htaccess.conf(位于 /opt/bitnami/wordpress/),Apache 配置为 AllowOverride None(禁用 .htaccess).htaccess,需:
yamlallowOverrideNone: false htaccessPersistenceEnabled: true # 持久化 .htaccess 编辑
custom-htaccess),并配置:
yamlallowOverrideNone: true customHTAccessCM: custom-htaccess
使用 Velero 备份和恢复 WordPress 部署:
详细步骤参考 Bitnami Velero 备份指南
WordPress 数据和配置存储在容器的 /bitnami 路径,通过 Persistent Volume Claim 持久化:
storageClass: ""(依赖集群默认 StorageClass)yamlpersistence: enabled: true storageClass: "fast-storage" size: 10Gi accessMode: ReadWriteOnce
添加自定义环境变量:
yamlwordpress: extraEnvVars: - name: LOG_LEVEL value: "error" - name: WP_DEBUG value: "false"
或通过 ConfigMap/Secret 注入:
yamlwordpress: extraEnvVarsCM: custom-env-cm # 从 ConfigMap 注入 extraEnvVarsSecret: custom-env-secret # 从 Secret 注入
添加 Sidecar 容器(如日志收集器):
yamlsidecars: - name: log-exporter image: busybox:1.35 command: ["tail", "-f", "/var/log/wordpress/access.log"] volumeMounts: - name: logs mountPath: /var/log/wordpress
添加 Init 容器(如文件权限配置):
yamlinitContainers: - name: fix-permissions image: busybox:1.35 command: ["chmod", "-R", "755", "/bitnami/wordpress"] volumeMounts: - name: wordpress-data mountPath: /bitnami/wordpress
自定义 Pod 亲和性规则:
yamlaffinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app.kubernetes.io/name operator: In values: - mariadb topologyKey: "kubernetes.io/hostname"
或使用预设亲和性(来自 bitnami/common):
yamlpodAffinityPreset: soft # 软亲和性 podAntiAffinityPreset: hard # 硬反亲和性 nodeAffinityPreset: type: required key: workload values: ["wordpress"]
自 2025 年 8 月 28 日起,Bitnami 将升级其公共镜像仓库,推出Bitnami Secure Images计划,主要变更包括:
latest 标签,用于开发)docker.io/bitnamilegacy(不再更新)latest 标签的硬化镜像docker.io/bitnami 切换至 docker.io/bitnamilegacy更多详情见 Bitnami Secure Images 公告
| 参数名 | 描述 | 默认值 |
|---|---|---|
global.imageRegistry | 全局 Docker 镜像仓库 | "" |
global.imagePullSecrets | 全局镜像拉取密钥(数组) | [] |
global.defaultStorageClass | 持久卷默认 StorageClass | "" |
global.security.allowInsecureImages | 允许跳过镜像验证 | false |
global.compatibility.openshift.adaptSecurityContext | 适配 OpenShift restricted-v2 SCC 的安全上下文(移除 runAsUser 等),可选值:auto(自动检测)、force(强制适配)、disabled(禁用) | auto |
| 参数名 | 描述 | 默认值 |
|---|---|---|
kubeVersion | 覆盖 Kubernetes 版本 | "" |
nameOverride | 部分覆盖资源名称模板(保留发布名称) | "" |
fullnameOverride | 完全覆盖资源名称模板 | "" |
commonLabels | 添加到所有资源的标签 | {} |
commonAnnotations | 添加到所有资源的注解 | {} |
clusterDomain | Kubernetes 集群域名 | cluster.local |
extraDeploy | 额外部署的 Kubernetes 对象(数组) | [] |
usePasswordFiles | 以文件而非环境变量挂载凭证 | true |
diagnosticMode.enabled | 启用诊断模式(禁用探针,覆盖命令) | false |
diagnosticMode.command | 诊断模式下的容器命令 | ["sleep"] |
diagnosticMode.args | 诊断模式下的命令参数 | ["infinity"] |
| 参数名 | 描述 | 默认值 |
|---|---|---|
image.registry | WordPress 镜像仓库 | REGISTRY_NAME |
image.repository | WordPress 镜像仓库路径 | REPOSITORY_NAME/wordpress |
image.digest | 镜像摘要(格式:sha256:aa...),设置后将覆盖 tag | "" |
image.pullPolicy | 镜像拉取策略 | IfNotPresent |
image.tag | 镜像标签 | ""(默认使用 Chart 版本) |
多副本维护模式问题:执行需要维护模式的管理操作(如插件更新)时,仅会在一个副本上激活维护模式,其他副本可能继续处理请求导致不可预测结果。
解决方法:通过 WP CLI 在所有副本上手动激活/停用维护模式(假设发布名为 wordpress,3 个副本):
console# 激活维护模式 for i in 0 1 2; do kubectl exec $(kubectl get pods -l app.kubernetes.io/name=wordpress -o jsonpath="{.items[$i].metadata.name}") -c wordpress -- wp maintenance-mode activate done # 停用维护模式 for i in 0 1 2; do kubectl exec $(kubectl get pods -l app.kubernetes.io/name=wordpress -o jsonpath="{.items[$i].metadata.name}") -c wordpress -- wp maintenance-mode deactivate done
完整参数列表请参见 Bitnami WordPress Chart 文档


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务