さあ、SUSEでCloud Foundry on Kubernetesをはじめよう!(前半)

Share
Share

こんにちは。皆様、クラウドネイティブしてますか?コンテナやKubernetesを利用されている方も多いかと思います。Cloud Foundryとはもう一つ上のPaaSのレイヤーにおけるクラウドネイティブプラットフォームです。Kubernetesが既存のアプリケーションのモダナイズやLift&Shiftを目的とする中で、よりインフラに捕らわれずに12-Factorを利用したカナリーリリースを含む新規と更新サービスをロールアウト出来るプラットフォームとして注目されています。同様のサービスはHerokuに始まり、クラウドベンダーが手がけるApp EngineやAzure app serviceなどやFaaSよりのAmazon Lambdaなどのサービス、IBMが提供するRedhat OpenShiftなどがあります。その中で今後Kubernetesと同じくオープンソースとしてデファクトになるであろうCloud Foundryとは何かを復習しつつご紹介(お試し出来ます!)出来ればと思います。

 

Cloud Foundryとは


Cloud Foundryの初リリースは2011年。高速で簡単なビルド、テスト、デプロイ、アプリのスケール、マルチ言語対応のオープンなクラウドネイティブプラットフォームとして生まれました。以下の様なことをやってくれます。

Cloud Foundryの主なメリット:

  • アプリケーションのポータビリティー
  • アプリケーションの自動スケーリング
  • 集約されたプラットフォーム管理
  • 一元化されたログ機能
  • ダイナミックルーティング
  • アプリケーションのヘルス管理
  • Elasticsearch、Logstashなどの外部ログツールとの統合
  • デプロイされたアプリケーションへの役割ベースのアクセス(RBAC)
  • 垂直および水平スケーリングのプロビジョニング
  • インフラストラクチャーのセキュリティ
  • 様々なIaaSプロバイダーのサポート

Codeから先のアプリケーション、コンテナ化、コンテナのデプロイを自動でやってくれます。つまりインフラは意識しない仕組み。後述しますがこれは一度使うと感動します。最大のメリットはアプリ開発サイクルの短縮。リリースまで数ヶ月以上掛かっていたものが数日以下へと劇的な短縮が可能です。CNCFが公表しているデータ(CFF User Survey)によりますと平均的なプロジェクトで2ヶ月半の短縮、一千万円ほどコストを削減出来るそうです。日本においても上場企業がWebアプリ系を中心に利用していることが公開事例からわかります。

Cloud Foundryを構成するコンポーネントとしては以下の様なものがあります:

  • Gorouter – アプリケーションとシステムのルーティング
  • Cloud Controller – アプリケーションのステージング
  • User Account and Authentication Server – 認証管理
  • Helm Charts – デプロイ自動化
  • Diego – アプリケーションの実行とランタイム
  • Eirini – スケジューラー
  • Garden – コンテナバックエンド
  • Loggregator – ログとメトリックの集約
    各種のBuildpacksやService brokersにも対応しています(つまりパブリッククラウド固有のサービスと連携することが可能です)

この様なCloud Foundryですが、オープンソースですので様々なベンダーからソリューションが提供されています。例えばCloud FoundryのPlatinumメンバーの顔ぶれは、DellEMC、Google、IBM、SAP、SUSE、VMwareですが、このメンバーはそれぞれに商用ソリューションを提供しております。

Cloud Foundryに触れてみましょう


座学も良いですがCloud Foundryの良さはあれこれ調べるより触った方が良いと思いますので実際の流れをご紹介します。

Cloud Application Platform Developers Sandboxで今すぐ体験

SUSEがローンチしたてのSUSE Developer communityにあるCloud Application Platform Developer Sandboxで実際にサンプルアプリを動かすまでをご紹介します(同一スペースでのルーティング等に制約はありますがRAM2.5GBまで使えますのでJavaアプリなども動きます、是非お試し頂ければと思います)。

アカウントを作成してログインします。CLIの場合はCf cliを導入後、API Endpoint(接続先)をhttps://api.cap.explore.suse.devにします。まずCLI、次にGUIについて説明したいと思います。実際にhttps://github.com/cloudfoundry-samplesにあるサンプルアプリケーションを動かしてみましょう。まずはgitからダウンロードしてDirを移動します。

git clone
git clone https://github.com/cloudfoundry-samples/cf-sample-app-spring
Cloning into ‘cf-sample-app-spring’…
remote: Enumerating objects: 83, done.
remote: Total 83 (delta 0), reused 0 (delta 0), pack-reused 83
Unpacking objects: 100% (83/83), done.

cd cf-sample-app-spring

