Skip to content

Commit 31bf20f

Browse files
committed
added feedback from Atchut and Ramya
1 parent 88d83dc commit 31bf20f

5 files changed

+74
-43
lines changed

articles/aks/deploy-marketplace.md

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ ms.author: nickoman
66
ms.service: container-service
77
ms.topic: how-to
88
ms.date: 09/30/2022
9-
ms.custom: devx-track-azurecli, ignite-fall-2022
9+
ms.custom: devx-track-azurecli, ignite-fall-2022, references_regions
1010
---
1111

1212
# How to deploy a Container offer from Azure Marketplace (preview)
@@ -22,9 +22,23 @@ Included among these solutions are Kubernetes application-based Container offers
2222

2323
[!INCLUDE [preview features callout](./includes/preview/preview-callout.md)]
2424

25+
> [!NOTE]
26+
> This feature is currently only supported in the following regions:
27+
>
28+
> - West Central US
29+
> - West Europe
30+
> - East US.
31+
2532
## Register feature flags
2633

27-
You must have registered the `Microsoft.KubernetesConfiguration/extensions` and `Microsoft.ContainerService/managedClusters` feature flags on your subscription. The following command will register both:
34+
You must have registered the `Microsoft.KubernetesConfiguration/extensions` and `Microsoft.ContainerService/managedClusters` feature flags on your subscription. To begin, register the relevant providers using the `az provider register` command:
35+
36+
```azurecli-interactive
37+
az provider register --namespace Microsoft.KubernetesConfiguration --wait
38+
az provider register --namespace Microsoft.ContainerService --wait
39+
```
40+
41+
The following command will register both feature flags:
2842

2943
```azurecli-interactive
3044
az feature register --name extensions --namespace Microsoft.KubernetesConfiguration
@@ -38,14 +52,13 @@ az feature list -o table --query "[?contains(name, 'Microsoft.KubernetesConfigur
3852
az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/managedClusters')].{Name:name,State:properties.state}"
3953
```
4054

41-
Once ready, refresh the registration of the `Microsoft.KubernetesConfiguration` and `Microsoft.ContainerService` resource providers by using the `az provider register` command:
55+
Once ready, refresh the registration of the `Microsoft.KubernetesConfiguration` and `Microsoft.ContainerService` resource providers:
4256

4357
```azurecli-interactive
44-
az provider register --namespace Microsoft.KubernetesConfiguration
45-
az provider register --namespace Microsoft.ContainerService
58+
az provider register --namespace Microsoft.KubernetesConfiguration --wait
59+
az provider register --namespace Microsoft.ContainerService --wait
4660
```
4761

48-
4962
## Browse offers
5063

5164
- Begin by visiting the Azure portal and searching for *"Marketplace"* in the top search bar.
@@ -55,7 +68,6 @@ az provider register --namespace Microsoft.ContainerService
5568
- > [!IMPORTANT]
5669
> The *Azure Containers* category includes both Kubernetes applications and standalone container images. This walkthrough is Kubernetes application-specific. If you find the steps to deploy an offer differ in some way, you are most likely trying to deploy a container image-based offer instead of a Kubernetes-application based offer.
5770
58-
5971
- Once you've decided on an application, click on the offer.
6072

