Деплой сайта WordPress в кластере Kubernetes

Автор: | 04.01.2022

Данная статья подразумевает, что в нашем кластере Kubernetes уже установлены сервисы обеспечивающие основную инфраструктуру: HAProxy-Ingress, OpenEBS и cert-manager. А так же для класса clusterissuers.cert-manager.io уже создан эмитент "letsencrypt", для получения доверенного сертификата нашего сайта.

Подробнее о настройке кластера-Kubernetes можно прочитать в этой статье.

Используемые helm-чарты от bitnami:

И так сначала добавим соответствующи репозиторий helm:

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

Затем скачиваем файл values.yaml для helm-чарта чтобы изменить в нем базовые настройки нашего релиза. Ниже приведен листинг этого файла, в котором отображены только затронутые значения, остальная часть содержимого файла оставлена как есть:

global:
  storageClass: "openebs-hostpath"

wordpressUsername: admin
wordpressPassword: "secureAdminPassword"
wordpressEmail: admin@email.com
wordpressBlogName: My Mega Blog!
wordpressScheme: https
replicaCount: 2

service:
  type: ClusterIP

ingress:
  enabled: true 
  ingressClassName: "haproxy"
  hostname: site-domain-name.com
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt
  tls: true

mariadb:
  enabled: true
  architecture: standalone
  auth:
    rootPassword: "dbRootUserPassword"
    database: bitnami_wordpress
    username: bn_wordpress
    password: "passwordForDatabaseUser"

Устанавливаем:

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

В случае успешной установки должны получить следующие статусы новых сущностей:

  • kubectl get services -n my-site-namespace
    NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    wordpress           ClusterIP   10.108.11.225            80/TCP,443/TCP   18h
    wordpress-mariadb   ClusterIP   10.103.183.0             3306/TCP         18h
  • kubectl -n my-site-namespace get deployments
    NAME         READY   UP-TO-DATE   AVAILABLE   AGE
    wordpress    2/2     2            2           18h
  • kubectl -n my-site-namespace get ingress
    NAME         CLASS     HOSTS                 ADDRESS       PORTS     AGE
    wordpress    haproxy   site-domain-name.com  192.168.0.3   80, 443   18h
  • kubectl -n my-site-namespace get certificate
    NAME                       READY   SECRET                     AGE
    site-domain-name.com-tls   True    site-domain-name.com-tls   18h    
  • kubectl -n my-site-namespace get pvc
    NAME                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    data-wordpress-mariadb-0   Bound    pvc-88bbf4fb-8ed5-47a1-8e08-123456abcdef   8Gi        RWO            openebs-hostpath   18h
    wordpress                  Bound    pvc-88dbb147-abba-45c7-9739-abcdef123456   10Gi       RWO            openebs-hostpath   18h        
Установка phpMyAdmin [опционально]

Сам принцип установки аналогичен. Берем файл values.yaml и так же вносим в него необходимые правки:

ingress:
  enabled: true
  hostname: phpmyadmin.local
  pathType: ImplementationSpecific
  annotations:
    kubernetes.io/ingress.class: haproxy

db:
  allowArbitraryServer: true
  port: 3306
  host: "wordpress-mariadb"

Устанавливаем:

helm install phpmyadmin -f values.yaml bitnami/phpmyadmin --namespace=my-site-namespace --create-namespace