阿里云Kubernetes服务 - Service Broker快速入门指南

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”资源,然后点击链接,跳转至“访问控制”控制台->在“访问控制”控制台左侧,点击“角色授权策略”按钮,然后在右侧页面中点击“查看权限”按钮,在跳转的页面,点击“授权策略详情”按钮,进入“策略详情”页,在“策略详情页”中点击“修改授权策略”按钮。在弹出的对话框中,参考里面的格式增加如下内容,点击“修改策略”按钮,完成授权。

 
  1. {

  2. "Action": [

  3. "rds:*"

  4. ],

  5. "Resource": [

  6. "*"

  7. ],

  8. "Effect": "Allow"

  9. },

使用如下命令安装,“--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。

 
  1. apiVersion: servicecatalog.k8s.io/v1beta1

  2. kind: ClusterServiceBroker

  3. metadata:

  4. name: rds-broker

  5. spec:

  6. 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三种资源。

 
  1. $ kubectl get clusterservicebroker

  2. NAME AGE

  3. rds-broker 14s

  4. $ kubectl get clusterserviceclass

  5. NAME AGE

  6. 997b8372-8dac-40ac-ae65-758b4a50111 28s

  7. $ kubectl describe clusterserviceclass 997b8372-8dac-40ac-ae65-758b4a50111

  8. ...

  9. External Name: rds-service

  10. Plan Updatable: true

  11. ...

  12. $ kubectl get clusterserviceplan

  13. NAME AGE

  14. 427559f1-bf2a-45d3-8844-32374a3e1111 39s

  15. edc2badc-d93b-4d9c-9d8e-da2f1c8c1111 39s

  16. edc2badc-d93b-4d9c-9d8e-da2f1c8c1112 39s

  17. $ kubectl describe clusterserviceplan

  18. ...

  19. External Metadata:

  20. Class: rds.mysql.s2.large

  21. Cpu: 2

  22. Engine: MySQL

  23. Engine _ Version: 5.6

  24. High _ Availability: false

  25. Memory: 4

  26. Storage: 20

  27. Type:

  28. Vpc ID:

  29. Vswitch ID:

  30. External Name: mysql-n2-medium-1

  31. ...

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

创建instance

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

 
  1. apiVersion: servicecatalog.k8s.io/v1beta1

  2. kind: ServiceInstance

  3. metadata:

  4. name: rds-instance

  5. namespace: rds-broker-ns

  6. spec:

  7. clusterServiceClassExternalName: alibaba-cloud-rds-mysqldb

  8. clusterServicePlanExternalName: self-define

  9. parameters:

  10. Type: VPC

  11. Class: rds.mysql.s2.large

中“name”、“namespace”、“clusterServiceClassExternalName”和“clusterServicePlanExternalName”可以根据需要进行指定。本例中因为选择的是“self-define”的clusterserviceplan,需要在“parameters”中指定rds的数据库类型(可以在rds控制台的创建页面的“数据库类型”中选择,目前仅支持mysql)、Class(同样在rds控制台的创建页面中的“规格”中来选择,请参考https://help.aliyun.com/document_detail/26312.html?spm=a2c4g.11186623.6.562.Uftgml)和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的文件,内容如下:

 
  1. apiVersion: servicecatalog.k8s.io/v1beta1

  2. kind: ServiceBinding

  3. metadata:

  4. name: rds-binding

  5. namespace: rds-broker-ns

  6. spec:

  7. instanceRef:

  8. name: rds-instance

  9. secretName: rds-instance-credentials

  10. parameters:

  11. Username: username

  12. 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的情况:

 
  1. $ kubectl get secret -n rds-broker-ns

  2. NAME TYPE DATA AGE

  3. default-token-d9nx6 kubernetes.io/service-account-token 3 1h

  4. rds-instance-credentials Opaque 6 2m

  5. $ kubectl describe secret rds-instance-credentials -n rds-broker-ns

  6. ...

  7. Data

  8. ====

  9. username: 8 bytes

  10. host: 43 bytes

  11. password: 8 bytes

  12. port: 4 bytes

  13. uri: 75 bytes

  14. ...

使用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访问:

 
  1. $ mysql -h host -uusername -ppassword

  2. Welcome to the MariaDB monitor. Commands end with ; or \g.

  3. Your MySQL connection id is 59303

  4. Server version: 5.6.16-log Source distribution

  5.  
  6. Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

  7.  
  8. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

  9.  
  10. MySQL [(none)]>

通过python来访问:

 
  1. #!/usr/bin/python

  2. # -*- coding: UTF-8 -*-

  3.  
  4. import MySQLdb

  5.  
  6. conn = MySQLdb.connect(host='host', user='username', passwd='password')

  7. cursor=conn.cursor()

  8. cursor.execute("""create database if not exists db_pytest""")

  9. conn.select_db('db_pytest')

  10. cursor.execute("create table tb_test(id int, info varchar(100))")

  11. cursor.close()

通过deployment来访问:

 
  1. apiVersion: extensions/v1beta1

  2. kind: Deployment

  3. metadata:

  4. name: wordpress

  5. namespace: mariadb-broker-ns

  6. spec:

  7. template:

  8. metadata:

  9. labels:

  10. app: wordpress

  11. spec:

  12. containers:

  13. - name: wordpress

  14. image: "bitnami/wordpress:latest"

  15. env:

  16. - name: MARIADB_HOST

  17. valueFrom:

  18. secretKeyRef:

  19. name: rds-instance-credentials

  20. key: host

  21. - name: MARIADB_PORT

  22. valueFrom:

  23. secretKeyRef:

  24. name: rds-instance-credentials

  25. key: port

  26. - name: WORDPRESS_DATABASE_USER

  27. valueFrom:

  28. secretKeyRef:

  29. name: rds-instance-credentials

  30. key: username

  31. - name: WORDPRESS_DATABASE_PASSWORD

  32. valueFrom:

  33. secretKeyRef:

  34. name: rds-instance-credentials

  35. key: password

  36. - name: WORDPRESS_DATABASE_NAME

  37. value: db_pytest

  38. ports:

  39. - name: http

  40. containerPort: 80

  41. livenessProbe:

  42. httpGet:

  43. path: /

  44. port: http

  45. initialDelaySeconds: 120

  46. timeoutSeconds: 5

  47. readinessProbe:

  48. httpGet:

  49. path: /

  50. port: http

  51. initialDelaySeconds: 5

  52. timeoutSeconds: 5

  53. ---

  54. apiVersion: v1

  55. kind: Service

  56. metadata:

  57. name: wordpress

  58. namespace: mariadb-broker-ns

  59. spec:

  60. type: LoadBalancer

  61. ports:

  62. - name: http

  63. port: 80

  64. targetPort: http

  65. selector:

  66. app: wordpress

原文链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值