6173
:::image type="content" source="./media/deploy-marketplace/browse-marketplace-inline.png" alt-text="Screenshot of the Azure portal Marketplace offer page. The product type filter, set to Azure Containers, is highlighted and several offers are shown." lightbox="./media/deploy-marketplace/browse-marketplace-full.png":::
@@ -94,14 +106,6 @@ Purchasing an offer from the Azure Marketplace creates a new instance of the ext
94106
az k8s-extension show --name <extension-name> --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type managedClusters
95107
```
96108

97-
### Updating an offer
98-
99-
An offer can be updated by using the REST API or Azure CLI. For example:
100-
c
101-
```azurecli-interactive
102-
az k8s-extension update --name <extension-name> --extension-type <extension-type> --scope <scope> --cluster-name <clusterName> --resource-group <resourceGroupName> --cluster-type managedClusters
103-
```
104-
105109
### Removing an offer
106110

107111
A purchased Azure Container offer plan can be deleted by deleting the extension instance on the cluster. For example:
@@ -112,7 +116,7 @@ az k8s-extension delete --name <extension-name> --cluster-name <clusterName> --r
112116

113117
## Monitor billing and usage information
114118

115-
To monitor billing and usage information for the offer you've deployed, visit Cost Management > Cost Analysis in your cluster resource's page in the Azure portal. You can see a breakdown of cost for the plan you've selected under "Product".
119+
To monitor billing and usage information for the offer you've deployed, visit Cost Management > Cost Analysis in your cluster's resource group's page in the Azure portal. You can see a breakdown of cost for the plan you've selected under "Product".
116120

117121
:::image type="content" source="./media/deploy-marketplace/billing-inline.png" alt-text="Screenshot of the Azure portal page for the resource group. Billing information is shown broken down by offer plan." lightbox="./media/deploy-marketplace/billing-full.png":::
118122

articles/marketplace/azure-container-plan-availability.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ For a custom priced plan, Microsoft will charge the customer for their hourly us
4646

4747
- Free: Set the hourly price at 0 and your container offer is sold as equivalent to a free offer.
4848
- Per core: Your Azure Container offer is listed with pricing based on the critical CPU cores used. You provide the price for one CPU core and we’ll increment the pricing based on the size of the hardware used by your application for the critical cores you’ve tagged in your application as the ones that should generate usage.
49-
- Per every core in cluster: Your Azure Container offer is listed with pricing based on the CPU cores used. You provide the price for one CPU core and we’ll increment the pricing based on the size of the hardware used by your application.
50-
49+
- Per every core in cluster: Your Azure Container offer is listed with pricing based on the total number of CPU cores in the cluster. You provide the price for one CPU core and we’ll increment the pricing based on the size of the hardware in the cluster.
5150

5251
## Plan visibility
5352

articles/marketplace/azure-container-plan-technical-configuration-kubernetes.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ Cluster extensions enable an Azure Resource Manager driven experience for your a
2525

2626
- You cannot modify this value once the plan is published to *Preview*.
2727

28+
- The maximum allowed length is 50 characters.
29+
2830
## Selecting CNAB bundle
2931

3032
Your payload must be hosted in a private Azure Container Registry (ACR). Use this page to provide reference information for your Cloud Native Application Bundle (CNAB) bundle inside your Azure Container Registry. After you submit the offer for publishing, your bundle is copied to Azure Marketplace in a specific public container registry. All requests from Azure users to use your offer are served from the Azure Marketplace public container registry, not your private container registry.

articles/marketplace/azure-container-technical-assets-kubernetes.md

Lines changed: 49 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,30 @@ In addition to your solution domain, your engineering team should have knowledge
2323

2424
- Basic understanding of [Azure Services](https://azure.microsoft.com/services/)
2525
- How to [design and architect Azure applications](https://azure.microsoft.com/solutions/architecture/)
26-
- Working knowledge of [Azure Virtual Machines](https://azure.microsoft.com/services/virtual-machines/), [Azure Storage](https://azure.microsoft.com/services/?filter=storage), and [Azure Networking](https://azure.microsoft.com/services/?filter=networking)
2726
- Working knowledge of [Azure Resource Manager](https://azure.microsoft.com/features/resource-manager/)
28-
- Working Knowledge of [JSON](https://www.json.org/).
29-
- Working Knowledge of [Helm](https://www.helm.sh)
27+
- Working knowledge of [JSON](https://www.json.org/)
28+
- Working knowledge of [Helm](https://www.helm.sh)
29+
- Working knowledge of [createUiDefinition][createuidefinition]
3030

3131
## Prerequisites
3232

3333
- Your application must be Helm chart-based.
3434

35+
- All the image references and digest details must be included in the chart. No additional charts or images can be downloaded at runtime.
36+
3537
- You must have an active publishing tenant or access to a publishing tenant and Partner Center account.
3638

37-
- You must have created an Azure Container Registry (ACR) to which you'll upload the CNAB, and give permission to Microsoft’s first party app ID to access your ACR. For more information, see [create an Azure Container Registry][create-acr].
39+
- You must have created an Azure Container Registry (ACR) to which you'll upload the Cloud Native Application Bundle (CNAB), and give permission to Microsoft’s first party app ID to access your ACR. For more information, see [create an Azure Container Registry][create-acr].
3840

3941
- Install the latest version of the Azure CLI.
4042

43+
- The application must be deployable to Linux environment.
44+
45+
- If running the CNAB packaging tool manually, you will need docker installed on your local machine.
46+
4147
## Limitations
4248

43-
- Container Marketplace supports only AMD64 images.
49+
- Container Marketplace supports only Linux platform-based AMD64 images.
4450
- Managed AKS only.
4551
- Single containers are not supported.
4652
- Linked Azure Resource Manager templates are not supported.
@@ -63,16 +69,28 @@ Microsoft has created a first-party application responsible for handling this pr
6369
# [Linux](#tab/linux)
6470

6571
```azurecli-interactive
72+
az login
6673
az ad sp create --id 32597670-3e15-4def-8851-614ff48c1efa
6774
```
6875

69-
Make note of the service principal's ID. Next, obtain your registry's full ID:
76+
Make note of the service principal's ID to use in the following steps.
77+
78+
Next, obtain your registry's full ID:
7079

7180
```azurecli-interactive
7281
az acr show --name <registry-name> --query "id" --output tsv
7382
```
7483

75-
Finally, create a role assignment to grant the service principal the ability to pull from your registry:
84+
Your output should look similar to the following:
85+
86+
```bash
87+
...
88+
},
89+
"id": "/subscriptions/ffffffff-ff6d-ff22-77ff-ffffffffffff/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
90+
...
91+
```
92+
93+
Finally, create a role assignment to grant the service principal the ability to pull from your registry using the values you obtained earlier:
7694

7795
```azurecli-interactive
7896
az role assignment create --assignee <sp-id> --scope <registry-id> --role acrpull
@@ -81,8 +99,7 @@ az role assignment create --assignee <sp-id> --scope <registry-id> --role acrpul
8199
Finally, register the `Microsoft.PartnerCenterIngestion` resource provider on the same subscription used to create the Azure Container Registry:
82100

