阿里云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”資源,然后點擊鏈接,跳轉至“訪問控制”控制臺->在“訪問控制”控制臺左側,點擊“角色授權策略”按鈕,然后在右側頁面中點擊“查看權限”按鈕,在跳轉的頁面,點擊“授權策略詳情”按鈕,進入“策略詳情”頁,在“策略詳情頁”中點擊“修改授權策略”按鈕。在彈出的對話框中,參考里面的格式增加如下內容,點擊“修改策略”按鈕,完成授權。
{"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快速入门指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springboot使用rabbitMQ
- 下一篇: 基于Centos7.2搭建Cobbler