(続) はじめてのcloud foundry

36
( 続 ) 続続続続続 Cloud Foundry

Upload: tomohiro-ichimura

Post on 07-Feb-2017

380 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: (続) はじめてのCloud Foundry

( 続 ) はじめての Cloud Foundry

Page 2: (続) はじめてのCloud Foundry

• 19:00- Cloud Foundry について• 19:30- Cloud Foundry をターゲットにしたアプリ開発• 20:00- PCF Dev とは• 20:30- PCFDev のアーキテクチャ詳細• 21:00- 懇親会

アジェンダ

Page 3: (続) はじめてのCloud Foundry

PCF Devとは

Page 4: (続) はじめてのCloud Foundry

agenda• PCF Dev のインストール• PCF Dev とは• PCF Dev のアーキテクチャ詳細

Page 5: (続) はじめてのCloud Foundry

agenda• PCF Dev のインストール• PCF Dev とは• PCF Dev のアーキテクチャ詳細

Page 6: (続) はじめてのCloud Foundry

PCF Devインストールに必要な要件• PC のスペック

– 20GB のディスクスペース▪ Virtualbox 上での仮想マシンとして動作▪ ova としてインポートするには、 +5GB は必要

– 3GB 以上の空きメモリ (Spring Cloud を利用するなら 8GB 以上 )• Virtualbox

– https://www.virtualbox.org/• cf cli

– http://docs.pivotal.io/pivotalcf/cf-cli/install-go-cli.html• Pivotal アカウント

– http://network.pivotal.io• (Option) Vagrant

– https://www.vagrantup.com

Page 7: (続) はじめてのCloud Foundry

cf devプラグインの用意1. network.pivotal.io から上記バージョンの実行ファイルをダウンロード

PCF Dev -> Releases -> 最新版を選択 ( 下記では、 v0.23.0* の OS X を想定 )

2. ダウンロードされたファイルを解凍して実行a. unzip pcfdev-v0.23.0+PCF1.9.0-osx.zipb. ./pcfdev-v0.23.0+PCF1.9.0-osx 以下の出力が出たら完了

Plugin successfully installed. Current version: 0.23.0. For more info run: cf dev help

3. インストールの実施c. 次のスライド ※ 2017/1/27に v0.24.0が出ました!

Page 8: (続) はじめてのCloud Foundry

cf dev startコマンドからのインストールcf dev start コマンドの実行のみ

a. cf dev starti. 通常構成ii. トータルメモリの半分のアサイン、物理コア数、 redis と rabbitmq

# 約 10 分ほど我慢 ...b. cf dev start -m 3072 -s none

i. 最小構成 ( 最低の 3GB のアサイン )ii. サービスは MySQL のみ

c. cf dev start -s alli. ゴージャス構成ii. Spring Cloud Service 含めサービスは全て立ち上がる

Page 9: (続) はじめてのCloud Foundry

しばらくお待ちください ...$ cf dev start -m 3072 -s noneDownloading VM...Progress: |====================>| 100% VM downloaded.Allocating 3072 MB out of 16384 MB total system memory (6414 MB free).Importing VM…Starting VM...Provisioning VM...Waiting for services to start…8 out of 49 running8 out of 49 running8 out of 49 running34 out of 49 running49 out of 49 running _______ _______ _______ ______ _______ __ __| || || | | | | || | | || _ || || ___| | _ || ___|| |_| || |_| || || |___ | | | || |___ | || ___|| _|| ___| | |_| || ___|| || | | |_ | | | || |___ | ||___| |_______||___| |______| |_______| |___|is now running.To begin using PCF Dev, please run: cf login -a https://api.local.pcfdev.io --skip-ssl-validationApps Manager URL: https://local.pcfdev.ioAdmin user => Email: admin / Password: adminRegular user => Email: user / Password: pass

<- 5 分経過<- 7 分経過

<- 8 分経過<- 11 分経過

<- 12 分経過<- 13 分経過<- 14 分 30 秒経過<- 15 分経過

環境に依存だが、 15 分くらい我慢が必要

