#初めに
共有ストレージが欲しかったんや。
NASでNFS使ってもよかったけど、メンテナスするときにサーバ全体を停止させるのが面倒。
だったらHCIライクにすればよいのではと。
#前提
・自宅でKubernetes環境を構築(3台)
・GlusterFS構築済み
#目的
共有ストレージを設定する。
#GlusterFSの構成
[root]# gluster peer status
Number of Peers: 2
Hostname: etcd-master3
Uuid: 36d78117-e3ba-4bcc-b8bd-aa53109b7de7
State: Peer in Cluster (Connected)
Hostname: etcd-master2
Uuid: 03b802d9-dc51-4105-91b6-8720baabe80e
State: Peer in Cluster (Connected)
[root]#
#Endpointsの設定
glusterfs-endpoint.yaml
kind: Endpoints
apiVersion: v1
metadata:
name: glusterfs
subsets:
- addresses:
- ip: "192.168.1.21" ★GlusterFS peer ipアドレスを指定する。
ports:
- port: 1
- addresses:
- ip: "192.168.1.22" ★GlusterFS peer ipアドレスを指定する。
ports:
- port: 1
- addresses:
- ip: "192.168.1.23" ★GlusterFS peer ipアドレスを指定する。
ports:
- port: 1 ★適当に指定
上記ファイルを適用する。
$ kubectl create -f glusterfs-endpoint.yaml
#Serviceの設定
glusterfs-service.yaml
kind: Service
apiVersion: v1
metadata:
name: glusterfs
spec:
ports:
- port: 1 ★endpointで指定したポート番号
上記ファイルを適用する。
$ kubectl create -f glusterfs-service.yaml
これで準備おっけー
#ボリュームの準備
/home/glusterfs/ 配下にディレクトリを作成してGlusterFS用の領域としている。
各サーバで実行する。
[root]# mkdir /home/glusterfs/docker-registry/
□ etcd-master1
□ etcd-master2
□ etcd-master3
###ボリュームを3台でミラーする構成を取る。
いずれか1台で実行する。
3台でミラー構成を構築
[root]# gluster vol create docker-registry replica 3 etcd-master1:/home/glusterfs/docker-registry/ etcd-master2:/home/glusterfs/docker-registry/ etcd-master3:/home/glusterfs/docker-registry/
ボリューム作成
[root]# gluster vol set docker-registry
ボリュームの提供を開始する。
[root]# gluster vol start docker-registry
###作成したボリュームを確認する。
[root]# gluster vol status
Status of volume: docker-registry
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick etcd-master1:/home/glusterfs/docker-r
egistry 49158 0 Y 13108
Brick etcd-master2:/home/glusterfs/docker-r
egistry 49158 0 Y 5667
Brick etcd-master3:/home/glusterfs/docker-r
egistry 49158 0 Y 10874
Self-heal Daemon on localhost N/A N/A Y 13131
Self-heal Daemon on etcd-master2 N/A N/A Y 5692
Self-heal Daemon on etcd-master3 N/A N/A Y 10951
Task Status of Volume docker-registry
------------------------------------------------------------------------------
There are no active volume tasks
###ボリュームをマウントし、ディレクトリ作成
[root]# mount -t glusterfs localhost:docker-registry /mnt
[root]# mkdir /mnt/regi-pv
#ボリューム定義
pv.yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: regi-docker-registry-pv
labels:
name: regi-docker-registry-pv
spec:
accessModes:
- ReadWriteMany
capacity:
storage: 20Gi ★20GiB分確保する
glusterfs:
endpoints: glusterfs
path: docker-registry/regi-pv ★作成したボリューム/ディレクトリ
readOnly: false
上記ファイルを適用する。
$ kubectl create -f pv.yaml
#ボリューム要求
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: regi-docker-registry-pvc
name: regi-docker-registry-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
selector:
matchLabels:
name: regi-docker-registry-pv
status: {}
上記ファイルを適用する。
$ kubectl create -f pvc.yaml
#ボリュームの確認
[root]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
regi-docker-registry-pv 20Gi RWX Retain Bound default/regi-docker-registry-pvc 8s
[root]#
[root]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
regi-docker-registry-pvc Bound regi-docker-registry-pv 20Gi RWX 45s
[root]#
以上。