4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能。阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如MySQL、MariaDB、Spark、RabbitMQ等的完美支持,同时提供了管理阿里云RDS服务的RDS broker功能。通过控制台,用户可以浏览到各种服务的broker,通过简单地界面操作,就可以完成创建和销毁不同规格的服务实例,将目标服务实例与应用绑定,并以安全的方式将服务实例的访问信息和秘钥注入到应用容器中,大大降低了云服务的使用的复杂度,提高了管理效率。

下面以RDS broker为例来进行说明,以帮助大家快速上手。

安装service catalog

首先,进入容器服务,创建一个Kubernetes集群,然后在控制台就可以看到服务目录标签

点击服务目录,点击左上角的“集群”,可以选择不同的集群。如果选择的集群还未安装过service catalog,点击“请点击安装”,即可以进行安装。

安装完成后就可以看到目前支持的各个service broker的标签:

安装service broker

点击“rds-broker”,进入rds-broker的详情页面,如下所示。详情页面有两个标签页:“说明”和“参数”。“说明”标签页说明了broker的具体使用方法;“参数”标签页是部署该broker的各种参数,可以根据需要进行修改。

broker的部署有两种方式:

1 通过控制台部署 点击右侧的“创建”按钮即可以进行部署,service broker会以指定的名字部署到指定的namespace中,以rds broker为例,会以“aliacs-rds-broker” 名称部署到名为“catalog”的namespace中。service catalog也安装在“catalog” namespace中;

2 使用命令行部署,这种部署方式,需要登录到集群的master节点上,使用kubectl的命令进行部署,“说明”标签页中有具体的操作步骤。这种方式可以灵活的指定名称和namespace。

下面使用命令行的方式进行部署。

首先登录集群的master节点(具体方法是:点击“集群”标签,选择集群,然后点击“管理”按钮,进入集群的“基本信息”页。查看右侧页面中的“Master 节点 SSH 连接地址”,通过ssh登录到集群的master节点)。

如果使用rds broker,需要给Kubernetes集群授予rds的访问权限。

授予的步骤可以参考“说明”标签页的“Prerequisites”中说明方法:

首先点击“集群”标签,选择集群,点击“管理”->选择“集群资源”中的“资源编排ROS”,点击ROS的链接,跳转到“ROS”控制台->在“ROS”控制台左侧点击“资源”标签,右侧下拉到最后面,选择“KubernetesWorkerRole”资源,然后点击链接,跳转至“访问控制”控制台->在“访问控制”控制台左侧,点击“角色授权策略”按钮,然后在右侧页面中点击“查看权限”按钮,在跳转的页面,点击“授权策略详情”按钮,进入“策略详情”页,在“策略详情页”中点击“修改授权策略”按钮。在弹出的对话框中,参考里面的格式增加如下内容,点击“修改策略”按钮,完成授权。

 {"Action": ["rds:*"],"Resource": ["*"],"Effect": "Allow"},复制代码

使用如下命令安装,“--name”和“--namespace”可以按照,本例中为“rds-broker”和“rds-broker-ns”。

$ helm install --name rds-broker --namespace rds-broker-ns incubator/rds-broker复制代码

删除broker可以使用如下命令:

$ helm delete --purge rds-broker复制代码

注册broker

安装完成之后,首先需要通过kubectl命令注册broker。

建立一个名为rds-broker.yaml的文件,内容如下。其中“name”项可以根据需要进行修改,“url”项为service broker的url地址,格式为:broker的service名称.broker的namespace名称.cluster.local。

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ClusterServiceBroker
metadata:name: rds-broker
spec:url: http://rds-broker-rds-broker.rds-broker-ns.svc.cluster.local复制代码

broker的service名称可以通过:kubectl get svc -n rds-broker-ns查询到。

注册命令如下:

$ kubectl create -f rds-broker.yaml复制代码

注册后可以查询到clusterservicebroker、clusterserviceclass、clusterserviceplan三种资源。

$ kubectl get clusterservicebroker
NAME             AGE
rds-broker   14s
$ kubectl get clusterserviceclass
NAME                                   AGE
997b8372-8dac-40ac-ae65-758b4a50111   28s
$ kubectl describe clusterserviceclass 997b8372-8dac-40ac-ae65-758b4a50111
...External Name:       rds-servicePlan Updatable:      true
...
$ kubectl get clusterserviceplan
NAME                                   AGE
427559f1-bf2a-45d3-8844-32374a3e1111   39s
edc2badc-d93b-4d9c-9d8e-da2f1c8c1111   39s
edc2badc-d93b-4d9c-9d8e-da2f1c8c1112   39s
$ kubectl describe clusterserviceplan
...External Metadata:Class:                rds.mysql.s2.largeCpu:                  2Engine:               MySQLEngine _ Version:     5.6High _ Availability:  falseMemory:               4Storage:              20Type:                 Vpc ID:               Vswitch ID:           External Name:          mysql-n2-medium-1
...复制代码

