在k8s集群中使用helm安装wordpress

前置条件

需要自己搭建一个nfs服务器作为集群的持久化存储,因为局域网中已经有一台TrueNas服务器,所以这里不再介绍nfs服务的搭建过程。

安装Helm

helm就是一个k8s集群下的包管理工具,类似与debian系统下的apt,安装方式参考:官方文档。helm需要安装在k8s的管理节点,或者master节点

使用系统的包管理工具进行安装,具体操作如下,这种方式可能需要科学上网。其实helm就是一个二进制的可执行文件,也可以参考官方文档自己使用其它方式安装。

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm

安装ingress-nginx

添加仓库

# 添加仓库
helm repo add ingress-nginx  https://kubernetes.github.io/ingress-nginx
# 导出配置文件
helm show values ingress-nginx/ingress-nginx > ingress-nginx-values.yaml

修改ingress-nginx-values.yaml如下:

controller:
  name: controller
  image:
    registry: docker.io
    image: connor147/ingress-nginx-controller
    tag: "v1.7.0"
    digest:
    digestChroot:

  kind: DaemonSet

  service:
    type: NodePort
    nodePorts:
      http: 32080
      https: 32443
      tcp:
        8080: 32808

  admissionWebhooks:
    patch:
      enabled: true
      image:
        registry: docker.io
        image: connor147/ingress-nginx-kube-webhook-certgen
        tag: v20230312-helm-chart-4.5.2-28-g66a760794
        digest:

配置文件的修改点:

  • 修改了镜像仓库地址,由于registry.k8s.io无法访问,这里重新打包了镜像到dockerhub上了。
  • controller.kind 改成了DaemonSet,原来是Deployment
  • controller.service.type 改成了NodePort,原来是LoadBalance

根据配置文件安装(这里创建了命名空间ingress-nginx)

helm install -f ingress-nginx-values.yaml ingress-nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --create-namespace

在安装过完之后如果想要修改配置,可以使用helm update命令(需要指定命名空间)

helm -n wordpress upgrade -f ingress-nginx-values.yaml wordpress ingress-nginx/ingress-nginx

创建pv

要使用NFS持久化卷,首先要在所有的worker节点安装nfs-common(nfs的客户端),否则无法将nfs目录挂载到pv。

apt install nfs-common

新建一个pv.yaml文件,这里创建了两个pv,大小都是30G。由于大小相同为了按照我们想要的方式绑定pv,所以指定了两个不同的storageClassName。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: wordpress-pv

spec:
  storageClassName: nfs-z590-wp-www  # 注意这个字段的值,后面wordpress的配置会用到
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 30Gi

  nfs:
    path: /***/wordpress/www  # 你自己的nfs共享路径
    server: *******     # nfs服务器地址,可以是ip地址,也可以是域名
---

apiVersion: v1
kind: PersistentVolume
metadata:
  name: wordpress-mariadb-pv

spec:
  storageClassName: nfs-z590-wp-mariadb  # 注意这个字段的值,后面wordpress的配置会用到
  accessModes:
    - ReadWriteOnce
  capacity:
    storage: 30Gi

  nfs:
    path: /***/wordpress/mysql # 你自己的nfs共享路径
    server: *******    # nfs服务器地址,可以是ip地址,也可以是域名

通过pv.yaml创建pv

kubectl apply -f pv.yaml
  • 在k8s集群中,pv是全局的资源,所以不需要指定namespace,指定了也没用
  • 挂载的nfs目录要注意权限问题,最好在服务端直接将权限改成777

安装wordpress

添加bitnami仓库

helm repo add bitnami https://charts.bitnami.com/bitnami

导出配置

helm show values bitnami/wordpress > bitnami-wordpress-values.yaml

修改配置:bitnami-wordpress-values.yaml

wordpressUsername: admin
wordpressPassword: "123456"
wordpressBlogName: K8s Wordpress!

service:
  type: ClusterIP

ingress:
  enabled: true
  ingressClassName: "nginx"
  hostname: wordpress.test.home    # 外部访问需要的域名

persistence:
  enabled: true
  storageClass: "nfs-z590-wp-www"  # 要与pv.yaml中的storageClassName相同
  accessModes:
    - ReadWriteOnce
  accessMode: ReadWriteOnce
  size: 30Gi

mariadb:
  enabled: true
  auth:
    database: bitnami_wordpress
    username: wp
    password: "123456"
  primary:
    persistence:
      enabled: true
      storageClass: "nfs-z590-wp-mariadb"  # 要与pv.yaml中的storageClassName相同
      accessModes:
        - ReadWriteOnce
      size: 30Gi

externalDatabase:
  host: localhost
  port: 3306
  user: wp
  password: "123456"
  database: bitnami_wordpress

memcached:
  enabled: true
  auth:
    enabled: false
    username: ""
    password: ""
  service:
    port: 11211

externalCache:
  host: localhost
  port: 11211

根据配置文件进行安装(这里创建了命名空间wordpress)

helm install -f bitnami-wordpress-values.yaml wordpress bitnami/wordpress --namespace wordpress --create-namespace

在安装过完之后如果想要修改配置,可以使用helm update命令(需要指定命名空间)

helm -n wordpress upgrade -f bitnami-wordpress-values.yaml wordpress bitnami/wordpress

安装完成

访问ingress需要域名,根据之前安装wordpress配置的域名,修改本机的hosts文件

192.168.32.209	wordpress.test.home  #ip地址可以是任一worker节点的ip

由于根据上面的配置文件,安装ingress-nginx时使用NodePort暴露的端口,http端口是32080,所有访问时需要加上端口号,最终效果如下

image-20230405150205562