Dockerを使うとアプリのポータビリティは上がるのですが、クラウド以外の環境だとストレージどうしよう問題も併せて付きまといます。
調べてみるとRancherのLonghornとかを使えば分散コンテナストレージが作れるようなので、Nutanixみたいなハイパーコンバージドが自前で作れるのでは??? と思いITアドベントカレンダーネタとしてチャレンジしてみました。
が、上手くいかずorz
とりあえず、上手くいかなかったところまで書いてみました。
k8sの準備
Longhornはk8sが必要になってきます。そういえばRancher2.0はk8sベースだし同じ会社だから上手くいくんじゃね? と試してみたもののベータのせいか、私のdocker-toolbox環境ではRancher2.0はエラーが出まくり早くも暗雲が。
いったん、あきらめてGKEを使うことにしました。GKEの準備は下記で。
$ gcloud components install kubectl
$ gcloud container clusters create "cluster-1" --image-type "UBUNTU"
$ kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --user="<your mail address>"
clusterrolebinding "cluster-admin-binding" created
image-typeはrancher/longhornを参考にデフォルトではなくUbuntuで作成。
ロール作成権限が必要なのでcreate clusterrolebinding
も行います。
Longhornのデプロイ
続いてLonghornのデプロイ。rancher/longhorn
からYAMLを取得して実行
$ git clone https://github.com/rancher/longhorn.git
$ cd longhorn
$ kubectl create -f deploy\example.yaml
clusterrolebinding "longhorn-bind" created
clusterrole "longhorn-role" created
serviceaccount "longhorn-service-account" created
daemonset "longhorn-manager" created
service "longhorn-backend" created
deployment "longhorn-ui" created
service "longhorn-frontend" created
daemonset "longhorn-driver" created
エントリポイントを確認してlonghorn-uiにつないでみます。
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.31.240.1 <none> 443/TCP 8m
longhorn-backend ClusterIP 10.31.246.205 <none> 9500/TCP 2m
longhorn-frontend LoadBalancer 10.31.250.26 xxx.xxx.xxx.xxx 80:32039/TCP 2m
上記の場合、ブラウザで下記にアクセス
http://xxx.xxx.xxx.xxx/dashboard
ここまでは割と順調でした。
Longhornを使うコンテナの作成
つづいてLonghornを使うコンテナの作成
volumes:
- name: vol
flexVolume:
driver: "rancher.io/longhorn"
fsType: "ext4"
options:
size: "2G"
numberOfReplicas: "2"
staleReplicaTimeout: "20"
fromBackup: ""
こんな感じで指定するっぽい。flex Volumeが実は良くわかってませんがオプション内容的に実行時に動的に領域を作る機能と推測。
example.yaml
が既に出来上がったっぽいもののようなのでデプロイしてみました。
$ kubectl create -f examples\example.yaml
pod "volume-test" created
一見成功ですがk8sのUI側で下記のエラーが
Unable to mount volumes for pod "volume-test_default(fc0bd9e1-e4c1-11e7-bf33-42010a800176)": timeout expired waiting for volumes to attach/mount for pod "default"/"volume-test". list of unattached/unmounted volumes=[voll]
どうやら領域のアタッチに失敗した模様。先に手動で作成が必要なのかと思いlonghorn-ui側でストレージを作ってみましたがやはりうまくいかず...
何となく初歩的なことに躓いてるきはするものの、今回はここで時間切れとなりましたorz
まとめ
今回はLonghornを試してみようと思ったのですが結果上手くいかずです。k8sの勉強も足らないのでリベンジですね。。。
ただ、分散コンテナストレージがうまくいくと、コンテナの運用がかなり捗りそうなので、パフォーマンス測定とかも含めて再チャレンジはしてみたいです。
それでは、Happy Hacking!