开源广进 用service catalog构造k8s服务能力中心

37
开源广进 用Service Catalog构造K8S服务能力中心

Upload: others

Post on 07-Feb-2022

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 开源广进 用Service Catalog构造K8S服务能力中心

开源广进用Service Catalog构造K8S服务能力中心

Page 2: 开源广进 用Service Catalog构造K8S服务能力中心

目录

• 什么是Open Service Broker API• 什么是Service Catalog• 什么是Service Broker• 服务能力中心的实践

Page 3: 开源广进 用Service Catalog构造K8S服务能力中心

什么是Open Service Broker API

2011 •V1•VMware开源•MySQL•PostgreSQL•RabbitMQ

2013•v2•将平台与服务提供解耦•定义与平台无关的ServiceBroker API

2015•增加异步服务创建

2016•Google Cloud/Deis•OPEN ServiceBroker API•扩大使用范围

MongoDB

Redis

满足“12因子”应用中“应用数据应存储在后端服务中”

https://github.com/openservicebrokerapi/servicebroker.git

Page 4: 开源广进 用Service Catalog构造K8S服务能力中心

Open Service Broker API基本概念

• 应用平台(App Platform)• 应用托管平台(K8S、CF等),由应用平台承载的应用需要使用相关服务

• Service Broker• 平台与服务间的消息通道,用来管理服务平台

• 服务(Services):• 由服务平台提供的能力列表,MySQL、Hadoop等

• 套餐(Plan)• 服务平台与服务最终用户间约定的服务标准、能力指标,例如空间、性能、安

全等约束条件

• 服务实例(Service Instance)• 按照套餐约定向指定用户提供的服务实体,例如一个MySQL数据库,一个

YARN资源队列

Page 5: 开源广进 用Service Catalog构造K8S服务能力中心

Open Service Broker API基本流程

平台 ServiceBroker

获取服务列表 GET v2/catalog

返回服务信息(服务项、套餐等)

创建服务实例 PUT v2/service_instance/:id

(异步)返回服务实例创建结果

与应用进行绑定 PUT v2/service_instance/:instance_id/service_binding/:id

返回服务连接信息(IP、用户名、密码等)

删除服务实例或绑定

服务

创建/销毁/变更服务实例

OSBA流程

Page 6: 开源广进 用Service Catalog构造K8S服务能力中心

Open Service Broker API基本流程

平台 ServiceBroker

获取服务列表 GET v2/catalog

返回服务信息(服务项、套餐等)

创建服务实例 PUT v2/service_instance/:id

(异步)返回服务实例创建结果

与应用进行绑定 PUT v2/service_instance/:instance_id/service_binding/:id

返回服务连接信息(IP、用户名、密码等)

删除服务实例或绑定

服务

创建/销毁/变更服务实例

OSBA流程

信息集中展示

服务集中提供

能力集中输出

Page 7: 开源广进 用Service Catalog构造K8S服务能力中心

Open Service Broker API基本流程

平台 ServiceBroker

返回服务信息(服务项、套餐等)

创建服务实例 PUT v2/service_instance/:id

(异步)返回服务实例创建结果

与应用进行绑定 PUT v2/service_instance/:instance_id/service_binding/:id

返回服务连接信息

删除服务实例或绑定

服务

创建/销毁/变更服务实例

OSBA流程

Service Catalog

调用API定义流程提供界面

Service Brokers

提供API执行任务输出能力

Page 8: 开源广进 用Service Catalog构造K8S服务能力中心

目录

• 什么是Open Service Broker API• 什么是Service Catalog• 什么是Service Broker• 服务能力中心的实践

Page 9: 开源广进 用Service Catalog构造K8S服务能力中心

Service Catalog是K8S向前演进的一环

Kubernetes1.6 and the Open Source Roadmap - Aparna Sinha

Page 10: 开源广进 用Service Catalog构造K8S服务能力中心

OSB API在K8S中的实现-Service Catalog

• 2016年9月成立Kubernetes Service Catalog SIG• 最新版本0.0.6• Deis/steward项目

Page 11: 开源广进 用Service Catalog构造K8S服务能力中心

ServiceCatalog设计

