IBM Cloud Private (無料のオンプレK8s SW製品) 最もシンプルな永続ボリュームの設定法


無料でダウンロードして試せる IBM Cloud Private Community Edition (以下ICP-CE) を利用して、[前回](https://qiita.com/MahoTakara/items/5c4515e80d61da258f00)はGlusterFSを利用する方法を紹介しましたが、今回は、最も簡単に永続ボリュームを設定する方法の紹介です。 ICP-CEをインストールしたLinuxサーバーの内蔵ディスクを永続ボリュームとして定義します。
ただし、１台のサーバーにマスターとノードを混在させている時だけ有効な方法です。


## ICP-CEへのログイン

kubectlを利用する前に、以下を実行しておきます。

```console
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から作っていきます。 サーバーのパスを設定するだけですから簡単ですね。


~~~hostpath-pv.yaml
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を適用します。

```console
kubectl create -f hostpath-pv.yaml
```

ICP-CEの管理画面 PersistentVolume
![スクリーンショット 2018-03-02 0.07.42.png](https://qiita-image-store.s3.amazonaws.com/0/42829/926ee0e8-8cdb-4be3-6dd8-9ba304ae919a.png "スクリーンショット 2018-03-02 0.07.42.png")





## PVC定義のYAML

参考資料 https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims

次にPVCを作成します。

~~~hostpath-pvc.yaml
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を適用します。

```console
kubectl create -f hostpath-pv.yaml
```


ICP-CEの管理画面 PersistentVolumeClaim

![スクリーンショット 2018-03-02 0.08.14.png](https://qiita-image-store.s3.amazonaws.com/0/42829/e7f8d247-3631-0095-f273-09cd5ac7d8ea.png "スクリーンショット 2018-03-02 0.08.14.png")



## 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です。

~~~nginx_pod3.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
~~~


ポッド起動して、ノードポートを開設します。

```console
kubectl create -f nginx_pod3.yaml
```


## Curlでアクセスした結果

```console
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>
```


簡易にコンテンツを作って、再テスト

```console
imac:icp maho$ curl http://192.168.1.100:31593/
Hello World from Hostpath
```





# まとめ

ICP-CEを１台のサーバーに設定する事も多いと思うので、簡単にhostpathで永続ストレージを作る事の方が多いと思うので、そういった時の参考になれば幸いです。 それから、CNCFのKubernetesの認証を受けた製品なので、当然なんでしょうけど、IBM Cloud Private は、[Kuberntes のドキュメント](https://kubernetes.io/docs/concepts/)を参照しながら hostpathの設定ができる事が確認できました。