無料でダウンロードして試せる IBM Cloud Private Community Edition (以下ICP-CE) を利用して、前回はGlusterFSを利用する方法を紹介しましたが、今回は、最も簡単に永続ボリュームを設定する方法の紹介です。 ICP-CEをインストールしたLinuxサーバーの内蔵ディスクを永続ボリュームとして定義します。
ただし、1台のサーバーにマスターとノードを混在させている時だけ有効な方法です。
ICP-CEへのログイン
kubectlを利用する前に、以下を実行しておきます。
imac:icp maho$ bx pr login
Login method invokedAPI endpoint: https://192.168.1.100:8443
Username> admin
Password>
Authenticating...
OK
Select an account:
1. ICP Account (dcf61fd7b0971a2ef7ceb4faae004db7)
Enter a number> 1
Targeted account: ICP Account (dcf61fd7b0971a2ef7ceb4faae004db7)
imac:icp maho$ bx pr cluster-config mycluster
Configuring kubectl: /Users/maho/.bluemix/plugins/icp/clusters/mycluster/kube-config
Cluster "mycluster" set.
Context "mycluster-context" modified.
User "mycluster-user" set.
Context "mycluster-context" modified.
Switched to context "mycluster-context".
OK
Cluster mycluster configured successfully.
PV定義のYAML
参考資料 https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
参考資料を参照しながら、PVから作っていきます。 サーバーのパスを設定するだけですから簡単ですね。
kind: PersistentVolume
apiVersion: v1
metadata:
name: hostpath1
labels:
type: local
name: hostpath1
spec:
capacity:
storage: 300Gi
accessModes:
- ReadWriteMany
hostPath:
path: "/tmp/hostpath-vol-1"
type: DirectoryOrCreate
上記YAMLを適用します。
kubectl create -f hostpath-pv.yaml
PVC定義のYAML
参考資料 https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims
次にPVCを作成します。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: hostpath-pvc1
annotations:
volume.beta.kubernetes.io/storage-class: ""
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: "300Gi"
selector:
matchLabels:
name: hostpath1
上記YAMLを適用します。
kubectl create -f hostpath-pv.yaml
ICP-CEの管理画面 PersistentVolumeClaim
kubectl get での確認
以下、コマンドで状態を確認した結果です。
imac:icp maho$ kubectl get pv hostpath1
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
hostpath1 300Gi RWX Retain Bound default/hostpath-pvc1 14m
imac:icp maho$ kubectl get pvc hostpath-pvc1
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
hostpath-pvc1 Bound hostpath1 300Gi RWX 14m
ポッドからのHostpathで作った永続ボリュームの利用
ポッドとNodePortを作るYAMLです。
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod3
labels:
app: nginx-pod3
spec:
containers:
- name: nginx-pod
image: gcr.io/google_containers/nginx-slim:0.8
ports:
- name: web
containerPort: 80
volumeMounts:
- name: hostpath-vol1
mountPath: /usr/share/nginx/html
volumes:
- name: hostpath-vol1
persistentVolumeClaim:
claimName: hostpath-pvc1
---
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport-service3
spec:
type: NodePort
selector:
app: nginx-pod3
ports:
- protocol: TCP
port: 80
nodePort: 31593
ポッド起動して、ノードポートを開設します。
kubectl create -f nginx_pod3.yaml
Curlでアクセスした結果
imac:icp maho$ curl http://192.168.1.100:31593/
<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.11.1</center>
</body>
</html>
簡易にコンテンツを作って、再テスト
imac:icp maho$ curl http://192.168.1.100:31593/
Hello World from Hostpath
まとめ
ICP-CEを1台のサーバーに設定する事も多いと思うので、簡単にhostpathで永続ストレージを作る事の方が多いと思うので、そういった時の参考になれば幸いです。 それから、CNCFのKubernetesの認証を受けた製品なので、当然なんでしょうけど、IBM Cloud Private は、Kuberntes のドキュメントを参照しながら hostpathの設定ができる事が確認できました。