Page 12: 开源广进 用Service Catalog构造K8S服务能力中心

运行ServiceCatalog

https://github.com/kubernetes-incubator/service-catalog/tree/master/charts/catalog

安装命令$ helm install charts/catalog --name catalog --namespace catalog

注意设置几个参数apiserver.image = quay.io/kubernetes-service-catalog/apiserver:canarycontrollerManager.image = quay.io/kubernetes-service-catalog/controller-manager:canaryapiserver.storage.type = etcdetcd_image = quay.io/coreos/etcd:latest

$ helm install charts/catalog --name catalog --namespace catalog --set key=value[,key=value]

Page 13: 开源广进 用Service Catalog构造K8S服务能力中心

ServiceCatalog基本概念

ServiceCatalog OSB API

Application 部署在K8S中的程序包

Binding Binding 表示应用与服务实例之间的连接关系

Broker Broker 用来管理一组服务的实体

Credentials 应用连接服务的鉴权信息

Instance Service Instance 服务实例

Service Class Service 通过Broker提供的服务能力列表项

Plan Plan 套餐,用来标明服务特性的列表项

https://github.com/kubernetes-incubator/service-catalog/blob/master/docs/design.md

Page 14: 开源广进 用Service Catalog构造K8S服务能力中心

关于鉴权信息向应用的注入

• 借助于K8S新发布的PodPreset特新来管理鉴权信息的注入

• 将用户信息与系统信息分离• 简化Binding设计• 方便提供多种注入方式

Page 15: 开源广进 用Service Catalog构造K8S服务能力中心

目录

• 什么是Open Service Broker API• 什么是Service Catalog• 什么是Service Broker• 服务能力中心的实践

Page 16: 开源广进 用Service Catalog构造K8S服务能力中心

Service Brokers是服务的中介

Service Catalog统一流程

Service Broker个性执行

OSBA

Page 17: 开源广进 用Service Catalog构造K8S服务能力中心

如何开发一个Broker

• 在CloudFoundry中给我们提供了足够的参考• https://github.com/cloudfoundry-

community?language=&page=2&q=broker&type=&utf8=%E2%9C%93

• 当然也有更容易与K8S适配的方案• https://github.com/openshift/open-service-broker-sdk

• 如果你有一些Openshift的模板(openshift template)• 在openshift 3.6版本之后新增了一个template Service Broker

• 如果你使用ansible来自动化你的日常工作• https://github.com/fusor/ansible-service-broker

Page 18: 开源广进 用Service Catalog构造K8S服务能力中心

关于Service Catalog和Brokers的更多信息

• FROM Paul Morie @RedHat• https://github.com/pmorie/catalog-links

Page 19: 开源广进 用Service Catalog构造K8S服务能力中心

目录

• 什么是Open Service Broker API• 什么是Service Catalog• 什么是Service Broker• 服务能力中心的实践

Page 20: 开源广进 用Service Catalog构造K8S服务能力中心

传统服务交付效率不高

TASK TIME (MINS)

准备服务器

准备存储和网络

工作任务排期

安装操作系统

安装后检查

配置操作系统

安装应用运行时

配置应用程序

工作任务排期

安全配置和扫描

30

30

4 Days

90

60

120

180

90

5 Days

270

工期 12 hours

10 Days人日

开发者

基础设施管理员

系统管理员

安全管理员

Page 21: 开源广进 用Service Catalog构造K8S服务能力中心

信息传递效率不高

Page 22: 开源广进 用Service Catalog构造K8S服务能力中心

需要交付的服务越来越多

存储 分析 预测

Page 23: 开源广进 用Service Catalog构造K8S服务能力中心

服务能力中心达成目标

自动化

自服务规范化

Page 24: 开源广进 用Service Catalog构造K8S服务能力中心

为什么选择Open Service Broker API

• Service Broker API在CloudFoundry中的成功应用• BlueMix、pivotal.io通过Service Broker集成了众多服务

• 协议简单,易于实现,易于沟通• 有众多适用于CF的Broker代码可以参考

Page 25: 开源广进 用Service Catalog构造K8S服务能力中心

ServiceBroker

