====== 20 Kubernetes GlusterFS Galera Wordpress ======
Kubernetes を使って Galeraで冗長化されたDB、GlusterFSで冗長化されたディスクを利用して
冗長化されたWordpressを作って完全冗長化してみる。
===== 1.GlusterFS =====
GlusterFSは、[[06_virtualization:05_container:18_kubernetes_glusterfs|こちら]] で作成したボリュームにディレクトリを作成して利用する。
==== wordpress用ディレクトリ ====
mount.glusterfs localhost:k8s-volume /mnt
mkdir /mnt/wordpress/
# ls /mnt/
pv01 wordpress
==== PV ====
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 ====
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 password|root_password|
|db.name|wordpress|
|db.user|wp_user|
|db.password|wp_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 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でマウントする。
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
{{tag>Kubernetes GlusterFS Galera Wordpress }}