帰ってきた(?)Stackato改めSUSE Cloud Application Platform
この記事は
Cloud Foundry Advent Calendar 2017 - Qiita
の23日目のエントリーです。間に合うか。
Last Christmas, I gave you my heart
去年のクリスマス、私は何をしていたかというとこんなのを書いてました。
Stackato4は本当に面白いプロダクトで、
- 当時まだ(今ほどは)メジャーになっていなかったKubernetesを大胆にコントロールプレーンとして採用
- 各種サービスをKubernetesのネームスペース上で管理
- 通常BOSHで仮想マシンレベルでデプロイされるCloud Foundryの各コンポーネントをコンテナ化してKubernetes上で実行
という、当時としてはかなりぶっ飛んだというか、時代の2歩ぐらい先を行っていたモノだったと思います。さらにKubernetesの下のレイヤーではOpenStackとも統合され、HeatがNeutron LB(Octavia)やCinderをKubernetes用に構成してくれました。今となってはふつうにできることではありますが。
私はkubectlを10万回ぐらい叩きながら、「うぉーこれがこれからの分散サービスプラットフォームの姿か」と思ったものでした。
But the very next day you gave it away
そんなStackatoをHPEは手放してしまいました。開発リソースはSUSEに引き継がれましたが、Stackatoは販売 糸冬 了。かくしてPivotal Cloud Foundryが唯一の商用Cloud Foundryディストリビューションとなりました。
ヤツが帰ってくる・・・のか?
SUSEは2017年にSUSE CaaS Platform (CaaSP)という名の、Kubernetesのエンタープライズ向けディストリビューションを発売しました。
これは「純粋な」KubernetesのクラスタをSaltを使って構成するというもので、HPEから引き継がれたHelion Control Plane(StackatoのKubernetes部分)とは全く別の実装となっています。現在ではKubernetes1.7ベースのV2.0がリリースされています。
そして2017年11月。シドニーでの(なぜか)OpenStack Summitで、SUSE Cloud Application Platform (CAP)が発表されました。
SUSE Cloud Application Platform | SUSE
下記の図はSUSEのblogからの転載ですが、
要するにSUSE CaaSP (Kubernetes)の上にコンテナ化されたCloud Foundryを載せたというディストリビューションに見えます。
Stackatoでは、Kubernetesの上にCloud Foundryだけではなく、CI/CDツール(ConcourceベースのHelion Code Engine)やデータサービス(MySQL、Postgresなど)も載っていましたが、そういったものはなさそうです。ふつうにKubernetes上にhelmとか使って構成してください、ということなのでしょう。
さて動かしてみよう
というわけで動かしてみようかと思ったのですが、SUSE CAPはまだリリースされておらず、ベータも入手できませんでした。が、SUSE Cloud Foundry (SCF)はオープンソースで開発されており、GitHubからソースコードとベータリリースを入手できます。
ということは、SUSE CaaSP 2.0(これは評価版ダウンロード可能です)の上に、OSSのSCFを展開すれば、SUSE CAPのベータっぽいものになるんではないか?ということで、試してみました。
だがしかし
SUSE CaaSPのドキュメントが、ベアメタルへのインストールを前提としており、しかもDVDを入れるところからというハードモードな展開で、いきなり断念しました。そんな何台もサーバ持ってませんって。
Suse Doc: Deployment Guide - Installing SUSE CaaS Platform - November 16 2013
ダウンロードできるイメージはDVDのISOの他にKVMやOpenStack用のQCOW2やHyper-V用のものもあったので、IaaS上へのデプロイも可能なんでしょうが、やり方がどこにも書いてませんでした。
仕方がないのでSCFだけでも
しょうがないのでAKSかDC/OSで動いているKubernetesの上にSCFをデプロイしようとしたのですが、
https://github.com/SUSE/scf#deploying-scf-on-kubernetes
に
After careful consideration of the difficulty of the current install, we decided not to detail the instructions to install on bare K8s because it still requires far too much knowledge of SCF related systems and troubleshooting.
Please be patient while we work on a set of Helm charts that will help people easily install on any Kubernetes.
と書いてありましたとさ。えー。
で、VagrantでローカルPC上にシングルノードKubernetes環境を作って、そこでSCFを動かす方法が書いてあったので、それを試してみました。
まずソースコードをダウンロードしろと
$ git clone --recurse-submodules https://github.com/SUSE/scf
ん、 --recurse-submodules
ですか。。。もしかして fissile
使ってゼロからDockerイメージビルドする手順ってことですか。。。
まあいいや。OSSらしくていいじゃないですか。1時間近くかけてgit clone。
ビルドビルド
Vagrantfileも入っているので vagrant up
するとシングルノードのKubernetesが上がってきます。
vagrant@vagrant-kube:~/scf> kubectl get nodes NAME STATUS ROLES AGE VERSION 127.0.0.1 Ready <none> 10m v1.8.4
で、 make vagrant-prep
とするとDockerイメージのビルド、Helm Chartの作成が行われます。Core i7, メモリ16Gをフルに使って2時間ぐらいかかりましたので、ここは寝るとこです。翌朝目覚めると
vagrant@vagrant-kube:~/scf> docker images REPOSITORY TAG IMAGE ID CREATED SIZE splatform/uaa-mysql 2b79bdda86a441c39e90e6e2743834d6ed8a25fe 1e97f9c0f14a 7 hours ago 3.2 GB splatform/uaa-uaa d743ee771b1d5ddbf60f9acd5022b5e4ff47b582 a44c6b3da9a8 7 hours ago 3.2 GB splatform/uaa-secret-generation 46d409f7080d58367476a773c6c66ddde9b3f98b 0a63e5fb877b 7 hours ago 3.2 GB uaa-role-packages 6213179b3f9c0903db42c7ad9390f203871b1afe c8a0c3534c94 7 hours ago 3.2 GB splatform/scf-secret-generation a55a32c6d64fa9de0510336792fcb02a13cd2510 007ae398cc40 7 hours ago 6.781 GB splatform/scf-post-deployment-setup 7b25df7bae098f5ff259d2a370e1acaa4f8e6c2b bfdd5a328624 7 hours ago 6.781 GB splatform/scf-acceptance-tests defb68ce504472c73fc7589b9c0164cdc9574f5e a0f3784ddabc 7 hours ago 6.781 GB splatform/scf-smoke-tests d3055b8eb2ac356833757ec47de875bb47c07673 f3d0620917ad 7 hours ago 6.781 GB splatform/scf-acceptance-tests-brain 01e823895d97eb918a7276eb4b1b442cc48e32ad fc38d1dd4d77 7 hours ago 6.781 GB splatform/scf-diego-cell 82ed8025c021a7d1eac531204dbc1fe3269a6863 12591a847c56 7 hours ago 6.781 GB splatform/scf-nfs-broker 847a907e0a82515348ab307c7b1e7e7168cf61ef e0801950a17a 7 hours ago 6.781 GB splatform/scf-diego-access d0745225743b233ce40819d4fd2d0e3ec6385213 bbf9c7d14035 7 hours ago 6.781 GB splatform/scf-cc-uploader 5adf1d0e9b2ffb355793bf017cc57f76170dd1f6 85666eea772c 7 hours ago 6.781 GB splatform/scf-loggregator 98439bdbbd97e6209044c40b3411e04e8cd68d9e cf85f6dc71a3 7 hours ago 6.781 GB splatform/scf-diego-brain f8e02e2aa0ba9241a30c119aebf15fe1116e1e12 190160b08a0b 7 hours ago 6.781 GB splatform/scf-doppler f0c49f89a8b6083394eba73573ab2eaa3422ff2b 7bf78c32b852 7 hours ago 6.781 GB splatform/scf-cc-clock 35aed0de79491e69406dba042978e4aa818bf241 7368f088abfe 7 hours ago 6.781 GB splatform/scf-cc-worker bd5b07b58f2331dc6db8f781e08e3927e7e8f15b bff56502bd23 7 hours ago 6.781 GB splatform/scf-blobstore 02c3a328b26c0be009cfc899bd33ed9087790294 ec9dc6f464c9 7 hours ago 6.781 GB splatform/scf-api f5be5b8166a9c0efc8f20f66a803abb10ab1f01e b8acea8750b6 7 hours ago 6.781 GB splatform/scf-routing-api 2741864e80fae353aae7b74338bca72a021b92e5 aa48bb10665c 7 hours ago 6.781 GB splatform/scf-tcp-router 102ea409285ad34c313cdc014db2b68c04f564c3 93a5076834ed 7 hours ago 6.781 GB splatform/scf-diego-api eb51c6eaa324a35344a3debf0065f3905ab97b6f 836473c9c1f8 7 hours ago 6.781 GB splatform/scf-router a7d0daaa947812f817e2882a3e224afc814c77ad 9710c857f908 7 hours ago 6.781 GB splatform/scf-diego-locket 5b0240c35728ce0990f20b467700b8dea04adced 6f6f2a6407d9 7 hours ago 6.781 GB splatform/scf-cf-usb 7105951f303938552323e880301515c7d5ec256d 2e77448049d2 7 hours ago 6.781 GB splatform/scf-mysql caa428174f926b1f028557371114e2c0dde855d0 774c56099f7d 7 hours ago 6.781 GB splatform/scf-mysql-proxy 0da1a69e760c35036236ec94eb455127eeed7d37 9a96072009a7 7 hours ago 6.781 GB splatform/scf-syslog-scheduler 83c45a25e66a506b5705b278ece1e96cc344b9f1 4eb7ae77afbf 7 hours ago 6.781 GB splatform/scf-syslog-rlp 7c8efb17c21a60bcf16b1ea8f0761505fac4b17c a8f51fd49692 7 hours ago 6.781 GB splatform/scf-syslog-adapter 24d868865aedd6da58742a4607bacbac812d9952 a9bb5ccc7366 7 hours ago 6.781 GB splatform/scf-nats 24443c42c637aff34e93960eaa4cdb256f2bd7c3 6adb2f5468ee 7 hours ago 6.781 GB scf-role-packages 114a7f364a78112c23c4acaf3e927547d8eec1ed cdf4d393c9c3 7 hours ago 6.781 GB splatform/fissile-stemcell-opensuse 42.2-21.g0757523-29.55 826dc0eadd9a 7 days ago 1.755 GB gcr.io/kubernetes-helm/tiller v2.6.2 069459be335a 11 weeks ago 78.02 MB splatform/bosh-cli 39747e9d1fbc1d32af3672f903b6c4b73e1e1a9e 6b95889b110a 11 weeks ago 1.995 GB gcr.io/google_containers/k8s-dns-sidecar-amd64 1.14.1 fc5e302d8309 9 months ago 44.52 MB gcr.io/google_containers/k8s-dns-kube-dns-amd64 1.14.1 f8363dbf447b 9 months ago 52.36 MB gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64 1.14.1 1091847716ec 9 months ago 44.85 MB gcr.io/google_containers/pause-amd64 3.0 99e59f495ffa 19 months ago 746.9 kB
おー。できた。
いちおうこちらにはビルド済みのリリースっぽいものもあるので、これを使うと上記の手順は飛ばせるのかもしれません。
起動
あとは make run
すれば、namespaceが作られ、helmチャートが走って、UAAとCloud Foundryがそれぞれのnamespace内で起動します。これは数分。
vagrant@vagrant-kube:~/scf> kubectl get pods --namespace cf NAME READY STATUS RESTARTS AGE api-0 1/1 Running 1 8m blobstore-0 1/1 Running 0 8m cc-clock-5c4c8fb74c-96n9t 1/1 Running 0 8m cc-uploader-5d7665c5d7-hhjqs 1/1 Running 0 8m cc-worker-6799fbf5c9-s5d94 1/1 Running 0 8m cf-usb-79577cd664-bsf4j 1/1 Running 0 8m diego-access-b54c65f9f-vw2xc 1/1 Running 0 8m diego-api-769fb4cf8c-247s5 1/1 Running 0 8m diego-brain-64f44b9f67-npnm8 1/1 Running 0 8m diego-cell-0 1/1 Running 0 8m diego-locket-9cc87ff78-g6dpq 1/1 Running 0 8m doppler-5ccc5746f9-v28p2 1/1 Running 0 8m loggregator-85f6cf876d-8zcqq 1/1 Running 0 8m mysql-0 1/1 Running 0 8m mysql-proxy-755b7dbfc7-6blw9 1/1 Running 0 8m nats-0 1/1 Running 0 8m nfs-broker-566564c64-zq582 1/1 Running 0 8m router-6cd48dd877-5lv67 1/1 Running 0 8m routing-api-0 1/1 Running 0 8m syslog-adapter-779759b677-j65f4 1/1 Running 0 8m syslog-rlp-755d7b8647-swnsr 1/1 Running 0 8m syslog-scheduler-c669995d-qmcxr 1/1 Running 0 8m tcp-router-77676b9d9-gn25j 1/1 Running 0 8m
vagrant@vagrant-kube:~/scf> cf api --skip-ssl-validation https://api.cf-dev.io Setting api endpoint to https://api.cf-dev.io... OK API endpoint: https://api.cf-dev.io (API version: 2.99.0) User: admin Org: system Space: No space targeted, use 'cf target -s SPACE' vagrant@vagrant-kube:~/scf> cf login API endpoint: https://api.cf-dev.io Email> admin Password> Authenticating... OK Targeted org system API endpoint: https://api.cf-dev.io (API version: 2.99.0) User: admin Org: system Space: No space targeted, use 'cf target -s SPACE'
よろしい。ちゃんとCFだ。
さてこれはいいものなのか
まだ完成したディストリビューションとは言い難く、私もとりあえず起動してみただけなのでなんとも言えませんが、少なくとも以下は前向きに評価できるポイントかと思います。
- 少なくともBOSHリリースからfissileを使ってコンテナ化するところはちゃんとできているようだ。
- デプロイにHelmを使っている。つまり独自技術に頼らず、Kubernetesのエコシステムに乗っかることを前提としている。
- fissileも含めてオープンソースである。
- Pivotalの、BOSHを共通レイヤーとしてその上にPKS(Kubernetes) + PAS(Cloud Foundry)というコンセプトもよいが、それとは別のエッジが効いている。
個人的には
やはりふつうのKubernetesの上で動かしてみたいですね。あと、
特別なお客様限定でSUSE Cloud Application Platformのご提供を開始しました
ってありますがどこまで本気で商用展開しようとしているのかも気になります。