====== 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 }}