Page 10: (続) はじめてのCloud Foundry

(Option) ovaファイルからのインストール1. バージョンの確認

$ cf dev versionPCF Dev version 0.23.0 (CLI: 474b3ba, OVA: 0.436.0)

2. network.pivotal.io から上記バージョンの ova ファイルをダウンロードPCF Dev -> Releases -> internal -> pcfdev-v0.436.0.ova

3. インポート$ cf dev import ~/Downloads/pcfdev-v0.436.0.ova

OVA version 0.436.0 imported successfully.# $PCFDEV_HOME( 通常は ~/.pcfdev/ova/) に格納# cf dev のバージョンと一致しない場合はエラーFAILEDError: specified OVA version does not match the expected OVA version (0.436.0) for this version of the cf CLI plugin.

Page 11: (続) はじめてのCloud Foundry

PCFDevの構成変更cf dev start コマンドにて構成変更flag description

-c number-of-cores Specify the number of processor cores used by VM. Default: Number of physical cores.

-d domain Specify the domain that the PCF Dev VM will occupy.

-i ip-address Specify the IP address that the PCF Dev VM will occupy.

-k Import VM certificates into host’s trusted certificate store.

-m memory-in-mb Specify memory to allocate for VM. Default: Half of total memory, with a maximum of 4 GB, or 8 GB with SCS.

-r registry1,registry2,... Specify Docker registries that PCF Dev will use without SSL validation. Use host:port format.

-s service1,service2 Specify the services started with PCF Dev. Options: redis, rabbitmq, spring-cloud-services (scs), default, all, none Default: redis, rabbitmq (MySQL is always available and cannot be disabled.)

-t Specify to perform cf login to PCF Dev after starting, as the ‘user’ user.

cf dev start コマンドのオプション

Page 12: (続) はじめてのCloud Foundry

CPU/Memoryの指定• CPU の変更

$ cf dev start -c “ コア数の指定”# デフォルトでは物理コア数を指定

• メモリの変更$ cf dev start -m “ メモリサイズ (MB) の指定”# デフォルトでは 3GB から 4GB を指定$ cf dev start -m 6144Less than 6144 MB of free memory detected, continue (y/N): >

Page 13: (続) はじめてのCloud Foundry

PCFDev on Cloud

• Vagrant の plugin を利用した PCFDev の展開– vagrant plugin の設定

▪ vagrant plugin install vagrant-aws– イメージを作成

▪ git clone --recursive https://github.com/pivotal-cf/pcfdev.git▪ cd image; ./build -only=amazon-ebs (packer がインストールされている事)

– vagrant の box として登録▪ vagrant box add --force output/oss-aws-v0.box --name

pcfdev/pcfdev– Vagrntfile ファイルに EC2 アカウント情報を入力

▪ ( 参照 ) https://github.com/mitchellh/vagrant-aws– 起動

▪ vagrant up --provider=aws

参考情報AWS 上での PCFDev の展開

https://github.com/pivotal-cf/pcfdev/blob/v0.12.0/DEVELOP.mdhttps://github.com/mitchellh/vagrant-awshttps://www.packer.io/

Page 14: (続) はじめてのCloud Foundry

PCF Devの使い方

Page 15: (続) はじめてのCloud Foundry

PCF Devへのアクセス• 以下のいずれでもログインが可能

– cf dev start -t– cf dev target– cf login -a https://api.local.pcfdev.io --skip-ssl-validation -

u user• あとは、 cf コマンドを利用して操作

– cf push自分で作る場合- mkdir phpdemo; cd phpdemo- echo “<?php phpinfo() ?>” >

index.php- cf push phpdemo

サンプルを利用する場合- git clone https://github.com/cloudfoundry-community/simple-

go-web-app- cd simple-go-web-app- cf push simple-go https://github.com/cloudfoundry-samples

https://github.com/cloudfoundry-community

Page 16: (続) はじめてのCloud Foundry

PCF Devで利用可能なサービス• 利用可能なサービスとそのサービスプランの表示

