k8s meetup containerized_cloud_foundry

30
Real implementation of Containerized Cloud Foundry on Kubernetes @jyoshise Jan 19, 2017 1

Upload: junichi-yoshise

Post on 25-Jan-2017

658 views

Category:

Software


1 download

TRANSCRIPT

Page 1: K8s meetup containerized_cloud_foundry

Real implementation ofContainerized Cloud Foundryon Kubernetes

@jyoshise

Jan 19, 2017

1

Page 2: K8s meetup containerized_cloud_foundry

自己紹介

• 吉瀬 淳一 (@jyoshise)• 担当 :  ギター(たまにじゃんけんで負けるとベース)

•            

• Lead Architect, Helion Professional Services APJ• IaaS(OpenStack) とか• PaaS(Stackato/CloudFoundry) とか• アジャイル / クラウドネイティブ開発とか

Page 3: K8s meetup containerized_cloud_foundry

本日のテーマ

大規模な分散システム = マイクロサービスの集合体を、 Kubernetes の上でライフサイクル管理をおこないサービス提供するためにはどんな仕組みが必要なのか。

Page 4: K8s meetup containerized_cloud_foundry

なんでわざわざ Kubernetesの上でCloud Foundryなのか

Page 5: K8s meetup containerized_cloud_foundry

5

PaaSとはコード書くンゴ! ビルドするンゴ! デプロイするンゴ! リリースするンゴ!環境構築するンゴ! 運用するンゴ!

Page 6: K8s meetup containerized_cloud_foundry

6

PaaSとはコード書くンゴ! ビルドするンゴ! デプロイするンゴ! リリースするンゴ!環境構築するンゴ! 運用するンゴ!

このへんを勝手にいい感じにやってくれるのがPaaS

Page 7: K8s meetup containerized_cloud_foundry

7

PaaSに求められる機能• ソースコードからアプリケーションをビルドする

• コードレポジトリ、 CI ツールとの連動• ビルドパイプラインの管理• 各種言語 / フレームワークへの柔軟な対応

• アプリケーションの実行環境を提供する• インフラリソースの管理• スペースの隔離• ユーザ / クオータの管理• スケーリング• ルーティング / リバースプロキシ

• アプリケーションコンテナを管理する• バージョンの管理• ロールバック、 Blue-Green デプロイメント

• サービス間の接続性を提供する• DB などのマネージドサービス• 外部サービスと接続するためのブローカー• サービスカタログ

• アプリケーションサービス=マイクロサービスの集合体の管理• テンプレート化とオーケストレーション

Page 8: K8s meetup containerized_cloud_foundry

8

Cloud Foundryのいいところ• 多くの Public PaaS プロバイダが採用している

• NTT-Communications, IBM, Fujitsu, Pivotal, GE, etc• こっちの PaaS で動くアプリはあっちの PaaS でも動く

• エコシステムが充実している• 多様な言語 / フレームワークに対応する Buildpack• .NET にも対応してたりとか• 多様なバックエンドサービスに対応するサービスブローカー

Page 9: K8s meetup containerized_cloud_foundry

9

Cloud Foundryの微妙なところ• Cloud Foundry 自体が大規模な分散システム

• 多数のマイクロサービスの集合体• 構築と運用がぶっちゃけすげー大変• そのために BOSH という仕組みがあるが BOSH 自体これまた分散システムだったり・・・

• コンテナエンジンが OCI 準拠にはなったものの、全体としてコンテナに最適化された仕組みとは言い難い

Page 10: K8s meetup containerized_cloud_foundry

10

客観的にみて• 今いちばん使われていて機能が充実している PaaS は Cloud

Foundry

• アプリケーションの開発はコンテナベースにシフトしつつあり、 Containerized Application/Service の実行基盤 (CaaS) が熱い• コンテナオーケストレーションの大本命は Kubernetes

• PaaS と CaaS の境界がなくなりつつある

Page 11: K8s meetup containerized_cloud_foundry

11

HPEのアプローチ• Kubernetes ベースの CaaS プラットフォームを作る。• 現状完成度が高い PaaS である Cloud Foundry を、それ自体を一つの Containerized Service として、 CaaS プラットフォームの上で実装する。

Page 12: K8s meetup containerized_cloud_foundry

HPE Helion Stackato 4.0

12

Page 13: K8s meetup containerized_cloud_foundry

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

Page 14: K8s meetup containerized_cloud_foundry

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 など

Page 15: K8s meetup containerized_cloud_foundry

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 のコミュニティーへのコントリビュートを強化していくと表明しています。

Page 16: K8s meetup containerized_cloud_foundry

16

見てみましょう• HSC• HCF• HCE• ビルドパイプラインの作成

Page 17: K8s meetup containerized_cloud_foundry

HCP (Helion Code Engine)

17

Page 18: K8s meetup containerized_cloud_foundry

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

Page 19: K8s meetup containerized_cloud_foundry

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

Page 20: K8s meetup containerized_cloud_foundry

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

Page 21: K8s meetup containerized_cloud_foundry

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構成

Page 22: K8s meetup containerized_cloud_foundry

22

見てみましょう• 設定ファイル( bootstrap.properties)• IaaS(OpenStack) から見ると : Horizon• HCP から見ると :

• $ hcp list-nodes• Kubernetes から見ると :

• $ kubectl get nodes• ノード追加してみる?

Page 23: K8s meetup containerized_cloud_foundry

HSM (Helion Service Manager)

23

Page 24: K8s meetup containerized_cloud_foundry

24

HSM Services

Page 25: K8s meetup containerized_cloud_foundry

25

HSMで管理されるサービスの定義–SDL: Service Definitions

–サービスのテンプレート–k8s の” deployment”,”service” の構成情報

–IDL: Instance Definitions–サービスをデプロイする際のパラメーター

Page 26: K8s meetup containerized_cloud_foundry

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

Page 27: K8s meetup containerized_cloud_foundry

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

Page 28: K8s meetup containerized_cloud_foundry

運用で気になるところ

28

Page 29: K8s meetup containerized_cloud_foundry

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 自体のバージョンアップは、新ノード追加→旧ノード削除 で行います。

Page 30: K8s meetup containerized_cloud_foundry

Questions?

30