使用流程

ServiceBrokerService

Brokercatalogprovisionbindunbinddeprovision

运行环境2

运行环境1

provisionbindunbinddeprovision

BackingService Service

Broker

ServicePlatForm

ServiceInstance1

ServiceInstance2app1

app2

设置服务发现

服务发现服务凭证

服务发现服务凭证

Page 26: 开源广进 用Service Catalog构造K8S服务能力中心

新增K8S资源

● type Service struct {...}● type Pod struct {...}● type ReplicationController struct {...}● …● ...● type ServiceBroker struct {...}● type BackingService struct {...}● type ServiceInstance struct {...}

● RunNodeController()● RunScheduler()● RunReplicationController()● …● ...● RunServiceBrokerController()● RunServiceInstanceController()

Api Serveretcd

ServiceBorkerController

ServiceInstanceController

ServiceBroker

catalogprovisionbind

update rc

create servciebrokercreate serviceinstance

Page 27: 开源广进 用Service Catalog构造K8S服务能力中心

Controller调用ServiceBroker API

● ServiceBrokerController○ Fetch catalog

(GET /v2/catalog)

● ServiceInstanecController○ Provision instance

(PUT /v2/service_instances/:id)○ Creating binding

(PUT /v2/service_instances/:id/service_bindings/:id)■ Update RC

○ Remove binding (DELETE /v2/service_instances/:id/service_bindings/:id)■ Update RC

○ Remove instance (DELETE /v2/service_instances/:id)

Page 28: 开源广进 用Service Catalog构造K8S服务能力中心

大数据服务ServiceBroker实现

Page 29: 开源广进 用Service Catalog构造K8S服务能力中心

应用与大数据服务编排

kubernetes

node node node node node

servicebroker

app1更新应用RC增加服务环境变量

user:pass

yarnnewspark instanceuser:pass

生成服务实例

defaultspark instance

user:pass

开通

绑定

Page 30: 开源广进 用Service Catalog构造K8S服务能力中心

应用与大数据服务编排

servicebroker

kubernetes

node node node node node

servicebroker

生产更新应用RC

增加服务环境变量

user:pass

yarnnewspark instance

user:pass

生成服务实例

defaultspark instance

user:pass

测试生产

newspark instanceuser:pass

测试user:pass

Page 31: 开源广进 用Service Catalog构造K8S服务能力中心

大数据应用和常规应用的混合编排

应用混排

NODE NODE

StorageVolume

内部服务K8s service

Router

Deploy

config

Master

Image Registry

Build

config

Gitrepo

Market Place服务管理

ServiceBroker

鉴权 调度

API接口

性能管理 可用性探测

后端服务

ServiceBrokerNODE

Build Test/Verify Package repository

VersionControl

InfrastructurePlatform

(IaaS, PaaS, VMs)

ProductionConcerns

(monitoring, scaling, etc.)

Specify Code

Development CI/CD Ops

Page 32: 开源广进 用Service Catalog构造K8S服务能力中心

对Open Service Broker API的加强

• 及时反馈连接信息• 在服务创建时即返回连接信息,方便应用调试和初始化

• 提供自定义资源申请能力• 在Plan中增加自定义选项,满足用户个性化要求

Page 33: 开源广进 用Service Catalog构造K8S服务能力中心

ServiceCatalog在某运营商省公司中的应用(1)

以Storm的编排举例,https://github.com/asiainfoLDP/storm-openshift-orchestration

oc new-instance storm-cluster --service=Strom --plan=standalone

Page 34: 开源广进 用Service Catalog构造K8S服务能力中心

ServiceCatalog在某运营商省公司中的应用(2)

WebHook

PipeLine

Git Clone

mvn

stromjar

网管storm

电商storm

业支storm

开发storm

测试storm

生产storm

Page 35: 开源广进 用Service Catalog构造K8S服务能力中心

ServiceBroker在某大型集团云平台项目中的应用(1)

Page 36: 开源广进 用Service Catalog构造K8S服务能力中心

ServiceBroker在某大型集团云平台项目中的应用(2)

Page 37: 开源广进 用Service Catalog构造K8S服务能力中心

谢谢