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

简介: 4月底阿里云容器服务上线了基于Kubernetes集群的服务目录功能。阿里云的容器的服务目录遵循Open Service Broker API标准,提供了一系列的服务代理组件,实现了对主流开源服务如MySQL、MariaDB、Spark、RabbitMQ等的完美支持,同时提供了管理阿里云RDS服务的RDS broker功能。

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

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


安装service catalog


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

d68484e1e3e37f77d7c38e4c4bf6680f98806960


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

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

0c703a0fdd6769a170c3a4faab5bda445a664451


安装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。

cf77d82fccaaacd4ccc52490ca5dd77683bf6b4e

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

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


4964dad76434165be76500ce8c6081ed3defd00f


如果使用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-service
  Plan 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.large
    Cpu:                  2
    Engine:               MySQL
    Engine _ Version:     5.6
    High _ Availability:  false
    Memory:               4
    Storage:              20
    Type:                 
    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控制台的创建页面中的“规格”中来选择,请参考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的文件,内容如下:


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 distribution

Copyright (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 MySQLdb

conn = 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


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
1367 3
|
运维 Kubernetes 持续交付
ACK One GitOps:让全球化游戏服务持续交付更简单
ACK One GitOps 致力于提供开箱即用的多集群 GitOps 持续交付能力,简化游戏等服务的多集群/多地域统一部署,让您更加专注于业务开发。
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
640 10
|
Kubernetes 监控 Serverless
基于阿里云Serverless Kubernetes(ASK)的无服务器架构设计与实践
无服务器架构(Serverless Architecture)在云原生技术中备受关注,开发者只需专注于业务逻辑,无需管理服务器。阿里云Serverless Kubernetes(ASK)是基于Kubernetes的托管服务,提供极致弹性和按需付费能力。本文深入探讨如何使用ASK设计和实现无服务器架构,涵盖事件驱动、自动扩展、无状态设计、监控与日志及成本优化等方面,并通过图片处理服务案例展示具体实践,帮助构建高效可靠的无服务器应用。
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
1220 2
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
653 0
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
548 0
|
边缘计算 调度 对象存储
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
部署DeepSeek但IDC GPU不足,阿里云ACK Edge虚拟节点来帮忙
505 0

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多