環境により指定のBuildpacksですとエラーで落ちますので予めローカルのmanifest.ymlからBuildpacks以下2行を削除ください。削除後は適切なBuildpackが自動的に判断されて取得されます。そしてターミナルやpowershellなどからCF環境にログインしてください。cfのみ入力するとオプション一覧が表示されます。

> cf l  #CF login

API endpoint> https://api.cap.explore.suse.dev

Email> hisazumi.arimoto

Password>
Authenticating…
OK

Targeted org hisazumi_arimoto

Select a space (or press enter to skip):
1. dev
2. samples
3. test

Space> 1
Targeted space dev

API endpoint: https://api.cap.explore.suse.dev (API version: 2.144.0)
User: ##########################
Org: hisazumi_arimoto
Space: dev

上記のような形でログイン及び環境を選択することが可能です。あとはcf pushと入力するだけです。これでデプロイ完了です。数分の間にコードを認識して必要なBuildpackを取得し、ステージング、コンテナ化、インフラのプロビジョニング、ルーティングを全て自動で実施してくれます。興味のある人はログを追って頂ければ幸いです。興味のない方はスクロールダウンしてGUIについてをお読み頂けますと幸甚でございます。

>cf push
Pushing from manifest to org hisazumi_arimoto / space dev as hisazumi.arimoto…
Using manifest file C:\cf-sample-app-spring\manifest.yml
Getting app info…
Creating app with these attributes…
+ name: cf-demo
path: C:\cf-sample-app-spring
+ instances: 1
+ memory: 768M
routes:
+ cf-demo-turbulent-antelope.cap.explore.suse.dev

Creating app cf-demo…
Mapping routes…
Comparing local files to remote cache…
Packaging files to upload…
Uploading files…
713.67 KiB / 713.67 KiB [====================================================================================================================================================================================================] 100.00% 3s

Waiting for API to complete processing files…

Staging app and tracing logs…
Downloading dotnet-core_buildpack…
Downloading ruby_buildpack…
Downloading staticfile_buildpack…
Downloading nodejs_buildpack…
Downloading nginx_buildpack…
Downloaded dotnet-core_buildpack
Downloading go_buildpack…
Downloaded ruby_buildpack
Downloading python_buildpack…
Downloaded python_buildpack
Downloading hugo_buildpack…
Downloaded staticfile_buildpack
Downloading php_buildpack…
Downloaded nginx_buildpack
Downloading binary_buildpack…
Downloaded php_buildpack
Downloading java_buildpack…
Downloaded go_buildpack
Downloaded nodejs_buildpack
Downloaded binary_buildpack
Downloaded hugo_buildpack
Downloaded java_buildpack
Cell diego-cell-3 creating container for instance ba8e1d79-de8f-4863-ac0f-8a4abb507d83
Cell diego-cell-3 successfully created container for instance ba8e1d79-de8f-4863-ac0f-8a4abb507d83
Downloading app package…
Downloaded app package (1.2M)
—–> Java Buildpack v4.27.0.1 | git@github.com:SUSE/cf-java-buildpack.git#8e0ddf9
—–> Downloading Jvmkill Agent 1.16.0_RELEASE from https://java-buildpack.cloudfoundry.org/jvmkill/bionic/x86_64/jvmkill-1.16.0-RELEASE.so (0.2s)
—–> Downloading Open Jdk JRE 1.8.0_232 from https://java-buildpack.cloudfoundry.org/openjdk/bionic/x86_64/openjdk-jre-1.8.0_232-bionic.tar.gz (2.4s)
Expanding Open Jdk JRE to .java-buildpack/open_jdk_jre (0.8s)
—–> Downloading Open JDK Like Memory Calculator 3.13.0_RELEASE from https://java-buildpack.cloudfoundry.org/memory-calculator/bionic/x86_64/memory-calculator-3.13.0-RELEASE.tar.gz (0.7s)
Loaded Classes: 8129, Threads: 250
—–> Downloading Client Certificate Mapper 1.11.0_RELEASE from https://java-buildpack.cloudfoundry.org/client-certificate-mapper/client-certificate-mapper-1.11.0-RELEASE.jar (0.4s)
—–> Downloading Container Security Provider 1.16.0_RELEASE from https://java-buildpack.cloudfoundry.org/container-security-provider/container-security-provider-1.16.0-RELEASE.jar (0.1s)
—–> Downloading Spring Boot CLI 2.2.1_RELEASE from https://java-buildpack.cloudfoundry.org/spring-boot-cli/spring-boot-cli-2.2.1-RELEASE.tar.gz (1.5s)
Expanding Spring Boot CLI to .java-buildpack/spring_boot_cli (0.1s)
Exit status 0
Uploading droplet, build artifacts cache…
Uploading droplet…
Uploading build artifacts cache…
Uploaded droplet (52.6M)
Uploaded build artifacts cache (51.2M)
Uploading complete
Cell diego-cell-3 stopping instance ba8e1d79-de8f-4863-ac0f-8a4abb507d83
Cell diego-cell-3 destroying container for instance ba8e1d79-de8f-4863-ac0f-8a4abb507d83

