Introduction to Cloud Foundry #JJUG

5,814 views

Published on

JJUGナイトセミナー2016年3月での発表

Published in: Technology

Introduction to Cloud Foundry #JJUG

  1. 1. Introduction  to Cloud  Foundry 2016-­‐03-­‐22  JJUGナイトセミナー Toshiaki  Maki  (@making)
  2. 2. Why  PaaS? Traditional IT Storage Servers Networking O/S Middleware Virtualization Data Applications Runtime YouManage O/S IaaS Storage Servers Networking Middleware Virtualization Data Applications RuntimeYouManage IaaSProvider PaaS Storage Servers Networking Middleware Virtualization Data Applications Runtime O/S Business  Value,  Agility  &  Cost  Savings YouManage PaaSProvider
  3. 3. •オープンソースのPaaS基盤 •Cloud Foundry Foundationで開発されて いる、ベンダロックインを回避 •パブリッククラウド / プライベートクラウ ド問わず、マルチクラウドに対応 https://github.com/cloudfoundry
  4. 4. Cloud  Foundry  Foundation PLATINUM GOLD SILVER https://www.cloudfoundry.org/membership/members/
  5. 5. Certified  Certified  Providers CenturyLink  AppFog HPE  Helion Cloud  Foundry Huawei FusionStage IBM  Bluemix Pivotal  Cloud  Foundry SAP  HANA Cloud  Platform Swisscom Application  Cloud https://www.cloudfoundry.org/use/cloud-­‐foundry-­‐certified/
  6. 6. Structure Spring  Cloud Spring  Boot Cloud  Foundry BOSH AWSVMWareOpenStack Application  Framework Runtime  Platform Infrastructure  Automation Infrastructure Azure Contract:  Cloud  Provider  Interface Contract:  12  Factor  App Contract:  BOSH  Release Java  EE GCP
  7. 7. Cloud  Foundryの使い方
  8. 8. Login $  cf login  -­‐a  api.run.pivotal.io $  cf login  -­‐a  api.local.pcfdev.io Pivotal  Web  Services Local  (PCF  Dev) $  cf login  -­‐a  paas-­‐jp1-­‐ecl.api.ntt.com Enterprise  Cloud  2.0  (NTT  Com) <Endpoint> プロバイダーごとに 異なるエンドポイントを 設定すれば以降は基本同じ
  9. 9. Deploy  Java  Application  (Spring  Boot) $  git clone  https://github.com/making/hello-­‐pws $  cd  hello-­‐pws $  mvn package $  cf push  hello  -­‐p  target/hello-­‐pws.jar
  10. 10. hello  world Host  name   (subdomain) =  App  name Domain  name -­‐nで指定可能
  11. 11. Deploy  Java  Application  (Java  EE) $  git clone  https://github.com/making/hello-­‐pws-­‐javaee $  cd  hello-­‐pws-­‐javaee $  mvn package $  cf push  hello  -­‐p  target/hello-­‐pws.war ¥ -­‐b  https://github.com/cloudfoundry/ibm-­‐websphere-­‐liberty-­‐buildpack.git ¥ -­‐-­‐no-­‐start $  cf set-­‐env hello  IBM_LIBERTY_LICENSE  <License Number> $  cf set-­‐env hello  IBM_JVM_LICENSE  < License Number > $  cf start  hello IBM_LIBERTY_LICENSE IBM_JVM_LICENSE WebSphere  Liberty  Profileの場合 ß Search  " D/N:  *********"  for  License  Number
  12. 12. Deploy  Java  Application  (Java  EE) $  zip  target/hello-­‐pws.zip target/hello-­‐pws.war $  cf push  hello  -­‐p  target/hello-­‐pws.zip ¥ -­‐b  https://github.com/matf/wildfly-­‐buildpack WildFlyの場合
  13. 13. Scaling $  cf scale  hello  -­‐i 4 $  cf scale  hello  -­‐m  2g Instance Memory
  14. 14. Cloud  Foundryの仕組み
  15. 15. Architecture  (Simplified) Cloud  Controller Blobstore DB Cell cf push http://... CC  API Containers Router
  16. 16. [Step1]  Upload Cloud  Controller Blobstore DB Cell cf push CC  API Router App
  17. 17. [Step1]  Upload Cloud  Controller Blobstore DB Cell cf push CC  API Router App
  18. 18. [Step2]  Stage Cloud  Controller Blobstore DB Cell cf push CC  API Router Runtime App JRE,  App  Server   etc..
  19. 19. [Step2]  Stage Cloud  Controller Blobstore DB Cell cf push CC  API Router Runtime App Droplet
  20. 20. [Step2]  Stage Cloud  Controller Blobstore DB Cell cf push CC  API Router Upload
  21. 21. [Step2]  Stage Cloud  Controller Blobstore DB Cell cf push CC  API Router
  22. 22. [Step3]  Start Cloud  Controller Blobstore DB Cell cf push CC  API Router
  23. 23. [Step3]  Start Cloud  Controller Blobstore DB Cell cf push CC  API Router
  24. 24. [Step3]  Start Cloud  Controller Blobstore DB Cell cf push CC  API Router
  25. 25. [Step3]  Start Cloud  Controller Blobstore DB Cell http://… CC  API Router
  26. 26. Scale  out Cloud  Controller Blobstore DB Cell http://… CC  API Routercf scale
  27. 27. Scale  out Cloud  Controller Blobstore DB Cell http://… CC  API Routercf scale
  28. 28. Scale  out Cloud  Controller Blobstore DB Cell http://… CC  API Routercf scale
  29. 29. Buildpack $  cf push $  cf push  -­‐b  https://github.com/<you>/java-­‐buildpack.git Auto  Detect Custom  Buildpack Runtime App buildpack https://github.com/cloudfoundry-­‐community/cf-­‐docs-­‐contrib/wiki/Buildpacks
  30. 30. Dockerイメージや.NETアプリにも対応 $  cf push  hello-­‐docker -­‐o  cloudfoundry/lattice-­‐app Cell <Docker Image  Name>
  31. 31. Cloud  Foundryのその他機能 Organization   /  Space Service Log Blue/Green Deployment HA
  32. 32. Organization  /  Space CF  Installation OrganizationOrganizationOrganization Space Space Space User,  Role,  Quota   Development, Staging, Production $  cf login  -­‐a  https://api.run.pivotal.io OK   Targeted  org  maki-­‐org   Targeted  space  development   API  endpoint:  https://api.run.pivotal.io (API  version:  2.51.0)   User:  maki@example.com Org:  maki-­‐org   Space:  development
  33. 33. Organization  /  Space $  cf create-­‐org  jjug $  cf create-­‐space  -­‐o  jjug production $  cf target  -­‐o  jjug -­‐s  production $  cf create-­‐user  maki password $  cf set-­‐org-­‐role  maki jjug OrgManager $  cf set-­‐space-­‐role  maki jjug ¥ production  SpaceManager Create  Organization  /  Space Create  User  /  Role
  34. 34. Service データベースやメッセージキューなどのバックエンドサービス はアプリケーションにアタッチして使用する。 接続情報は環境変数から取得。 http://12factor.net/backing-­‐services
  35. 35. $  cf marketplace 利用可能なサービス一覧。 (プロバイダーごとに異なる)
  36. 36. Create  &  Bind  Service $  cf create-­‐service  cleardb spark  mydb $  cf bind-­‐service  hello  mydb <Service  Name> <Plan  Name> <Service  Instance  Name> <Service  Instance  Name><App  Name> MySQLのサービス
  37. 37. 環境変数 VCAP_SERVICES {"cleardb":  [{"credentials":  { "hostname":  "us-­‐cdbr-­‐iron-­‐east-­‐03.cleardb.net", "jdbcUrl":  "jdbc:mysql://us-­‐cdbr-­‐iron-­‐east-­‐03.cleardb.net/ad_1191b396cc81848", "name":  "ad_1191b396cc81848", "password":  "67674107", "port":  "3306", "uri":  "mysql://b6f7c089a1680f:67674107@...", "username":  "b6f7c089a1680f"}, "label":  "cleardb",   "name":  "mydb",  ...}]}
  38. 38. 環境変数 VCAP_SERVICES spring.datasource.url=${vcap.services.mydb.credentials.jdbcUrl} spring.datasource.username=${vcap.services.mydb.credentials.username} spring.datasource.password=${vcap.services.mydb.credentials.password} String  json =  System.getenv("VCAP_SERVICES"); //  Parse  JSON  ... Spring Bootの場合 (application-­‐cloud.properties) 一般的なJavaアプリケーションの場合 実はBuildpackにより、自動でDataSourceなどのBeanが差し替えられるのでこの設定は不要
  39. 39. Service  Broker  /  User  Provided  Service Application Service  Broker Service  Instance User  Provided  Service Managed  Services MySQL Redis RabbitMQ Oracle  DB create-­‐user-­‐provided-­‐servicecreate-­‐service bind-­‐service marketplace
  40. 40. User  Provided  Service $  cf create-­‐user-­‐provided-­‐service  mydb ¥ -­‐p  '{"username"  :  "xxx",  "password"  :  "xxx",     "port"  :  "xxx",  "  jdbcUrl"  :  "xxx"}' $  cf bind-­‐service  hello  mydb 自前のサービス(Oracle等)
  41. 41. Log $  cf logs  hello 標準出力の ストリーム
  42. 42. 3rd Party  Log  Managers $  cf create-­‐user-­‐provided-­‐service  mylog ¥ -­‐l  syslog://logs.papertrailapp.com:36129 $  cf bind-­‐service  hello  mylog
  43. 43. Blue/Green  Deployment • デプロイ時のダウンタイムを0に近づける手法 V1 Router $  cf push  v1  -­‐n  app
  44. 44. Blue/Green  Deployment • デプロイ時のダウンタイムを0に近づける手法 V1 Router$  cf push  v2  -­‐n  app-­‐g V2
  45. 45. Blue/Green  Deployment • デプロイ時のダウンタイムを0に近づける手法 V1 Router$  cf map-­‐route  v2  example.com -­‐n  app V2
  46. 46. Blue/Green  Deployment • デプロイ時のダウンタイムを0に近づける手法 V1 Router$  cf unmap-­‐route  v1  example.com -­‐n  app V2
  47. 47. Blue/Green  Deployment • デプロイ時のダウンタイムを0に近づける手法 V1 Router$  cf unmap-­‐route  v1  example.com -­‐n  app V2 😊
  48. 48. Blue/Green  Deployment • デプロイ時のダウンタイムを0に近づける手法 V1 Router$  cf delete  v1 V2 😊
  49. 49. Blue/Green  Deployment • デプロイ時のダウンタイムを0に近づける手法 Router V2 $  cf unmap-­‐route  v2  example.com -­‐n  app-­‐g
  50. 50. Blue/Green  Deployment V1 Router V2 😱 🔥
  51. 51. Blue/Green  Deployment V1 Router V2 😱 🔥 $  cf map-­‐route  v1  example.com -­‐n  app
  52. 52. Blue/Green  Deployment V1 Router V2 😱 🔥 $  cf unmap-­‐route  v2  example.com -­‐n  app
  53. 53. AutopilotPlugin $  cf zero-­‐downtime-­‐push  app  ¥ -­‐f  manifest.yml https://github.com/concourse/autopilot Production向けのデプロイ(e.g.  100インスタンス)の場合、少しずつスケールさせるべき (by  my  teacher  @shinji62) https://github.com/krujos/scaleover-­‐plugin のようなプラグインが便利
  54. 54. Application (Container) Level Process Level VM Level Availability Zone (Rack)  Level CF  Runtime 4  levels  of  HA CF  Runtime A B C D🔥 B CF  Runtime A B C D Process🔥 Monit CF  Runtime A B C D Process VM🔥 Zone1 ABCD 🔥 Zone2 ABCD Supported   by  Diego Supported   by  Bosh Container
  55. 55. 12  Factor  App http://12factor.net/ Cloud  Foundryは 12  Factor  App の全てを満たす
  56. 56. Cloud  Foundry by  
  57. 57. Cloud  Foundry  by   Pivotal  Manages Customer  Manages Public   Cloud Pivotal  Web  Services Pivotal  Cloud  Foundry   (on  AWS  /  VMware  vCloud Air) Private   Cloud Pivotal  Cloud  Foundry (on  OpenStack /  VMWare  vSphere)
  58. 58. Pivotal  Web  Services 最新版のCFを 手軽に試せる https://run.pivotal.io • AWS上でPivotalがホストする Cloud  Foundry • $0.03/GB時間 のメモリ課金 • 60日間の試用期間 チュートリアル
  59. 59. Pivotal  Cloud  Foundry • 専用Cloud Foundry環境を作るた めの商用パッケージ • CFをGUIで容易にインストールす るためのOps Managerと実行環境 (=CF)のElastic Runtimeで構成 • 利用できるサービス多数 • IaaSとしてAWS, OpenStack, VMWare vSphere等に対応 • サポート付き Ops Manager Apps Manager
  60. 60. RuntimeServices OSS版とPivotal Cloud  Foundryの違い Riak CS MongoDB Gemfire Neo4J Redis DataStax Cassandra CloudBees Jennkins Push  Notification Spring  Cloud  Services ... MySQL  HA Pivotal  Network Proxy  LoadBalancer Router Login  Server  /  UAA Service  Broker Cloud  Controller Diego Loggregator Blobstore OpsManager Bosh UI Addon Auto  Scaling Identity  As  A  Service LDAP  /  AD  (SAML) Metrics  Server Notifications Ops  Metrics cf CLI APM  (Monitoring) Apps  Manager Service  Marketplace Certification Documentation Support PCF OSS Open  Stack VSphereAWS ...
  61. 61. Announce
  62. 62. Cloud  Foundry  Tokyo  Meetup #1  2016/03/31  @  六本木Pivotalオフィス http://bit.ly/cftm1 • Route  Services • Running  your  application  locally   with  local-­‐push • .NET  support  update and  so  on  …
  63. 63. Workshop 今日紹介した内容をハンズオン形式で学ぶワークショップ •3/25  16:00-­‐18:00  一回目 http://bit.ly/take-­‐me-­‐cf1 •4/13  19:00-­‐21:00  二回目 http://bit.ly/take-­‐me-­‐cf2 今後も何回か開催する予定

×