| title | Quickstart |
|---|---|
| weight | 1 |
This guide walks through the process to install Upbound Universal Crossplane and install the Azure official provider-family.
To use Azure official provider-family, install Upbound Universal Crossplane into your Kubernetes cluster, install the Provider, apply a ProviderConfig, and create a managed resource in Azure via Kubernetes.
Download and install the Upbound up command-line.
curl -sL "https://cli.upbound.io" | sh
mv up /usr/local/bin/Verify the version of up with up --version
$ up --version
v0.19.1Note: official providers only support up command-line versions v0.13.0 or later.
Install Upbound Universal Crossplane with the Up command-line.
$ up uxp install
UXP 1.13.2-up.2 installedNote: Official provider-families only support crossplane version 1.12.1 or UXP version 1.12.1-up.1 or later.
Verify the UXP pods are running with kubectl get pods -n upbound-system
$ kubectl get pods -n upbound-system
NAME READY STATUS RESTARTS AGE
crossplane-77ff754998-5j9rm 1/1 Running 0 49s
crossplane-rbac-manager-79b8bdd6d8-nwmb9 1/1 Running 0 49sInstall the official provider-family into the Kubernetes cluster with a Kubernetes configuration file.
For instance, let's install the provider-azure-management
Note: The first provider installed of a family also installs an extra provider-family Provider. The provider-family provider manages the ProviderConfig for all other providers in the same family.
apiVersion: pkg.crossplane.io/v1
kind: Provider
metadata:
name: provider-azure-management
spec:
package: xpkg.upbound.io/upbound/provider-azure-management:<version>Apply this configuration with kubectl apply -f.
After installing the provider, verify the install with kubectl get providers.
NAME INSTALLED HEALTHY PACKAGE AGE
provider-azure-management True True xpkg.upbound.io/upbound/provider-azure-management:v0.36.0 101s
upbound-provider-family-azure True True xpkg.upbound.io/upbound/provider-family-azure:v0.36.0 93sIt may take up to 5 minutes to report HEALTHY.
If you are going to use your own registry please check Install Providers in an offline environment
The Azure official provider-family requires credentials to create and manage Azure resources.
Generating an authentication file requires the Azure command-line. Follow the documentation from Microsoft to Download and install the Azure command-line.
Follow the Azure documentation to find your Subscription ID from the Azure Portal.
Log in to the Azure command-line.
az loginUsing the Azure command-line and provide your Subscription ID create a service principal and authentication file.
az ad sp create-for-rbac --sdk-auth --role Owner --scopes /subscriptions/<Subscription ID> The command generates a JSON file like this:
{
"clientId": "5d73973c-1933-4621-9f6a-9642db949768",
"clientSecret": "24O8Q~db2DFJ123MBpB25hdESvV3Zy8bfeGYGcSd",
"subscriptionId": "c02e2b27-21ef-48e3-96b9-a91305e9e010",
"tenantId": "7060afec-1db7-4b6f-a44f-82c9c6d8762a",
"activeDirectoryEndpointUrl": "https://login.microsoftonline.com",
"resourceManagerEndpointUrl": "https://management.azure.com/",
"activeDirectoryGraphResourceId": "https://graph.windows.net/",
"sqlManagementEndpointUrl": "https://management.core.windows.net:8443/",
"galleryEndpointUrl": "https://gallery.azure.com/",
"managementEndpointUrl": "https://management.core.windows.net/"
}Save this output as azure-credentials.json.
Use kubectl create secret -n upbound-system to generate the Kubernetes secret object inside the Kubernetes cluster.
kubectl create secret generic azure-secret -n upbound-system --from-file=creds=./azure-credentials.json
View the secret with kubectl describe secret
$ kubectl describe secret azure-secret -n upbound-system
Name: azure-secret
Namespace: upbound-system
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
creds: 629 bytesCreate a ProviderConfig Kubernetes configuration file to attach the Azure credentials to the installed official provider-azure-management.
apiVersion: azure.upbound.io/v1beta1
metadata:
name: default
kind: ProviderConfig
spec:
credentials:
source: Secret
secretRef:
namespace: upbound-system
name: azure-secret
key: credsApply this configuration with kubectl apply -f.
Note: the Providerconfig value spec.secretRef.name must match the name of the secret in kubectl get secrets -n upbound-system and spec.secretRef.key must match the value in the Data section of the secret.
Verify the ProviderConfig with kubectl describe providerconfigs.
$ kubectl describe providerconfigs
Name: default
Namespace:
API Version: azure.upbound.io/v1beta1
Kind: ProviderConfig
# Output truncated
Spec:
Credentials:
Secret Ref:
Key: creds
Name: azure-secret
Namespace: upbound-system
Source: SecretCreate a managed resource to verify the provider-azure-management is functioning.
This example creates an Azure ManagementGroup resource.
apiVersion: management.azure.upbound.io/v1beta1
kind: ManagementGroup
metadata:
annotations:
meta.upbound.io/example-id: management/v1beta1/managementgroup
labels:
testing.upbound.io/example-name: example_parent
name: example-parent
spec:
forProvider:
displayName: ParentGroup
providerConfigRef:
name: defaultNote: the spec.providerConfigRef.name must match the ProviderConfig metadata.name value.
Apply this configuration with kubectl apply -f.
Use kubectl get managed to verify resource group creation.
$ kubectl get managed
NAME READY SYNCED EXTERNAL-NAME AGE
managementgroup.management.azure.upbound.io/example-parent True True example-parent 116sProvider created the ManagementGroup when the values READY and SYNCED are True.
Note: commands querying Azure resources may be slow to respond because of Azure API response times.
If the READY or SYNCED are blank or False use kubectl describe to understand why.
Here is an example of a failure because the spec.providerConfigRef.name value in the ManagementGroup doesn't match the ProviderConfig metadata.name.
$ kubectl describe managementgroup
Name: example-parent
Namespace:
Labels: testing.upbound.io/example-name=example_parent
Annotations: crossplane.io/external-create-succeeded: 2023-09-26T13:45:18Z
crossplane.io/external-name: example-parent
meta.upbound.io/example-id: management/v1beta1/managementgroup
upjet.crossplane.io/provider-meta:
{"e2bfb730-ecaa-11e6-8f88-34363bc7c4c0":{"create":1800000000000,"delete":1800000000000,"read":300000000000,"update":1800000000000}}
API Version: management.azure.upbound.io/v1beta1
Kind: ManagementGroup
# Output truncated
Spec:
Deletion Policy: Delete
For Provider:
Display Name: ParentGroup
Parent Management Group Id: /providers/Microsoft.Management/managementGroups/b9925bc4-8383-4c37-b9d2-fa456d1bb1c7
Init Provider:
Management Policies:
*
Provider Config Ref:
Name: dev
Status:
At Provider:
Display Name: ParentGroup
Id: /providers/Microsoft.Management/managementGroups/example-parent
Parent Management Group Id: /providers/Microsoft.Management/managementGroups/b9925bc4-8383-4c37-b9d2-fa456d1bb1c7
Conditions:
Last Transition Time: 2023-09-26T13:45:20Z
Reason: Available
Status: True
Type: Ready
Last Transition Time: 2023-09-26T13:52:07Z
Message: connect failed: cannot get terraform setup: cannot get referenced ProviderConfig: ProviderConfig.azure.upbound.io "dev" not found
Reason: ReconcileError
Status: False
Type: Synced
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CreatedExternalResource 7m3s managed/management.azure.upbound.io/v1beta1, kind=managementgroup Successfully requested creation of external resource
Warning CannotConnectToProvider 7s (x4 over 14s) managed/management.azure.upbound.io/v1beta1, kind=managementgroup cannot get terraform setup: cannot get referenced ProviderConfig: ProviderConfig.azure.upbound.io "dev" not foundThe output indicates the ManagementGroup is using ProviderConfig named default. The applied ProviderConfig is dev.
$ kubectl get providerconfig
NAME AGE
providerconfig.azure.upbound.io/dev 89sRemove the managed resource by using kubectl delete -f with the same ManagementGroup object file. It takes a up to 5 minutes for Kubernetes to delete the resource and complete the command.
Verify removal of the resource group with kubectl get managementgroup
$ kubectl get managementgroup
No resources found