其中Clusterserviceclass和Clusterserviceplan的“External Name”需要在创建rds instance是指定。不同的Clusterserviceplan可以创建不同的rds instance,可以根据需要进行选择。

创建instance

建立一个名为rds-instance.yaml的文件,内容如下。

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceInstance
metadata:
  name: rds-instance
  namespace: rds-broker-ns
spec:
  clusterServiceClassExternalName: alibaba-cloud-rds-mysqldb
  clusterServicePlanExternalName: self-define
  parameters:
    Type: VPC
    Class: rds.mysql.s2.large复制代码

中“name”、“namespace”、“clusterServiceClassExternalName”和“clusterServicePlanExternalName”可以根据需要进行指定。本例中因为选择的是“self-define”的clusterserviceplan,需要在“parameters”中指定rds的数据库类型(可以在rds控制台的创建页面的“数据库类型”中选择,目前仅支持mysql)、Class(同样在rds控制台的创建页面中的“规格”中来选择,请参考help.aliyun.com/document_de…)和Storage(单位是G,范围为20~1000,步长是5)。

创建isntance的命令如下:

$ kubectl create -f rds-instance.yaml复制代码

创建的过程大约需要15分钟左右,创建完成后,可以再阿里云的rds控制台中查看到正在创建的rds实例,也可以通过kubectl get serviceinstance -n rds-broker-ns的命令来查看。kubectl describe serviceinstance -n rds-broker-ns rds-instance(instance的名称) 可以更加详细的查看instance创建的状态。

创建binding

创建binding会在kubernetes集群中创建一个包含rds实例的host、username、password、port等信息在内的secret。

下面开始创建binding。

建立一个名为rds-binding.yaml的文件,内容如下:

apiVersion: servicecatalog.k8s.io/v1beta1
kind: ServiceBinding
metadata:
  name: rds-binding
  namespace: rds-broker-ns
spec:
  instanceRef:
    name: rds-instance
  secretName: rds-instance-credentials
  parameters:
    Username: username
    Password: password复制代码

使用如下命令创建servicebinding,该servicebinding会在kubernetes集群中创建一个名为“rds-instance-credentials”的secret。其中“parameters”中的“Username”和“Password”可以根据需要指定。

$ kubectl create -f rds-binding.yaml复制代码

Binding完成大约需要10分钟左右的时间,可以通过rds控制台中查看相关实例的账号管理来查看,也可以通过kubectl describe serviceisntance -n rds-broker-ns rds-binding(binding的名称)来查看。

使用kubectl get secret -n rds-broker-ns命令可以查看secret的情况:

$ kubectl get secret -n rds-broker-ns
NAME                            TYPE                                  DATA      AGE
default-token-d9nx6             kubernetes.io/service-account-token   3         1h
rds-instance-credentials        Opaque                                6         2m
$ kubectl describe secret rds-instance-credentials -n rds-broker-ns
...
Data
====
username:  8 bytes
host:      43 bytes
password:  8 bytes
port:      4 bytes
uri:       75 bytes
...复制代码

使用kubectl get secret -n rds-broker-ns -o json可以获取更详细的信息。

其中username、host、password、port、uri是经过base64加密的访问instance的信息,解密以后即可用来访问rds的instance。

binding的使用

对binding生成的secret中的相关字段进行base64解码后可以访问rds instance了。

通过mysql client访问:

$ mysql -h host -uusername -ppassword
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 59303
Server version: 5.6.16-log Source distributionCopyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]>复制代码

通过python来访问:

#!/usr/bin/python
# -*- coding: UTF-8 -*-import MySQLdbconn = MySQLdb.connect(host='host', user='username', passwd='password')
cursor=conn.cursor()
cursor.execute("""create database if not exists db_pytest""")
conn.select_db('db_pytest')
cursor.execute("create table tb_test(id int, info varchar(100))")
cursor.close()复制代码

通过deployment来访问:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wordpress
  namespace: mariadb-broker-ns
spec:
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: "bitnami/wordpress:latest"
        env:
        - name: MARIADB_HOST
          valueFrom:
            secretKeyRef:
              name: rds-instance-credentials
              key: host
        - name: MARIADB_PORT
          valueFrom:
            secretKeyRef:
              name: rds-instance-credentials
              key: port
        - name: WORDPRESS_DATABASE_USER
          valueFrom:
            secretKeyRef:
              name: rds-instance-credentials
              key: username
        - name: WORDPRESS_DATABASE_PASSWORD
          valueFrom:
            secretKeyRef:
              name: rds-instance-credentials
              key: password
        - name: WORDPRESS_DATABASE_NAME
          value: db_pytest
        ports:
        - name: http
          containerPort: 80
        livenessProbe:
          httpGet:
            path: /
            port: http
          initialDelaySeconds: 120
          timeoutSeconds: 5
        readinessProbe:
          httpGet:
            path: /
            port: http
          initialDelaySeconds: 5
          timeoutSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: mariadb-broker-ns
spec:
  type: LoadBalancer
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: wordpress复制代码

原文链接