– MySQL と Local Volume(beta) のサービスは固定– Redis, RabbitMQ は、 Spring Cloud Service は任意で設定$ cf mGetting services from marketplace in org pcfdev-org / space pcfdev-space as user...OK

service plans descriptionlocal-volume free-local-disk Local service docs: https://github.com/cloudfoundry-incubator/local-volume-release/p-mysql 512mb, 1gb MySQL databases on demand

TIP: Use 'cf marketplace -s SERVICE' to view descriptions of individual plans of a given service.$ cf m -s p-mysqlGetting service plan information for service p-mysql as user...OK

service plan description free or paid512mb PCF Dev MySQL Server free1gb PCF Dev MySQL Server free

cf marketplace

Page 17: (続) はじめてのCloud Foundry

サービスの切り出し (インスタンス化)• アプリケーションに割り当てる、サービスのインスタンスを作成– cf marketplaceより確認出来るプラン (Plan)を指定、アプリに提供するサービス内容を決める

– プランによって、データベースのサイズや、サポートするコネクション数などが決まる

$ cf create-service p-mysql 512mb mydbCreating service instance mydb in org pcfdev-org / space pcfdev-space as user...OK$ cf servicesGetting services in org pcfdev-org / space pcfdev-space as user...OK

name service plan bound apps last operationmydb p-mysql 512mb create succeeded

cf create-service

Page 18: (続) はじめてのCloud Foundry

サービス (インスタンス )の割り当て• アプリケーションにサービスインスタンスを割り当てる

– アプリケーションは割り当てられたサービスを利用可能– 実際にはアクセス情報を提供 (VCAP_SERVICES)– cf restage コマンドにより環境変数への反映を有効化

$ cf bind-service spring-music mydbBinding service mydb to app spring-music in org pcfdev-org / space pcfdev-space as user...OKTIP: Use 'cf restage spring-music' to ensure your env variable changes take effect$ cf servicesGetting services in org pcfdev-org / space pcfdev-space as user...OK

name service plan bound apps last operationmydb p-mysql 512mb spring-music create succeeded

cf bind-service

Page 19: (続) はじめてのCloud Foundry

カスタムサービスのインスタンス作成• マーケットプレイスに存在しないサービスのインスタンス作成が可能

– cf create-service はマーケットプレイスにあるサービスを対象– アプリケーションへの割り当ては、 cf bind-service で同様に可能– Laptop で動くデータベースなどの活用が可能 ( 後述 )$ cf create-user-provided-service mydb-cusp -p '{"username":"user","password":"pass"}'

Creating user provided service mydb-cusp in org pcfdev-org / space pcfdev-space as user...OK$ cf servicesGetting services in org pcfdev-org / space pcfdev-space as user...OK

name service plan bound apps last operationmydb p-mysql 512mb spring-music create succeededmydb-cusp user-provided

cf create-user-provided-services

Page 20: (続) はじめてのCloud Foundry

Laptop上のサービスの利用• PCF Dev 上サービスではなく、 Laptop 上のサービスをアプリケーションが利用する場合は、 host.pcfdev.io上のサービスとして登録する

local.pcfdev.io(192.168.11.11)

host.pcfdev.io(192.168.11.1)

PCF Dev VM Laptop

MySQLAPI

gatewayKVSAPP

myapp.local.pcfdev.io

cf cups hostdb -b ...cf bind-service myapp hostdbcf restart myapp( 次のスライドで説明 )

p-mysql

Routing

cf create-user-provided-servicesの応用

* localhost 以外のアクセスを許可しておくMySQL の場合 : mysql> GRANT ALL ON *.* TO pcfdev@'%' identified by ...';

Page 21: (続) はじめてのCloud Foundry

Laptop上のサービスの利用# ローカルのデータベース (MySQL) へのアクセス情報をサービスとして登録% cf update-user-provided-service mydb-cusp -p '{"hostname": "host.pcfdev.io","jdbcUrl": "jdbc:mysql://host.pcfdev.io:3306/pcfdev?user=pcfdev\u0026password=pcfdev","name": "pcfdev","password": "pcfdev","port": 3306,"uri": "mysql://pcfdev:[email protected]:3306/pcfdev?reconnect=true","username": "pcfdev"}'# サービスをアプリケーションにバインド% cf bind-service spring-music mydb-cusp# アプリケーションをリステージして、最新状態 ( 環境変数 ) を適応させる% cf restage spring-music

