永続ストレージの利用-DigitalOceanのkubernetes環境にwordpressを構築する06
永続ストレージの利用
最初は/var/www/htmlはイメージ化して利用する予定
でしたが、CMSには向いていないと思い永続ボリュームを利用することにしました。
- redisで利用しているものと同じNFSコントローラーを利用します。
- 料金は10GBの場合は$1のようです。
- redisのmanifestを転用して作成します。
- pvの方は不要でした。pvcのmanifestだけでpvの方も作成されます。
redisのpvcのmanifestをダウンロード
cd ~/work/doks-wp/dev/k8s
kubectl get pvc -A|grep redis
redis redis-data-redis-master-0 Bound pvc-b7222f8f-1247-4074-a73b-3697de6e63f7 5Gi RWX rwx-storage 30h
kubectl get pvc/redis-data-redis-master-0 -n redis -o yaml > pvc-redis.yaml
wordpressのpvc作成
cp -ip pvc-{redis,web}.yaml
vi pvc-web.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
volume.beta.kubernetes.io/storage-provisioner: openebs.io/nfsrwx
volume.kubernetes.io/storage-provisioner: openebs.io/nfsrwx
name: doks-wp-dev-data-pvc
namespace: doks-wp
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: rwx-storage
volumeMode: Filesystem
kubectl apply -f pvc-web.yaml
kubectl get pv | grep doks
pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e 10Gi RWX Delete Bound doks-wp/doks-wp-dev-data-pvc rwx-storage 29h
kubectl get pvc -A | grep doks
doks-wp doks-wp-dev-data-pvc Bound pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e 10Gi RWX rwx-storage 29h
STATUSがBoundは利用されている状態となります。
初回のデータコピーどうする?
幸いworkerノードにはコンソール上からsshできるので、ローカルとsshしてもってきます。
- workerノードにはssh出来ませんでしたので、workerノードから家に繋ぐようにします。
事前準備
- ssh鍵の登録
- Settings > Security SSH Keys > Add SSH Key
- コンソールに繋いでいるIPアドレスの操作端末のssh公開鍵を登録
- digitalocean のfirewallのpublic側でsshをanyで許可(実際には外部からworkerノードに直接つながらないので問題ありません。)コンソール接続に必要です。(外部-->digitaloceanネットワーク上からproxyでsshしているようです)また、一定時間経過でこの設定は消えるようです。
PVCのボリューム名を特定
local
kubectl get pvc -n doks-wp
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
doks-wp-dev-data-pvc Bound pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e 10Gi RWX rwx-storage 2d19h
workerノードにてマウントされたディレクトリを特定
Droplets > poolXXX > Console
root@pool-15ef8usof-x44tj:~# df -h | grep pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e
10.245.42.82:/ 9.8G 79M 9.2G 1% /var/lib/kubelet/pods/7ea6754c-b9e0-4629-88b7-07697644e856/volumes/kubernetes.io~nfs/pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e
root@pool-15ef8usof-x44tj:~# ls -ltr /var/lib/kubelet/pods/7ea6754c-b9e0-4629-88b7-07697644e856/volumes/kubernetes.io~nfs/pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e
drwx------ 2 www-data www-data 16384 Dec 31 06:40 lost+found
root@pool-15ef8usof-x44tj:~#
root@pool-15ef8usof-xvy6a:~# cat rsync-dev.sh
#!/bin/bash
#set -eu
PVC=pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e
CHK=`df -h | grep $PVC | awk '{print $6}'`
if [ $? != 0 ]; then
exit 1
fi
TGT=$CHK
REMOTE=home:/home/ocarina/work/doks-wp/docker/files/html
if [ "$2" = "yes" ]; then
OPT="--delete -av --exclude=lost+found"
else
OPT="--delete -avn --exclude=lost+found"
fi
function rsync_get ()
{
rsync $OPT -e "ssh -p22221" ${REMOTE}/ ${TGT}/
}
function rsync_put ()
{
rsync $OPT ${TGT}/ -e "ssh -p22221" ${REMOTE}/
}
if [ "$1" = "get" ]; then
rsync_get
elif [ "$1" = "put" ]; then
rsync_put
else
echo "error"
exit 1
fi
dry-runして問題なければ実行します。
rsync-dev.sh get yes
root@pool-15ef8usof-x44tj:~# ls -ltr /var/lib/kubelet/pods/7ea6754c-b9e0-4629-88b7-07697644e856/volumes/kubernetes.io~nfs/pvc-37792aaa-506a-4686-8fbc-99d53acf5e3e| tail -n1
-rw-rw-rw- 1 www-data www-data 4076 Dec 31 08:56 wp-config.php
root@pool-15ef8usof-x44tj:~#
PVボリュームのpodへのマウント
https://kubernetes.io/ja/docs/concepts/storage/volumes/
- .spec.volumesでPodに提供するボリュームを指定
- .spec.containers[*].volumeMountsでそれらのボリュームをコンテナにマウントする場所を宣言
backup
kubectl get deployment/doks-wp-dev-web -n doks-wp -o yaml > Deployment-doks-wp-web.yaml
editかapplyで適用します。
kubectl edit deployment/doks-wp-dev-web -n doks-wp
or
vi Deployment-doks-wp-web.yaml
kubdctl apply -f Deployment-doks-wp-web.yaml
編集内容
.spec.volumes
- name: doks-wp-dev-storage
persistentVolumeClaim:
claimName: doks-wp-dev-data-pvc
.spec.containers[*].volumeMounts
- mountPath: /var/www/html
name: doks-wp-dev-storage