ユーザ用ツール

サイト用ツール


サイドバー

このページの翻訳:



最近の更新



Tag Cloud

06_virtualization:05_container:20_kubernetes_glusterfs_galera_wordpress

20 Kubernetes GlusterFS Galera Wordpress

Kubernetes を使って Galeraで冗長化されたDB、GlusterFSで冗長化されたディスクを利用して
冗長化されたWordpressを作って完全冗長化してみる。

1.GlusterFS

GlusterFSは、こちら で作成したボリュームにディレクトリを作成して利用する。

wordpress用ディレクトリ

mount.glusterfs localhost:k8s-volume /mnt
mkdir /mnt/wordpress/
# ls /mnt/
pv01  wordpress

PV

wordpress-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: wordpress-pv
  labels:
    name: wordpress-pv
spec:
  accessModes:
  - ReadWriteMany
  capacity:
    storage: 1Gi
  glusterfs:
    endpoints: glusterfs
    path: k8s-volume/wordpress
    readOnly: false

作成

kubectl create -f wordpress-pv.yaml

PVC

wordpress-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  creationTimestamp: null
  labels:
    io.kompose.service: wordpress-pvc
  name: wordpress-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  selector:
     matchLabels:
       name: wordpress-pv
status: {}

作成

kubectl create -f wordpress-pvc.yaml

2.Galera

このGaleraはダウンしても、起動してきたとき勝手に同期してよく出来てます。

Galeraは、下記を利用
https://github.com/bitnami/charts/tree/master/bitnami/mariadb-galera/

repository

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

install

今回は、PVなしで、DB(wordpress)を作成してインストー
※本番では、persistence.existingClaimでPVCを指定して利用する。

root passwordroot_password
db.namewordpress
db.userwp_user
db.passwordwp_pass
helm install my-release \
  --set persistence.enabled=false \
  --set rootUser.password=root_password \
  --set db.user=wp_user \
  --set db.password=wp_pass \
  --set db.name=wordpress \
    bitnami/mariadb-galera

確認

serviceのClusterIPは、次のwordpressデプロイで利用します。

# kubectl get svc my-release-mariadb-galera
NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
my-release-mariadb-galera   ClusterIP   10.110.173.32   <none>        3306/TCP   89m

# kubectl  get pod -l app.kubernetes.io/name=mariadb-galera
NAME                          READY   STATUS    RESTARTS      AGE
my-release-mariadb-galera-0   1/1     Running   1 (48m ago)   75m
my-release-mariadb-galera-1   1/1     Running   0             74m
my-release-mariadb-galera-2   1/1     Running   0             74m
# kubectl exec -it my-release-mariadb-galera-0 -- bash


$ mysql -u root -p

MariaDB [(none)]> show status like 'wsrep_local_state_comment';
+---------------------------+--------+
| Variable_name             | Value  |
+---------------------------+--------+
| wsrep_local_state_comment | Synced |
+---------------------------+--------+
1 row in set (0.002 sec)

MariaDB [(none)]> show status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+
1 row in set (0.001 sec)


MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
| wordpress          |
+--------------------+
6 rows in set (0.038 sec)

3.Wordpress

1.GlusterFSで作成した wordpress-pvc をwordpress の/var/www/htmlでマウントする。

wordpress.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: wordpress
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
        - image: wordpress
          name: wordpress
          env:
          - name: WORDPRESS_DB_HOST
            value: 10.110.173.32:3306
          - name: WORDPRESS_DB_USER
            value: wp_user
          - name: WORDPRESS_DB_PASSWORD
            value: wp_pass
          ports:
            - containerPort: 80
              name: wordpress
          volumeMounts:
            - name: wordpress-local-storage
              mountPath: /var/www/html
      volumes:
        - name: wordpress-local-storage
          persistentVolumeClaim:
            claimName: wordpress-pvc

作成

kubectl create -f wordpress.yaml

4.ExternalIp用意

これで外部から見えるようになります。
後は、このexternalIPsをグローバルIPからロードバランスするだけ。

wordpress-externalip.yaml 
apiVersion: v1
kind: Service
metadata:
  name: external-ip
spec:
  type: ClusterIP
  externalIPs:
    - 172.16.0.93
    - 172.16.0.153
    - 172.16.0.166
  ports:
    - name: cluster-port
      port: 8080
      targetPort: 80
  selector:
    app: wordpress

作成

kubectl create -f wordpress-externalip.yaml
06_virtualization/05_container/20_kubernetes_glusterfs_galera_wordpress.txt · 最終更新: 2022/04/20 22:58 by matsui