cf create-user-provided-servicesの応用

Page 22: (続) はじめてのCloud Foundry

PCF Devのアーキテクチャ概要

Page 23: (続) はじめてのCloud Foundry

PCFアーキテクチャ

https://docs.cloudfoundry.org/concepts/architecture/

Page 24: (続) はじめてのCloud Foundry

PCFアーキテクチャ (Diegoとその周辺 )

https://github.com/cloudfoundry-incubator/diego-design-notes

tcp−emitter

Page 25: (続) はじめてのCloud Foundry

PCF Dev VM

ログ管理(loggregator)

APIエンドポイント(Cloud Controller)

PCF Devのアーキテクチャ

Virtualbox

Container

APP

Container

APP

Container

APP

Guardian(Garden-runC)

認証・認可(UAA)

オブジェクトストア(Blob store)

ルーティング(Router)

cf devプラグイン

cfコマンド

~/.pcfdev

cf target

cf dev target(cf dev start -t)

cf dev ssh

PCF Dev on AWS の場合は Vagrant 経由で管理

その他

プロセス

cf dev start

Page 26: (続) はじめてのCloud Foundry

PCF Devのプロセス• 単一 VM 内で CF コンポーネントをプロセス (job) として起動• monit デーモンで管理

– diego のコンポーネントも管理▪ garden -> guardian▪ auctioneer▪ bbs

— 等々• 複数プロセスの起動はできない

– ( コンポーネントレベルの )HA ができない– スケールできない

Page 27: (続) はじめてのCloud Foundry

起動している CFのプロセス (monit summary)

Process 'gorouter' runningProcess 'garden' runningProcess 'file_server' runningProcess 'etcd' runningProcess 'etcd_consistency_checker' runningProcess 'doppler' runningProcess 'consul_agent' runningProcess 'cloud_controller_worker_1' runningProcess 'cloud_controller_ng' runningProcess 'cloud_controller_worker_local_1' runningProcess 'cloud_controller_worker_local_2' runningProcess 'nginx_cc' runningProcess 'cloud_controller_clock' runningProcess 'cf-mysql-broker' runningProcess 'cf-mysql-route-registrar' runningProcess 'quota-enforcer' runningProcess 'cc_uploader' runningProcess 'blobstore_nginx' runningProcess 'blobstore_url_signer' runningProcess 'bbs' runningProcess 'auctioneer' runningSystem 'system_localhost' running

# monit summaryThe Monit daemon 5.2.5 uptime:

Process 'pcfdev-api' runningProcess 'pcfdev-nginx' runningProcess 'uaa' runningProcess 'tps_listener' runningProcess 'tps_watcher' runningProcess 'tcp_emitter' runningProcess 'syslog_drain_binder' runningProcess 'syslog-configurator' runningProcess 'stager' runningProcess 'ssh_proxy' runningProcess 'routing-api' runningProcess 'route_registrar' runningProcess 'router_configurer' runningProcess 'route_emitter' runningProcess 'rep' runningProcess 'nsync_listener' runningProcess 'nsync_bulker' runningProcess 'nats' runningProcess 'mariadb_ctrl' runningProcess 'galera-healthcheck' runningProcess 'gra-log-purger-executable' runningProcess 'cluster_health_logger' runningProcess 'metron_agent' runningProcess 'loggregator_trafficcontroller' runningProcess 'localdriver' runningProcess 'localbroker' runningProcess 'haproxy' running

Page 28: (続) はじめてのCloud Foundry

Appendix: Garden, Guardian, runC

Page 29: (続) はじめてのCloud Foundry

Garden• API サーバと Client を定義してアプリケーションコンテナをバックエンドを介して管理• バックエンドは以下の種類に分類