83101
```azurecli
84-
az login
85-
az provider register --namespace Microsoft.PartnerCenterIngestion --subscription <subscription-id>
102+
az provider register --namespace Microsoft.PartnerCenterIngestion --subscription <subscription-id> --wait
86103
```
87104

88105
Monitor the registration and confirm it has completed before proceeding:
@@ -94,21 +111,33 @@ az provider show -n Microsoft.PartnerCenterIngestion --subscription <subscriptio
94111
# [Windows](#tab/windows)
95112

96113
```powershell-interactive
114+
Connect-AzAccount
97115
New-AzADServicePrincipal -ApplicationId 32597670-3e15-4def-8851-614ff48c1efa
98116
```
99117

100118
Obtain the service principal's ID:
101119

102120
```powershell-interactive
103-
Get-AzADServicePrincipal -SearchString Container
121+
Get-AzADServicePrincipal -SearchString "Container Marketplace Package App"
104122
```
105123

106-
Make note of the service principal's ID. Next, obtain your registry's full ID:
124+
Make note of the service principal's ID to use in the following steps.
125+
126+
Next, obtain your registry's full ID:
107127

108128
```powershell-interactive
109129
Get-AzContainerRegistry -ResourceGroupName <resource-group> -Name <registry-name>
110130
```
111131

132+
Your output should look similar to the following:
133+
134+
```bash
135+
...
136+
},
137+
"id": "/subscriptions/ffffffff-ff6d-ff22-77ff-ffffffffffff/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myregistry",
138+
...
139+
```
140+
112141
Next, create a role assignment to grant the service principal the ability to pull from your registry:
113142