阿里云Kubernetes服务 - Service Broker快速入门指南相关推荐

  1. mysql servicebroker_阿里云Kubernetes服务 - Service Broker快速入门指南

    4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能.阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如M ...

  2. 阿里云Kubernetes服务上使用Tekton完成应用发布初体验

    Tekton 是一个功能强大且灵活的 Kubernetes 原生开源框架,用于创建持续集成和交付(CI/CD)系统.通过抽象底层实现细节,用户可以跨多云平台和本地系统进行构建.测试和部署. 本文是基于 ...

  3. 解锁高性能计算与区块链应用,阿里云Kubernetes服务召唤神龙

    摘要: 阿里云ECS弹性裸金属服务器(神龙)已经与其容器服务全面兼容,用户可以选择在弹性裸金属服务器上直接运行容器.管控Kubernetes/Docker容器集群,如此将会获得非常出色的性能.数倍提升 ...

  4. 15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布...

    本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署Jenkins X Platform并结合demo实践演示GitOps的操作流程. 注意: 本文中使用的jx工具.cloud-envi ...

  5. 阿里云RPA机器人流程自动化快速入门

    简介:让智能机器人代替或者辅助人类来做日常的工作,这是很多科幻片里面所熟悉的场景,现如今,这一幕即将成为现实. 一.阿里云RPA产品介绍 让智能机器人代替或者辅助人类来做日常的工作,这是很多科幻片里面 ...

  6. 阿里云oos对象存储 上手快速入门

    一·要想使用阿里云oos对象存储 首先要去阿里云官网开通这个服务 点进去开通该服务 根据自己需求填写即可 二·首次开通服务后 它会给你一个AccessKey ID和AccessKey Secret记得 ...

  7. 阿里云服务器购买教程(新手入门指南)

    阿里云服务器ECS选购指南,阿里云百科分享2023阿里云服务器新手选择流程,选购云服务器有两个入口,一个是选择活动机,只需要选择云服务器地域.系统.带宽即可:另一个是在云服务器页面,自定义选择云服务器 ...

  8. 阿里云Kubernetes服务上从零搭建GitLab+Jenkins+GitOps应用发布模型的实践全纪录

    关于GitOps的介绍,可以参考 GitOps:Kubernetes多集群环境下的高效CICD实践 1. 在 容器服务控制台 创建kubernetes集群 1.1 新建Kubernetes集群: 1. ...

  9. 与阿里云容器服务 ACK 发行版的深度对话第一弹:如何借助 sealer 实现快速构建 部署

    作者:淮右.王飞.瑜佳 记者: 阿里云原生的读者朋友们大家好,今天应广大感兴趣朋友们的强烈要求,我们邀请来了「阿里云容器服务 ACK 发行版」做客我们的栏目,为大家讲述它的身世之谜,以及它是如何和伙伴 ...

最新文章

  1. java猜数游戏有次数限制_超有趣的数学小游戏,陪孩子孩子边玩儿边学
  2. ElasticSearch入门系列(一)是什么以及安装和运行
  3. uniapp的选择收货地址
  4. linux开发工具少_从设计到开发,我必不可少的10种工具
  5. /admin/login.php,app/admin/controller/Login.php · 静水流深/wotuoquan - Gitee.com
  6. 计算机应用的功效,谈谈计算机应用技术在企业信息化的作用
  7. php7 yar扩展,宝塔面板安装yar扩展
  8. SpringBoot后端项目框架搭建
  9. mhdd4.6修复坏道图解教程
  10. h5开发安卓机型点击输入框调起输入法,输入框被键盘遮挡的解决方法
  11. 【聚类之K-Means】K-Means学习实例
  12. @EnableCaching
  13. USB-详解/sys/kernel/debug/usb/devices
  14. 数学分析里面的蕴含(⇒)到底是什么意思
  15. CentOS如何修改时区
  16. Java Apache Commons Collection3.2.1 理解Transformer 接口
  17. 导购提成怎么算_导购提成应该怎么算?
  18. 《企业级大数据平台构建:架构与实现》阅读总结
  19. 最强打包插件,支持fir,蒲公英上传, 360加固 ,自动生成二维码
  20. 当了一次人肉SMT贴片机后的感悟

热门文章

  1. 好像是第一次在公司外的论坛上公开演讲
  2. 小型软件项目开发流程探讨
  3. java 混合排序_字母、数字混合方式,按照自然语言排序,java版
  4. 16.PHP_Ajax模拟服务器登录验证
  5. 4467奇妙的方式优化暴力的01边查询
  6. POJ1698 最大流或者匈牙利
  7. 【Java 并发编程】线程简介 ( 进程与线程 | 并发概念 | 线程间通信 | Java 并发 3 特性 )
  8. 【Android FFMPEG 开发】Android 中使用 FFMPEG 对 MP3 文件进行混音操作
  9. 【Java 注解】注解简介及作用
  10. 【Flutter】Image 组件 ( Image 组件简介 | Image 构造函数 | Image.network 构造函数 | Image.asset 构造函数 )