LinodeのManaged Kubernetesサービス(LKE)上でOpenEBS NFS Provisionerを使って、WordPressをdeployしてみる。LKEクラスターは下記の環境。
linode-cli lke clusters-list ✘ 1
┌────────┬───────┬──────────────┬─────────────┬───────────────────┐
│ id │ label │ region │ k8s_version │ high_availability │
├────────┼───────┼──────────────┼─────────────┼───────────────────┤
│ 109026 │ lke2 │ ap-northeast │ 1.26 │ False │
└────────┴───────┴──────────────┴─────────────┴───────────────────┘
linode-cli lke pools-list 109026 ✘ 2
┌────────┬───────────────┬─────────────────────┬─────────────┬────────┐
│ id │ type │ id │ instance_id │ status │
├────────┼───────────────┼─────────────────────┼─────────────┼────────┤
│ 162782 │ g6-standard-1 │ 162782-6465b2c3de59 │ 46243910 │ ready │
│ 162782 │ g6-standard-1 │ 162782-6465b2c446d7 │ 46243912 │ ready │
│ 162782 │ g6-standard-1 │ 162782-6465b2c4afbc │ 46243911 │ ready │
└────────┴───────────────┴─────────────────────┴─────────────┴────────┘
OpenEBS Dynamic NFS Provisionerのインストール
helmレポジトリを追加
helm repo add openebs-nfs https://openebs.github.io/dynamic-nfs-provisioner
helm repo update
下記のhelmチャートを用意
nfsStorageClass:
backendStorageClass: "linode-block-storage"
helmでインストール
helm install -n openebs --create-namespace openebs-nfs openebs-nfs/nfs-provisioner -f openEBS-nfs-provisioner-values.yaml
deployのステータス確認
helm ls -n openebs
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
openebs-nfs openebs 1 2023-05-18 15:19:14.116389 +0900 JST deployed nfs-provisioner-0.10.0 0.10.0
nfs-rwx用StorageClass用manifestを作成
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: openebs-rwx
annotations:
openebs.io/cas-type: nfsrwx
cas.openebs.io/config: |
- name: NFSServerType
value: "kernel"
- name: BackendStorageClass
value: "linode-block-storage"
provisioner: openebs.io/nfsrwx
reclaimPolicy: Delete
上記manifestを適用
kubectl apply -f sc-nfs-rwx.yaml
StorageClassの確認
kubectl get storageclasses.storage.k8s.io
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
linode-block-storage linodebs.csi.linode.com Delete Immediate true 138m
linode-block-storage-retain (default) linodebs.csi.linode.com Retain Immediate true 138m
openebs-kernel-nfs openebs.io/nfsrwx Delete Immediate false 68m
openebs-rwx openebs.io/nfsrwx Delete Immediate false 115m
kubectl describe storageclasses.storage.k8s.io openebs-rwx
Name: openebs-rwx
IsDefaultClass: No
Annotations: cas.openebs.io/config=- name: NFSServerType
value: "kernel"
- name: BackendStorageClass
value: "linode-block-storage"
,kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass","metadata":{"annotations":{"cas.openebs.io/config":"- name: NFSServerType\n value: \"kernel\"\n- name: BackendStorageClass\n value: \"linode-block-storage\"\n","openebs.io/cas-type":"nfsrwx"},"name":"openebs-rwx"},"provisioner":"openebs.io/nfsrwx","reclaimPolicy":"Delete"}
,openebs.io/cas-type=nfsrwx
Provisioner: openebs.io/nfsrwx
Parameters: <none>
AllowVolumeExpansion: <unset>
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
MySQLセットアップ
下記と同様にLKE上にMySQLをセットアップ。
WordPressセットアップ
MySQLにWordPress用DB作成
create database wordpress;
create user hogehoge identified by 'hogehoge';
GRANT ALL PRIVILEGES ON wordpress.* TO hogehoge@'%';
FLUSH PRIVILEGES;
chartファイル作成
storageClass:”openebs-rwx”, access-Modes: “ReadWriteMany”にする。
wordpressUsername: hogehoge
wordpressPassword: "fugafuga"
existingSecret: ""
wordpressEmail: hogehoge@example.net
wordpressFirstName: wpadm
wordpressLastName: dok8s
wordpressBlogName: dok8s-blog
wordpressScheme: http
service:
type: ClusterIP
persistence:
enabled: true
storageClass: "openebs-rwx"
accessModes:
- ReadWriteMany
size: 10Gi
mariadb:
enabled: false
externalDatabase:
host: mysql.mysql
port: 3306
user: hogehoge
password: "fugafuga"
database: wordpress
existingSecret: ""
helmでインストール
helm install wordpress bitnami/wordpress --create--namespace wp -f wp-values.yml
インストール時は下記エラーが発生する。
cp: cannot create regular file '/bitnami/wordpress/wp-config.php': Permission denied
NFSボリューム内のパーミッションを確認。
kubectl exec -n openebs -it nfs-pvc-c68a5732-dbe0-40c5-94b7-d342ee367b62-78c6c7cd-6pwpn -c nfs-server -- bash
root@nfs-pvc-c68a5732-dbe0-40c5-94b7-d342ee367b62-78c6c7cd-6pwpn:/nfsshare # cd wordpress/
root@nfs-pvc-c68a5732-dbe0-40c5-94b7-d342ee367b62-78c6c7cd-6pwpn:/nfsshare # ls -ltr
total 4
drwxr-xr-x 2 root root 4096 Nov 19 03:13 wordpress
パーミッションを変更。
root@nfs-pvc-c68a5732-dbe0-40c5-94b7-d342ee367b62-78c6c7cd-6pwpn:/nfsshare # chmod 777 wordpress/
Podを再起動
kubectl -n wp scale deploy wordpress --replicas 0
kubectl -n wp scale deploy wordpress --replicas 1
deploy確認
helm ls -n wp ✘ 1
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
wordpress wp 1 2023-05-18 15:24:45.436539 +0900 JST deployed wordpress-16.1.5 6.2.1
k8sステータス確認
kubectl -n wp get all,pvc
NAME READY STATUS RESTARTS AGE
pod/wordpress-6dd798577-5bn6k 1/1 Running 0 80m
pod/wordpress-memcached-79db4454b4-tq84x 1/1 Running 0 80m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/wordpress ClusterIP 10.128.208.239 <none> 80/TCP,443/TCP 80m
service/wordpress-memcached ClusterIP 10.128.129.57 <none> 11211/TCP 80m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/wordpress 1/1 1 1 80m
deployment.apps/wordpress-memcached 1/1 1 1 80m
NAME DESIRED CURRENT READY AGE
replicaset.apps/wordpress-6dd798577 1 1 1 80m
replicaset.apps/wordpress-memcached-79db4454b4 1 1 1 80m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/wordpress Bound pvc-8ecc04c3-9790-429b-8aab-7b0d89076e04 10Gi RWX openebs-rwx 80m
Horizontal Pod Scaling
RWO(ReadWriteOnce)のPVCで水平スケーリングは出来ないが、ReadWriteManyのNFS PVCでは水平スケーリングが可能なので、Pod数を増やしてみる。
kubectl -n wp scale deploy wordpress --replicas 3
増えた
kubectl -n wp get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
wordpress-6dd798577-5bn6k 1/1 Running 0 88m 10.2.1.8 lke109026-162782-6465b2c3de59 <none> <none>
wordpress-6dd798577-5f7fl 1/1 Running 0 3m58s 10.2.2.9 lke109026-162782-6465b2c4afbc <none> <none>
wordpress-6dd798577-cvhk7 1/1 Running 0 3m58s 10.2.0.8 lke109026-162782-6465b2c446d7 <none> <none>
各PodからNFSマウントされている
kubectl exec -n wp -it wordpress-6dd798577-5bn6k -c wordpress -- df -h /bitnami/wordpress
Filesystem Size Used Avail Use% Mounted on
10.128.39.109:/wordpress 9.8G 175M 9.6G 2% /bitnami/wordpress
kubectl exec -n wp -it wordpress-6dd798577-5f7fl -c wordpress -- df -h /bitnami/wordpress
Filesystem Size Used Avail Use% Mounted on
10.128.39.109:/wordpress 9.8G 175M 9.6G 2% /bitnami/wordpress
kubectl exec -n wp -it wordpress-6dd798577-cvhk7 -c wordpress -- df -h /bitnami/wordpress
Filesystem Size Used Avail Use% Mounted on
10.128.39.109:/wordpress 9.8G 175M 9.6G 2% /bitnami/wordpress
“10.128.38.109”が所謂NFS ServerのIPアドレス
kubectl -n openebs get all ✘ 130
NAME READY STATUS RESTARTS AGE
pod/nfs-pvc-8ecc04c3-9790-429b-8aab-7b0d89076e04-77b6648c88-l98nf 1/1 Running 0 94m
pod/openebs-nfs-nfs-provisioner-7fcbdc4b6b-7hsnm 1/1 Running 1 (79m ago) 99m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/nfs-pvc-8ecc04c3-9790-429b-8aab-7b0d89076e04 ClusterIP 10.128.39.109 <none> 2049/TCP,111/TCP 94m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/nfs-pvc-8ecc04c3-9790-429b-8aab-7b0d89076e04 1/1 1 1 94m
deployment.apps/openebs-nfs-nfs-provisioner 1/1 1 1 99m
NAME DESIRED CURRENT READY AGE
replicaset.apps/nfs-pvc-8ecc04c3-9790-429b-8aab-7b0d89076e04-77b6648c88 1 1 1 94m
replicaset.apps/openebs-nfs-nfs-provisioner-7fcbdc4b6b 1 1 1 99m