114143
```powershell-interactive
@@ -139,7 +168,7 @@ Each CNAB will be composed of the following artifacts:
139168

140169
- CreateUiDefinition
141170

142-
- ARM Template (optional)
171+
- ARM Template
143172

144173
- Manifest file
145174

@@ -178,23 +207,17 @@ A createUiDefinition is a JSON file that defines the user interface elements for
178207

179208
After creating the createUiDefinition.json file for your application, you need to test the user experience. To simplify testing, use a [sandbox environment][sandbox-environment] that loads your file in the portal. The sandbox presents your user interface in the current, full-screen portal experience. The sandbox is the recommended way to preview the user interface.
180209

181-
### Create the Azure Resource Manager (ARM) template (optional)
210+
### Create the Azure Resource Manager (ARM) template
182211

183212
An [ARM template][arm-template-overview] defines the Azure resources to deploy. You will be deploying a cluster extension resource for the Azure Marketplace application. Optionally, you can choose to deploy an AKS cluster.
184213

185-
If the ARM template does not exist in the CNAB bundle, a default ARM template will be created that deploys the cluster extension on an existing AKS cluster with the following expected parameters:
186-
187-
- `clusterResourceName`
188-
189-
- `extensionResourceName`
190-
191-
If you do include an ARM template, we currently only allow the following resource types:
214+
We currently only allow the following resource types:
192215

193216
- `Microsoft.ContainerService/managedClusters`
194217

195218
- `Microsoft.KubernetesConfiguration/extensions`
196219

197-
For example, see this [sample ARM template][arm-template-sample]designed to take results from the sample UI definition linked above and pass parameters into your application.
220+
For example, see this [sample ARM template][arm-template-sample] designed to take results from the sample UI definition linked above and pass parameters into your application.
198221

199222
### Create the manifest file
200223

@@ -213,15 +236,17 @@ The fields used in the manifest are as follows:
213236
|uiDefinition|String|Local path where a JSON file that describes an Azure portal Create experience can be found|
214237
|registryServer|String|The ACR where the final CNAB bundle should be pushed|
215238
|extensionRegistrationParameters|Collection|Specification for the extension registration parameters. Include at least `defaultScope` and `billingIdentifier` as parameters.|
216-
|defaultScope|String|The default scope for your extension installation. Accepted values are `cluster` or `namespace`.|
239+
|defaultScope|String|The default scope for your extension installation. Accepted values are `cluster` or `namespace`. If `cluster` scope is set, then only one extension instance is allowed per cluster. If `namespace` scope is selected, then only one instance is allowed per namespace. As a Kubernetes cluster can have multiple namespaces, multiple instances of extension can exist.|
217240
|namespace|String|(Optional) Specify the namespace the extension will install into. This property is required when `defaultScope` is set to `cluster`. For namespace naming restrictions, see [Namespaces and DNS][namespaces-and-dns].|
218241

219-
For an sample configured for the voting app, see the following [manifest file example][manifest-sample].
242+
For a sample configured for the voting app, see the following [manifest file example][manifest-sample].
220243

221244
### Structure your application
222245

223246
Place the createUiDefinition, ARM template, and manifest file beside your application's Helm chart.
224247

248+
For an example of a properly structured directory, see [the sample repository][kubernetes-offer-sample-structure].
249+
225250
## Use the container packaging tool
226251

227252
Once you've added all the required artifacts, run the packaging tool `container-package-app`.
@@ -296,6 +321,7 @@ For an example of how to integrate `container-package-app` into an Azure Pipelin
296321
[namespaces-and-dns]: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/#namespaces-and-dns
297322
[create-acr]: ../container-registry/container-registry-get-started-azure-cli.md
298323
[kubernetes-offer-samples]: https://github.com/Azure-Samples/kubernetes-offer-samples
324+
[kubernetes-offer-sample-structure]: https://github.com/Azure-Samples/kubernetes-offer-samples/tree/main/samples
299325
[values-sample]: https://github.com/Azure-Samples/kubernetes-offer-samples/blob/main/samples/azure-vote/values.yaml
300326
[deployment-sample]: https://github.com/Azure-Samples/kubernetes-offer-samples/blob/main/samples/azure-vote/templates/deployments.yaml
301327
[ui-sample]: https://github.com/Azure-Samples/kubernetes-offer-samples/blob/main/samples/createUIDefinition.json

articles/marketplace/marketplace-containers.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ If you're publishing Kubernetes apps, these are the available licensing options
4242
| Free | List your offer to customers for free. |
4343
| BYOL | The Bring Your Own Licensing option lets your customers bring existing software licenses to Azure.\* |
4444
| Per core | List your Azure Container offer with pricing based on the critical CPU cores used. You provide the price for one CPU core and we’ll increment the pricing based on the size of the hardware used by your application for the critical cores you’ve tagged in your application as the ones that should generate usage. |
45-
| Per every core in cluster | List your Azure Container offer with pricing based on the CPU cores used. You provide the price for one CPU core and we’ll increment the pricing based on the size of the hardware used by your application. |
45+
| Per every core in cluster | List your Azure Container offer with pricing based on the total number of CPU cores in the cluster. You provide the price for one CPU core and we’ll increment the pricing based on the size of the hardware in the cluster.|
4646

4747
\* As the publisher, you support all aspects of the software license transaction, including (but not limited to) order, fulfillment, metering, billing, invoicing, payment, and collection.
4848

@@ -126,7 +126,7 @@ For a Kubernetes application-based offer, the following requirements apply:
126126
| Requirement | Details |
127127
|:--- |:--- |
128128
| Billing and metering | Support one of the PerCore, PerEveryCoreInCluster, or BYOL billing models. |
129-
| Artifacts packaged as a Cloud Native Application Bundle (CNAB) | The Helm chart, manifest, createUiDefinition.json, and optional Azure Resource Manager template must be packaged as a CNAB. For more information, see [prepare technical assets][azure-kubernetes-technical-assets]. |
129+
| Artifacts packaged as a Cloud Native Application Bundle (CNAB) | The Helm chart, manifest, createUiDefinition.json, and Azure Resource Manager template must be packaged as a CNAB. For more information, see [prepare technical assets][azure-kubernetes-technical-assets]. |
130130
| Hosting in an Azure Container Registry repository | The CNAB must be hosted in an Azure Container Registry repository. For more information about working with Azure Container Registry, see [Quickstart: Create a private container registry by using the Azure portal](../container-registry/container-registry-get-started-portal.md).<br><br> |
131131

132132
## Next steps

0 commit comments

Comments
 (0)