Waiting for app to start…

name: cf-demo
requested state: started
routes: cf-demo-turbulent-antelope.cap.explore.suse.dev
last uploaded: Wed 13 May 15:37:21 JST 2020
stack: sle15
buildpacks: client-certificate-mapper=1.11.0_RELEASE container-security-provider=1.16.0_RELEASE java-buildpack=v4.27.0.1-git@github.com:SUSE/cf-java-buildpack.git#8e0ddf9 java-opts java-security
jvmkill-agent=1.16.0_RELEASE open-jdk-like-jre=1.8.0_232 ope…

type: web
instances: 1/1
memory usage: 768M
start command: JAVA_OPTS=”-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -XX:ActiveProcessorCount=$(nproc)
-Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS” &&
CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=8326 -poolType=metaspace -stackThreads=250 -vmOptions=”$JAVA_OPTS”) &&
echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS=”$JAVA_OPTS $CALCULATED_MEMORY” && MALLOC_ARENA_MAX=2 JAVA_OPTS=$JAVA_OPTS SERVER_PORT=$PORT JAVA_HOME=$PWD/.java-buildpack/open_jdk_jre exec
$PWD/.java-buildpack/spring_boot_cli/bin/spring run -cp $PWD/.java-buildpack/client_certificate_mapper/client_certificate_mapper-1.11.0_RELEASE.jar app.groovy
state since cpu memory disk details
#0 running 2020-05-13T06:37:46Z 0.0% 165.2M of 768M 147.1M of 1G

実際のアプリにアクセスするにはroutesにあるURLを叩けば、以下の様にアプリケーションがデプロイされたことが確認出来ます。この手軽さと俊敏性がCloud Foundryの価値です。

補足:Cfはオープンソースですのでディストリビューションに限らずアプリの動作、コマンド等は互換性があります。基本的にはEndpointを変更することで他のCF環境でもアプリを同じ様に動かせます(上位環境や連携サービスにより動作させるために変更修正が必要な場合もあります)。

Cloud FoundryをGUIで管理する


次にGUIから今デプロイしたアプリを確認してみます。ブラウザからhttps://stratos.cap.explore.suse.devにアクセスします。このGUIはStratosというupstreamのプロジェクトでSUSEが中心になって開発しているものです。

作成したクレデンシャルを入力してログインします。

Deployしたアプリケーションの情報を確認出来ます。この画面からアプリをスケールさせたり、ルーティングを変更したり、削除したりといった操作が可能です。またCLIと同様のAPIを利用しているのでどちらからでも操作することが可能です。

BuildpackやCloudFoundryの情報なども確認が可能です。

Endpointを追加登録することで、他のベンダーが提供するCloud Foundryの操作も同様に可能です。またクラウドサービスプロバイダーの提供するKubernetes(AKS, EKS, GKE)やSUSEを含むオンプレミスのKubernetesもここから管理することが可能です(Kube dashboardと連携します)。その他にもGrafanaやHELMレポジトリを追加することでダッシュボードによる可視化やアプリケーションをチャートからワンクリックでインストール出来るアプリケーションインスタンスデリバリーがご利用頂けます。

実際にCloud Foundryに触れてみていかがでしょうか。もう少しCFについて触ってみたい方はhttps://www.cloudfoundry.org/trainings/cloud-foundry-beginners-zero-hero/や他の方のブログ等もご参考になさって頂けばと思います。次回はCloud Foundryの環境をAzure/AWS上のKubernetesにこのCloud Foundryを簡単にデプロイする方法についてご紹介させて頂きます。

Happy coding!


お問い合わせに関して

  • この記事に関するお問い合わせは、担当までお寄せください。
  • 当該ブログの記述内容は、製品マニュアル、各種サービスに関する説明、プレスリリースなど弊社が配布する文書、Webサイト上の情報を基にできる限り正確な記述に努めておりますが、もし内容が異なる表現や複数の解釈が可能な表現があった場合には、製品マニュアル、各種サービスに関する説明、プレスリリースなどの情報を正しい情報としてご理解の上、担当まで御一報ください。
Share
(Visited 23 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

No comments yet

Avatar photo
7,709 views