– Garden-linux (Garden-runC に取り込まれる cf-release: v246 付近 )

– Garden-runC (Guardian)– Garden-windows (Greenhouse)

Page 30: (続) はじめてのCloud Foundry

Gardenのアーキテクチャ

Backend

Garden-linux Garden-runC(Guardian)

Garden-Windows(Greenhouse)

Docker(docker image)

Droplet(APP+buildpack)

WindowsContainer

Garden Server

OCI Bundle(Container)

Garden Client

Page 31: (続) はじめてのCloud Foundry

runC• OCI 仕様に基づいてコンテナを管理する CLI ツール

– Runtime とも言う場合もある• 通常、 OCI Bundle と呼ばれるコンテナ作成後に、 runc を使ってコンテナ管理

– runc create– runc start– runc delete– runc list– runc event

https://github.com/opencontainers/runc

Page 32: (続) はじめてのCloud Foundry

runCによるコンテナ管理

# ps -ef|grep 7f692927-b9b1-429f-6f64-f1cae11f7da9 |grep -v greproot 16771 13491 0 13:33 ? 00:00:00 runc events 7f692927-b9b1-429f-6f64-f1cae11f7da9root 16989 13491 0 13:33 ? 00:00:00 /var/vcap/packages/guardian/bin/dadoo exec runc /var/vcap/data/garden/depot/7f692927-b9b1-429f-6f64-f1cae11f7da9/processes/68f9fd72-65fe-4307-5870-2e3506573245 7f692927-b9b1-429f-6f64-f1cae11f7da9root 16996 13491 0 13:33 ? 00:00:00 /var/vcap/packages/guardian/bin/dadoo exec runc /var/vcap/data/garden/depot/7f692927-b9b1-429f-6f64-f1cae11f7da9/processes/af3dcf9e-0f95-4528-671a-b0a1cd3af6b8 7f692927-b9b1-429f-6f64-f1cae11f7da9

• PCF Dev における runC 関連のプロセス– depot 配下の <handle> でコンテナを特定

▪ 下記の例では「 26641892-5df3-4ff8-7d28-e5a23f9005c2 」の部分

詳しくはこちら/var/vcap/data/garden/depot/<handle>/processes/(sshd, runtime)

diego-sshd

application(container)

Page 33: (続) はじめてのCloud Foundry

Gurdian• シングルホストの OCI* コンテナマネージャー

– Garden-linux の新しいバージョンとして開発– 小さいフットプリントで、自由度の高い runC Wrapper としてマルチテナントに対応させることが当初の目的– Garden Backend として機能 (runc をバックエンドとしてコンテナを実行 )

• Garden-runC– Guardian の BOSH release

https://containereyes.wordpress.com/2016/02/17/an-update-on-guardian-an-oci-based-runtime-for-cloud-foundry/http://www.slideshare.net/PhilEstes/devoxx-2016-a-developers-guide-to-oci-and-runc

*OCI(Open Container Initiative)

Page 34: (続) はじめてのCloud Foundry

Gurdian• Garden-linux から以下を継承

– コンテナの安定稼働– root filesystem の管理– Cloud Foundry ネットワーキングとの連携– API サーバとしての機能

• runC から以下を継承– コンテナエンジンとしての機能– Garden API の対応– OCI準拠のバンドルをコンテナごとに作成

https://containereyes.wordpress.com/2016/02/17/an-update-on-guardian-an-oci-based-runtime-for-cloud-foundry/

Page 35: (続) はじめてのCloud Foundry

今後の予定• 2017/2/6: クラウドネイティブな人材を育成する「 Pivotal 認定トレーニング」のご紹介セミナー

– 会場 : カサレアル泉岳寺トレーニングセンター• 2017/2/9: はじめてシリーズ (第 3回 )

– 会場 : Pivotal ジャパン• 2017/2/22: Wagby & Cloud Foundry on Azure

– 会場 : Pivotal ジャパンCF Meetup, Concourse Meetup も近々開催予定!

Page 36: (続) はじめてのCloud Foundry