Open Service Broker™ for Azure
Open Service Broker for Azure is the open source,
Open Service Broker
compatible API server that provisions managed services in the Microsoft Azure
public cloud.
|
This software is under heavy development. Releases observe semantic versioning, but the project is in an ALPHA status and no assurances are made regarding backwards compatibility or stability. All releases prior to v1.0.0 will remain subject to the possibility of breaking changes when the MINOR version number has been incremented. |
CLOUD FOUNDRY and OPEN SERVICE BROKER are trademarks of the CloudFoundry.org Foundation in the United States and other countries.
Supported Services
Quickstart
The Minikube Quickstart walks-through using the
Open Service Broker for Azure to deploy WordPress on a local Minikube cluster.
Go from "I have an Azure account that I have never used" to "I just deployed WordPress and know what OSBA means!" �
Getting Started on Kubernetes
Installing
Helm is used to install Open Service Broker for Azure onto Kubernetes
clusters. Please refer to the
Helm chart
for details on how to complete the installation.
Examples
Provisioning
With the Kubernetes Service Catalog software and Open Service Broker for Azure both
installed on your Kubernetes cluster, try creating a ServiceInstance
resource
to see service provisioning in action.
The following will provision PostgreSQL on Azure:
$ kubectl create -f contrib/k8s/examples/postgresqldb-instance.yaml
After the ServiceInstance
resource is submitted, you can view its status:
$ kubectl get serviceinstance my-postgresqldb-instance -o yaml
The folowing is excerpted from the output and shows that asynchronous
provisioning is ongoing:
status:
asyncOpInProgress: true
conditions:
- lastTransitionTime: 2017-10-16T18:28:13Z
message: The instance is being provisioned asynchronously
reason: Provisioning
status: "False"
type: Ready
currentOperation: Provision
inProgressProperties:
externalClusterServicePlanName: basic50
parameterChecksum: bf5f464a1a09117e100c9a7bb10409e57570f281d756aab4cd00b428c7be16ac
parameters:
location: eastus
resourceGroup: demo
lastOperation: provisioning
operationStartTime: 2017-10-16T18:28:13Z
Eventually, status will reflect a success or failure state:
status:
asyncOpInProgress: false
conditions:
- lastTransitionTime: 2017-10-16T18:36:43Z
message: The instance was provisioned successfully
reason: ProvisionedSuccessfully
status: "True"
type: Ready
externalProperties:
externalClusterServicePlanName: basic50
parameterChecksum: bf5f464a1a09117e100c9a7bb10409e57570f281d756aab4cd00b428c7be16ac
parameters:
location: eastus
resourceGroup: demo
orphanMitigationInProgress: false
reconciledGeneration: 1
Binding
Upon success, bind to the instance:
$ kubectl create -f contrib/k8s/examples/postgresqldb-binding.yaml
To check the status of the binding:
$ kubectl get servicebinding my-postgresqldb-binding -o yaml
The following is excerpted from the output:
spec:
externalID: 25638746-bd86-44a1-a60e-06069734f2cd
instanceRef:
name: my-postgresqldb-instance
secretName: my-postgresqldb-secret
status:
conditions:
- lastTransitionTime: 2017-10-16T18:44:38Z
message: Injected bind result
reason: InjectedBindResult
status: "True"
type: Ready
externalProperties: {}
orphanMitigationInProgress: false
reconciledGeneration: 1
The status shows the binding was successful and the spec.secretName
field
indicates that connection details and credentials have been written into a
secret named my-postgresqldb-secret
. You can observe that this secret exists
and has been populated:
$ kubectl get secret my-postgresqldb-secret -o yaml
This secret can be used just as any other.
Unbinding
To unbind:
$ kubectl delete servicebinding my-postgresqldb-binding
Observe that the secret named my-postgresqldb-secret
is also deleted:
$ kubectl get secret my-postgresqldb-secret
Error from server (NotFound): secrets "my-postgresqldb-secret" not found
Deprovisioning
To deprovision:
$ kubectl delete serviceinstance my-postgresqldb-instance
You can observe the status to see that asynchronous deprovisioning is ongoing:
$ kubectl get serviceinstance my-postgresqldb-instance -o yaml
The following is excerpted from the output:
status:
asyncOpInProgress: true
conditions:
- lastTransitionTime: 2017-10-16T19:02:19Z
message: The instance is being deprovisioned asynchronously
reason: Deprovisioning
status: "False"
type: Ready
currentOperation: Deprovision
externalProperties:
externalClusterServicePlanName: basic50
parameterChecksum: bf5f464a1a09117e100c9a7bb10409e57570f281d756aab4cd00b428c7be16ac
parameters:
location: eastus
resourceGroup: demo
lastOperation: deprovisioning
operationStartTime: 2017-10-16T19:02:19Z
orphanMitigationInProgress: false
reconciledGeneration: 1
When the asynchronous deprovisioning procress completes, the deletion of the
resource will also be complete:
$ kubectl get serviceinstance my-postgresqldb-instance
Error from server (NotFound): serviceinstances.servicecatalog.k8s.io "my-postgresqldb-instance" not found
Getting Started on Cloud Foundry
Installation
To deploy Open Service Broker for Azure to Cloud Foundry, please refer to the
CloudFoundry installation documentation for instructions.
Usage
Provisioning
The following will create a Postgres service:
cf create-service azure-postgresqldb basic50 mypostgresdb -c '{"location": "westus2"}'
You can check the status of the service instance using the cf service
command, which will show output similar to the following:
Service instance: mypostgresdb
Service: azure-postgresqldb
Bound apps:
Tags:
Plan: basic50
Description: Azure Database for PostgreSQL Service
Documentation url:
Dashboard:
Last Operation
Status: create in progress
Message: Creating server uf666164eb31.
Started: 2017-10-17T23:30:07Z
Updated: 2017-10-17T23:30:12Z
Binding
Once the service has been successfully provisioned, you can bind to it, either using cf bind-service
or by including it in a Cloud Foundry manifest.
cf bind-service myapp mypostgresdb
Once bound, the connection details for the service (such as its endpoint and authentication credentaials) are available from the VCAP_SERVICES
environment variable within the application. You can view the environment variables for a given application using the cf env
command:
cf env myapp
Unbinding
To unbind a service from an application, use the cf unbind-service command:
cf unbind-service myapp mypostgresdb
Deprovisioning
To deprovision the service, use the cf delete-service
command.
cf delete-service mypostgresdb
Contributing
For details on how to contribute to this project, please see
contributing.md.
This project welcomes contributions and suggestions. All contributions require you to agree to a
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
the rights to use your contribution. For details, visit https://cla.microsoft.com.
When you submit a pull request, a CLA-bot will automatically determine whether you need to provide
a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions
provided by the bot. You will only need to do this once across all repos using our CLA.
This project has adopted the Microsoft Open Source Code of Conduct.
For more information see the Code of Conduct FAQ or
contact opencode@microsoft.com with any additional questions or comments.