k8s meetup containerized_cloud_foundry
TRANSCRIPT
Real implementation ofContainerized Cloud Foundryon Kubernetes
@jyoshise
Jan 19, 2017
1
自己紹介
• 吉瀬 淳一 (@jyoshise)• 担当 : ギター(たまにじゃんけんで負けるとベース)
•
• Lead Architect, Helion Professional Services APJ• IaaS(OpenStack) とか• PaaS(Stackato/CloudFoundry) とか• アジャイル / クラウドネイティブ開発とか
本日のテーマ
大規模な分散システム = マイクロサービスの集合体を、 Kubernetes の上でライフサイクル管理をおこないサービス提供するためにはどんな仕組みが必要なのか。
なんでわざわざ Kubernetesの上でCloud Foundryなのか
5
PaaSとはコード書くンゴ! ビルドするンゴ! デプロイするンゴ! リリースするンゴ!環境構築するンゴ! 運用するンゴ!
6
PaaSとはコード書くンゴ! ビルドするンゴ! デプロイするンゴ! リリースするンゴ!環境構築するンゴ! 運用するンゴ!
このへんを勝手にいい感じにやってくれるのがPaaS
7
PaaSに求められる機能• ソースコードからアプリケーションをビルドする
• コードレポジトリ、 CI ツールとの連動• ビルドパイプラインの管理• 各種言語 / フレームワークへの柔軟な対応
• アプリケーションの実行環境を提供する• インフラリソースの管理• スペースの隔離• ユーザ / クオータの管理• スケーリング• ルーティング / リバースプロキシ
• アプリケーションコンテナを管理する• バージョンの管理• ロールバック、 Blue-Green デプロイメント
• サービス間の接続性を提供する• DB などのマネージドサービス• 外部サービスと接続するためのブローカー• サービスカタログ
• アプリケーションサービス=マイクロサービスの集合体の管理• テンプレート化とオーケストレーション
8
Cloud Foundryのいいところ• 多くの Public PaaS プロバイダが採用している
• NTT-Communications, IBM, Fujitsu, Pivotal, GE, etc• こっちの PaaS で動くアプリはあっちの PaaS でも動く
• エコシステムが充実している• 多様な言語 / フレームワークに対応する Buildpack• .NET にも対応してたりとか• 多様なバックエンドサービスに対応するサービスブローカー
9
Cloud Foundryの微妙なところ• Cloud Foundry 自体が大規模な分散システム
• 多数のマイクロサービスの集合体• 構築と運用がぶっちゃけすげー大変• そのために BOSH という仕組みがあるが BOSH 自体これまた分散システムだったり・・・
• コンテナエンジンが OCI 準拠にはなったものの、全体としてコンテナに最適化された仕組みとは言い難い
10
客観的にみて• 今いちばん使われていて機能が充実している PaaS は Cloud
Foundry
• アプリケーションの開発はコンテナベースにシフトしつつあり、 Containerized Application/Service の実行基盤 (CaaS) が熱い• コンテナオーケストレーションの大本命は Kubernetes
• PaaS と CaaS の境界がなくなりつつある
11
HPEのアプローチ• Kubernetes ベースの CaaS プラットフォームを作る。• 現状完成度が高い PaaS である Cloud Foundry を、それ自体を一つの Containerized Service として、 CaaS プラットフォームの上で実装する。
HPE Helion Stackato 4.0
12
vSphereAWSHelion OpenStack
HPE Helion Stackato Product Overview
13
Platform Services
Cloud Foundry Code Engine (CI)
modern (CF-based) runtime for deploying and managing 12-factor cloud native applications
Developer &Operator
Experience
Console
Tools
CLI
commercial product features
Control Plane
Kubernetes Service Manager
modern (Kubernetes-based) control plane for orchestrating containerized services
14
Stackato4の構成要素• HCP(Helion Control Plane)
• IaaS の API を利用し、 k8s クラスタの管理を行う。• IaaS の API を利用し、 Containerized Service に必要なインフラリソース(ストレージ、 LB など)を後述の HSM に提供する。• 認証 / 認可を管理する( UAA )。
• HSM(Helion Service Manager)• Containerized Services のサービスカタログの管理、サービスインスタンスの作成 / 配備と実行管理を行う。
• Containerized Services• HCF(Helion Cloud Foundry): Cloud Foundry そのもの• HCE(Helion Code Engine) : Concourse CI ベースの CI エンジン• HSC(Helion Service Console): 管理用の Web UI• MySQL, Postgres, Redis など
Stackato4の構成要素
15
• HCP(Helion Control Plane)• IaaS の API を利用し、 k8s クラスタの管理を行う。• IaaS の API を利用し、 Containerized Service に必要なインフラリソース(ストレージ、 LB など)を後述の HSM に提供する。• 認証 / 認可を管理する( UAA )。
• HSM(Helion Service Manager)• Containerized Services のサービスカタログの管理、サービスインスタンスの作成 / 配備と実行管理を行う。
• Containerized Services• HCF(Helion Cloud Foundry): Cloud Foundry そのもの• HCE(Helion Code Engine) : Concourse CI ベースの CI エンジン• HSC(Helion Service Console): 管理用の Web UI• MySQL, Postgres, Redis など
• これらは Kubernetes, Terraform, Cloud Foundry などの OSS を活用していますが、 HCP や HSM などの実装は HPEが開発したプロプラです。
• これら HPE が開発したコードはMicrofocus との提携により、 SUSE に移管され、 HPE はディストリビューションに注力します。
• SUSE は Kubernetes および Cloud Foundry のコミュニティーへのコントリビュートを強化していくと表明しています。
16
見てみましょう• HSC• HCF• HCE• ビルドパイプラインの作成
HCP (Helion Code Engine)
17
18
Infrastructure-as-a-Service PlatformvSphere, AWS or Openstack with HOS or CloudSystem
Helion Control Plane
HelionControl Plane
Kubernetes
Helion Service Manager
Helion Cloud Foundry Helion Code Engine MySQL
…
Authentication and Authorization
Infrastructure:
Control Plane:
Services implemented in Containers:
POD
POD
POD
… POD
POD
POD
… POD
POD
19
B
IaaSへの Kubernetesクラスタの展開
– インストール時は、インストーラ (bootstrap) が設定ファイルを読み込んで、 Terraform が IaaSの API を叩いて Kubernetes クラスタを展開– Core Service(HCP,UAA,HSM) のコンテナイメージを DockerHub から Pull してサービスを構成
Jump System:$ bootstrap install …
Infrastructure as a Service API endpoints
Bootstrap.properties
Define Infrastructure
Kube-Master
Kube-NodeKube-Node
Gluster
Gluster
SW Install
20
IaaSへの展開イメージ( OpenStackの例)
Stackato Tenant Network
DHCP provided by OpenStack
External Network
Gluster1 Gluster2 Kubernetes Master
Kubernetes Node1
Kubernetes Node2
Kubernetes Node3
Centralized Virtual Router
LBaaSLBaaS
LBaaSLBaaS
LBaaSLBaaS
Internet
Jump
DNS Server Required
21
App_i_0Application
PlatformServices
(i.e. HCF )
IaaS
HCF HA components are multi-instance (including Diego Cells) & distributed across AZs by Control Plane
Control PlaneMultiple Kubernetes Masters and Nodes across AZs
M
Compute, Storage, Network Isolation
CF_A_0 CF_A_1 CF_A_2
CF_B_0
CF_C_0
CF_B_1
CF_C_1
CF_B_2
CF_C_2
App_i_3 App_i_1 App_i_4 App_i_2 App_i_n
AZ # 1 AZ # 2 AZ # 3
User creates multiple instances of Apps that are distributed across Diego Cells
MM NNMMM NN
MMM NN
HA構成
22
見てみましょう• 設定ファイル( bootstrap.properties)• IaaS(OpenStack) から見ると : Horizon• HCP から見ると :
• $ hcp list-nodes• Kubernetes から見ると :
• $ kubectl get nodes• ノード追加してみる?
HSM (Helion Service Manager)
23
24
HSM Services
25
HSMで管理されるサービスの定義–SDL: Service Definitions
–サービスのテンプレート–k8s の” deployment”,”service” の構成情報
–IDL: Instance Definitions–サービスをデプロイする際のパラメーター
Service Deployment – High-Level Flow
Service Creation Initiated
Create Volumes Pre-Flight Create
ServicesCreate
Deployment Post-Flight Completed
26
HSM Create service
HSM Service Created
- HSM service creation and validation- Hand off to HCP Instance manager
- Creation of required volume for service- Handled by the HCP Resource Manager
- Run the Pre-Flight POD for the service- Performs pre-instance configuration tasks- If an Update, perform any update-specific tasks
- Create the Kubernetes “Service” objects- Handles network Endpoints and Load Balancers
- Creates the Kubernetes “Deployment”- Initiates the creation of PODs for the service- Schedules PODs according to AZ definitions
- Run the Post-Flight POD for the instance- Performs deployment configuration tasks- If an Update, perform any update-specific tasks
- Post-Flight completes- No errors encountered
27
見てみましょう• Service Catalog
• $ hsm list-services• SDL• IDL
• $ hsm create-instance stackato.hpe.redis 3.0 -d --ask-all-params• インスタンスの作成
• $ kubectl logs –f ipmgr-0-xxx --namespace hcp• $ hsm create-instance stackato.hpe.redis 3.0• $ hsm list-instances
• HCF のインスタンスはどうなっているか• $ hsm get-instance hcf• $ kubectl get pods --namespace hcf• $ kubectl get services --namespace hcf• $ kubectl get deployment api-0 -o json --namespace hcf• $ kubectl get pv | grep hcf
運用で気になるところ
28
29
運用で気になるところ• ログはどうすんの?
• Pod レベルのログは、 HCP の” flight-recorder” pod に集められてそこから Logstash などに送ります。• Cloud Foundry 上のアプリケーションレベルのログは、 Cloud Foundry の loggregatorサービスで管理できます。
• 監視はどうすんの?• 一般的には Cloud Foundry の監視は BOSH で行いますが、 Stackato は BOSH を使っていません。• Containerized Cloud Foundry の監視= Kubernetes の Pod の監視なので、 Prometheusなどを使うのがよいと思います。
• パッチとかバージョンアップはどうすんの?• HSM で管理されるサービスは、新たな SDL を使ってバージョンアップできます。 Kubernetes のローリングアップグレードの仕組みを使います。• HCP/HSM 自体も Containerized Service なので同様にアップグレードできます。• Kubernetes 自体のバージョンアップは、新ノード追加→旧ノード削除 で行います。
Questions?
30