Skip to content

Commit dd69c0f

Browse files
committed
Merge branch 'main' into release-azure-policy-versioning
2 parents ea26594 + cd9c8ae commit dd69c0f

File tree

162 files changed

+1164
-1346
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

162 files changed

+1164
-1346
lines changed

.openpublishing.redirection.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -640,6 +640,11 @@
640640
"redirect_url": "/azure/azure-maps/supported-languages",
641641
"redirect_document_id": true
642642
},
643+
{
644+
"source_path_from_root": "/articles/azure-maps/tutorial-geofence.md",
645+
"redirect_url": "/azure/azure-maps/",
646+
"redirect_document_id": true
647+
},
643648
{
644649
"source_path_from_root": "/articles/azure-maps/search-categories.md",
645650
"redirect_url": "/azure/azure-maps/supported-search-categories",

articles/ai-studio/concepts/rbac-ai-studio.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ In this article, you learn how to manage access (authorization) to an Azure AI S
2727

2828
In the Azure AI Studio, there are two levels of access: the hub and the project. The hub is home to the infrastructure (including virtual network setup, customer-managed keys, managed identities, and policies) and where you configure your Azure AI services. Hub access can allow you to modify the infrastructure, create new hubs, and create projects. Projects are a subset of the hub that act as workspaces that allow you to build and deploy AI systems. Within a project you can develop flows, deploy models, and manage project assets. Project access lets you develop AI end-to-end while taking advantage of the infrastructure setup on the hub.
2929

30-
:::image type="content" source="../media/concepts/azureai-hub-project-relationship.png" alt-text="Diagram of the relationship between AI Studio resources." lightbox="../media/concepts/azureai-hub-project-relationship.png":::
30+
:::image type="content" source="../media/concepts/resource-provider-connected-resources.svg" alt-text="Diagram of the relationship between AI Studio resources.":::
3131

3232
One of the key benefits of the hub and project relationship is that developers can create their own projects that inherit the hub security settings. You might also have developers who are contributors to a project, and can't create new projects.
3333

articles/aks/azure-blob-csi.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ description: Learn how to use the Container Storage Interface (CSI) driver for A
44
ms.topic: article
55
ms.custom:
66
ms.subservice: aks-storage
7-
ms.date: 11/24/2023
7+
ms.date: 06/24/2024
88
author: tamram
99
ms.author: tamram
1010

@@ -141,7 +141,7 @@ To have a storage volume persist for your workload, you can use a StatefulSet. T
141141
"kubernetes.io/os": linux
142142
containers:
143143
- name: statefulset-blob-nfs
144-
image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
144+
image: mcr.microsoft.com/oss/nginx/nginx:1.22
145145
volumeMounts:
146146
- name: persistent-storage
147147
mountPath: /mnt/blob
@@ -190,7 +190,7 @@ To have a storage volume persist for your workload, you can use a StatefulSet. T
190190
"kubernetes.io/os": linux
191191
containers:
192192
- name: statefulset-blob
193-
image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
193+
image: mcr.microsoft.com/oss/nginx/nginx:1.22
194194
volumeMounts:
195195
- name: persistent-storage
196196
mountPath: /mnt/blob

articles/aks/istio-deploy-addon.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export LOCATION=<location>
3434

3535
## Install Istio add-on
3636

37-
This section includes steps to install the Istio add-on during cluster creation or enable for an existing cluster using the Azure CLI. If you want to install the add-on using Bicep, see [install an AKS cluster with the Istio service mesh add-on using Bicep][install-aks-cluster-istio-bicep]. To learn more about the Bicep resource definition for an AKS cluster, see [Bicep managedCluster reference][bicep-aks-resource-definition].
37+
This section includes steps to install the Istio add-on during cluster creation or enable for an existing cluster using the Azure CLI. If you want to install the add-on using Bicep, see the guide for [installing an AKS cluster with the Istio service mesh add-on using Bicep][install-aks-cluster-istio-bicep]. To learn more about the Bicep resource definition for an AKS cluster, see [Bicep managedCluster reference][bicep-aks-resource-definition].
3838

3939
### Revision selection
4040

@@ -98,12 +98,13 @@ Confirm the `istiod` pod has a status of `Running`. For example:
9898

9999
```
100100
NAME READY STATUS RESTARTS AGE
101-
istiod-asm-1-18-74f7f7c46c-xfdtl 1/1 Running 0 2m
101+
istiod-asm-1-18-74f7f7c46c-xfdtl 2/2 Running 0 2m
102+
istiod-asm-1-18-74f7f7c46c-4nt2v 2/2 Running 0 2m
102103
```
103104

104105
## Enable sidecar injection
105106

106-
To automatically install sidecar to any new pods, you will need to annotate your namespaces with the revision label corresponding to the control plane revision currently installed.
107+
To automatically install sidecar to any new pods, you need to annotate your namespaces with the revision label corresponding to the control plane revision currently installed.
107108

108109
If you're unsure which revision is installed, use:
109110

@@ -204,7 +205,7 @@ reviews-v2-7d79d5bd5d-8zzqd 2/2 Running 0 2m41s
204205
reviews-v3-7dbcdcbc56-m8dph 2/2 Running 0 2m41s
205206
```
206207

207-
Confirm that all the pods have status of `Running` with 2 containers in the `READY` column. The second container (`istio-proxy`) added to each pod is the Envoy sidecar injected by Istio, and the other is the application container.
208+
Confirm that all the pods have status of `Running` with two containers in the `READY` column. The second container (`istio-proxy`) added to each pod is the Envoy sidecar injected by Istio, and the other is the application container.
208209

209210
To test this sample application against ingress, check out [next-steps](#next-steps).
210211

@@ -240,6 +241,8 @@ az group delete --name ${RESOURCE_GROUP} --yes --no-wait
240241
## Next steps
241242

242243
* [Deploy external or internal ingresses for Istio service mesh add-on][istio-deploy-ingress]
244+
* [Scale istiod and ingress gateway HPA][istio-scaling-guide]
245+
243246

244247
<!--- External Links --->
245248
[install-aks-cluster-istio-bicep]: https://github.com/Azure-Samples/aks-istio-addon-bicep
@@ -255,4 +258,4 @@ az group delete --name ${RESOURCE_GROUP} --yes --no-wait
255258
[istio-deploy-ingress]: istio-deploy-ingress.md
256259
[az-aks-mesh-get-revisions]: /cli/azure/aks/mesh#az-aks-mesh-get-revisions(aks-preview)
257260
[bicep-aks-resource-definition]: /azure/templates/microsoft.containerservice/managedclusters
258-
261+
[istio-scaling-guide]: istio-scale.md#scaling

articles/aks/istio-deploy-ingress.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,8 @@ az group delete --name ${RESOURCE_GROUP} --yes --no-wait
239239
## Next steps
240240

241241
* [Secure ingress gateway for Istio service mesh add-on][istio-secure-gateway]
242+
* [Scale ingress gateway HPA][istio-scaling-guide]
242243

243244
[istio-deploy-addon]: istio-deploy-addon.md
244245
[istio-secure-gateway]: istio-secure-gateway.md
245-
246+
[istio-scaling-guide]: istio-scale.md#scaling

articles/aks/istio-scale.md

Lines changed: 40 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
---
2-
title: Istio service mesh AKS add-on performance
3-
description: Istio service mesh AKS add-on performance
2+
title: Istio service mesh Azure Kubernetes Service add-on performance and scaling
3+
description: Istio service mesh Azure Kubernetes Service add-on performance and scaling
44
ms.topic: article
55
ms.custom:
66
ms.service: azure-kubernetes-service
77
ms.date: 03/19/2024
88
ms.author: shalierxia
99
---
1010

11-
# Istio service mesh add-on performance
12-
The Istio-based service mesh add-on is logically split into a control plane (`istiod`) and a data plane. The data plane is composed of Envoy sidecar proxies inside workload pods. Istiod manages and configures these Envoy proxies. This article presents the performance of both the control and data plane for revision asm-1-19, including resource consumption, sidecar capacity, and latency overhead. Additionally, it provides suggestions for addressing potential strain on resources during periods of heavy load.
11+
# Istio service mesh add-on performance and scaling
12+
The Istio-based service mesh add-on is logically split into a control plane (`istiod`) and a data plane. The data plane is composed of Envoy sidecar proxies inside workload pods. Istiod manages and configures these Envoy proxies. This article presents the performance of both the control and data plane for revision asm-1-19, including resource consumption, sidecar capacity, and latency overhead. Additionally, it provides suggestions for addressing potential strain on resources during periods of heavy load. This article also covers how to customize scaling for the control plane and gateways.
1313

1414
## Control plane performance
1515
[Istiod’s CPU and memory requirements][control-plane-performance] correlate with the rate of deployment and configuration changes and the number of proxies connected. The scenarios tested were:
@@ -20,7 +20,7 @@ The Istio-based service mesh add-on is logically split into a control plane (`is
2020
#### Test specifications
2121
- One `istiod` instance with default settings
2222
- Horizontal pod autoscaling disabled
23-
- Tested with two network plugins: Azure CNI Overlay and Azure CNI Overlay with Cilium [ (recommended network plugins for large scale clusters) ](/azure/aks/azure-cni-overlay?tabs=kubectl#choosing-a-network-model-to-use)
23+
- Tested with two network plugins: Azure Container Networking Interface (CNI) Overlay and Azure CNI Overlay with Cilium [ (recommended network plugins for large scale clusters) ](/azure/aks/azure-cni-overlay?tabs=kubectl#choosing-a-network-model-to-use)
2424
- Node SKU: Standard D16 v3 (16 vCPU, 64-GB memory)
2525
- Kubernetes version: 1.28.5
2626
- Istio revision: asm-1-19
@@ -70,43 +70,71 @@ The [ClusterLoader2 framework][clusterloader2] was used to determine the maximum
7070
## Data plane performance
7171
Various factors impact [sidecar performance][data-plane-performance] such as request size, number of proxy worker threads, and number of client connections. Additionally, any request flowing through the mesh traverses the client-side proxy and then the server-side proxy. Therefore, latency and resource consumption are measured to determine the data plane performance.
7272

73-
[Fortio][fortio] was used to create the load. The test was conducted with the [Istio benchmark repository][istio-benchmark] that was modified for use with the add-on.
73+
[`Fortio`][fortio] was used to create the load. The test was conducted with the [Istio benchmark repository][istio-benchmark] that was modified for use with the add-on.
7474

7575
#### Test specifications
7676
- Tested with two network plugins: Azure CNI Overlay and Azure CNI Overlay with Cilium [ (recommended network plugins for large scale clusters) ](/azure/aks/azure-cni-overlay?tabs=kubectl#choosing-a-network-model-to-use)
7777
- Node SKU: Standard D16 v5 (16 vCPU, 64-GB memory)
7878
- Kubernetes version: 1.28.5
7979
- Two proxy workers
8080
- 1-KB payload
81-
- 1000 QPS at varying client connections
82-
- `http/1.1` protocol and mutual TLS enabled
81+
- 1,000 Queries per second (QPS) at varying client connections
82+
- `http/1.1` protocol and mutual Transport Layer Security (TLS) enabled
8383
- 26 data points collected
8484

8585
#### CPU and memory
86-
The memory and CPU usage for both the client and server proxy for 16 client connections and 1000 QPS across all network plugin scenarios is roughly 0.4 vCPU and 72 MB.
86+
The memory and CPU usage for both the client and server proxy for 16 client connections and 1,000 QPS across all network plugin scenarios is roughly 0.4 vCPU and 72 MB.
8787

8888
#### Latency
8989
The sidecar Envoy proxy collects raw telemetry data after responding to a client, which doesn't directly affect the request's total processing time. However, this process delays the start of handling the next request, contributing to queue wait times and influencing average and tail latencies. Depending on the traffic pattern, the actual tail latency varies.
9090

91-
The following evaluates the impact of adding sidecar proxies to the data path, showcasing the P90 and P99 latency.
91+
The following results evaluate the impact of adding sidecar proxies to the data path, showcasing the P90 and P99 latency.
9292

9393
| Azure CNI Overlay |Azure CNI Overlay with Cilium |
9494
|:-------------------------:|:-------------------------:|
9595
[ ![Diagram that compares P99 latency for Azure CNI Overlay.](./media/aks-istio-addon/latency-box-plot/overlay-azure-p99.png) ](./media/aks-istio-addon/latency-box-plot/overlay-azure-p99.png#lightbox) | [ ![Diagram that compares P99 latency for Azure CNI Overlay with Cilium.](./media/aks-istio-addon/latency-box-plot/overlay-cilium-p99.png) ](./media/aks-istio-addon/latency-box-plot/overlay-cilium-p99.png#lightbox)
9696
[ ![Diagram that compares P90 latency for Azure CNI Overlay.](./media/aks-istio-addon/latency-box-plot/overlay-azure-p90.png) ](./media/aks-istio-addon/latency-box-plot/overlay-azure-p90.png#lightbox) | [ ![Diagram that compares P90 latency for Azure CNI Overlay with Cilium.](./media/aks-istio-addon/latency-box-plot/overlay-cilium-p90.png) ](./media/aks-istio-addon/latency-box-plot/overlay-cilium-p90.png#lightbox)
9797

98+
## Scaling
99+
100+
### Horizontal pod autoscaling
101+
102+
[Horizontal pod autoscaling (HPA)][hpa] is enabled for the `istiod` and ingress gateway pods. The default configurations for `istiod` and the gateways are:
103+
- Min Replicas: 2
104+
- Max Replicas: 5
105+
- CPU Utilization: 80%
106+
107+
> [!NOTE]
108+
> To prevent conflicts with the `PodDisruptionBudget`, the add-on does not allow setting the `minReplicas` below the initial default of `2`.
109+
110+
The following are the `istiod` and ingress gateway HPA resources:
111+
```console
112+
NAMESPACE NAME REFERENCE
113+
aks-istio-ingress aks-istio-ingressgateway-external-asm-1-19 Deployment/aks-istio-ingressgateway-external-asm-1-19
114+
115+
aks-istio-ingress aks-istio-ingressgateway-internal-asm-1-19 Deployment/aks-istio-ingressgateway-internal-asm-1-19
116+
117+
aks-istio-system istiod-asm-1-19 Deployment/istiod-asm-1-19
118+
```
119+
120+
The HPA configuration can be modified through patches and direct edits. Example:
121+
122+
```bash
123+
kubectl patch hpa aks-istio-ingressgateway-external-asm-1-19 -n aks-istio-ingress --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'
124+
```
125+
98126
## Service entry
99-
Istio's ServiceEntry custom resource definition enables adding other services into the Istio’s internal service registry. A [ServiceEntry][serviceentry] allows services already in the mesh to route or access the services specified. However, the configuration of multiple ServiceEntries with the `resolution` field set to DNS can cause a [heavy load on DNS servers][understanding-dns]. The following suggestions can help reduce the load:
127+
Istio's ServiceEntry custom resource definition enables adding other services into the Istio’s internal service registry. A [ServiceEntry][serviceentry] allows services already in the mesh to route or access the services specified. However, the configuration of multiple ServiceEntries with the `resolution` field set to DNS can cause a [heavy load on Domain Name System (DNS) servers][understanding-dns]. The following suggestions can help reduce the load:
100128

101129
- Switch to `resolution: NONE` to avoid proxy DNS lookups entirely. Suitable for most use cases.
102130
- Increase TTL (Time To Live) if you control the domains being resolved.
103131
- Limit the ServiceEntry scope with `exportTo`.
104132

105-
106133
[control-plane-performance]: https://istio.io/latest/docs/ops/deployment/performance-and-scalability/#control-plane-performance
107134
[data-plane-performance]: https://istio.io/latest/docs/ops/deployment/performance-and-scalability/#data-plane-performance
108135
[clusterloader2]: https://github.com/kubernetes/perf-tests/tree/master/clusterloader2#clusterloader
109136
[fortio]: https://fortio.org/
110137
[istio-benchmark]: https://github.com/istio/tools/tree/master/perf/benchmark#istio-performance-benchmarking
111138
[serviceentry]: https://istio.io/latest/docs/reference/config/networking/service-entry/
112139
[understanding-dns]: https://preliminary.istio.io/latest/docs/ops/configuration/traffic-management/dns/#proxy-dns-resolution
140+
[hpa]: https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/

articles/aks/monitor-aks.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,9 @@ When you [enable collection of Prometheus metrics](#integrations) for your clust
178178
179179
Level | Alerts |
180180
|:---|:---|
181-
| Pod level | KubePodCrashLooping<br>Job didn't complete in time<br>Pod container restarted in last 1 hour<br>Ready state of pods is less than 80%<br>Number of pods in failed state are greater than 0<br>KubePodNotReadyByController<br>KubeStatefulSetGenerationMismatch<br>KubeJobNotCompleted<br>KubeJobFailed<br>Average CPU usage per container is greater than 95%<br>Average Memory usage per container is greater than 95%<br>KubeletPodStartUpLatencyHigh |
182-
| Cluster level | Average PV usage is greater than 80%<br>KubeDeploymentReplicasMismatch<br>KubeStatefulSetReplicasMismatch<br>KubeHpaReplicasMismatch<br>KubeHpaMaxedOut<br>KubeCPUQuotaOvercommit<br>KubeMemoryQuotaOvercommit<br>KubeVersionMismatch<br>KubeClientErrors<br>CPUThrottlingHigh<br>KubePersistentVolumeFillingUp<br>KubePersistentVolumeInodesFillingUp<br>KubePersistentVolumeErrors |
183-
| Node level | Average node CPU utilization is greater than 80%<br>Working set memory for a node is greater than 80%<br>Number of OOM killed containers is greater than 0<br>KubeNodeUnreachable<br>KubeNodeNotReady<br>KubeNodeReadinessFlapping<br>KubeContainerWaiting<br>KubeDaemonSetNotScheduled<br>KubeDaemonSetMisScheduled<br>KubeletPlegDurationHigh<br>KubeletServerCertificateExpiration<br>KubeletClientCertificateRenewalErrors<br>KubeletServerCertificateRenewalErrors<br>KubeQuotaAlmostFull<br>KubeQuotaFullyUsed<br>KubeQuotaExceeded |
181+
| Cluster level | KubeCPUQuotaOvercommit<br>KubeMemoryQuotaOvercommit<br>KubeContainerOOMKilledCount<br>KubeClientErrors<br>KubePersistentVolumeFillingUp<br>KubePersistentVolumeInodesFillingUp<br>KubePersistentVolumeErrors<br>KubeContainerWaiting<br>KubeDaemonSetNotScheduled<br>KubeDaemonSetMisScheduled<br>KubeQuotaAlmostFull |
182+
| Node level | KubeNodeUnreachable<br>KubeNodeReadinessFlapping |
183+
| Pod level | KubePVUsageHigh<br>KubeDeploymentReplicasMismatch<br>KubeStatefulSetReplicasMismatch<br>KubeHpaReplicasMismatch<br>KubeHpaMaxedOut<br>KubePodCrashLooping<br>KubeJobStale<br>KubePodContainerRestart<br>KubePodReadyStateLow<br>KubePodFailedState<br>KubePodNotReadyByController<br>KubeStatefulSetGenerationMismatch<br>KubeJobFailed<br>KubeContainerAverageCPUHigh<br>KubeContainerAverageMemoryHigh<br>KubeletPodStartUpLatencyHigh |
184184
185185
186186
@@ -214,4 +214,4 @@ When the [Network Observability](/azure/aks/network-observability-overview) add-
214214
215215
<!-- Add additional links. You can change the wording of these and add more if useful. -->
216216
217-
- See [Monitoring AKS data reference](monitor-aks-reference.md) for a reference of the metrics, logs, and other important values created by AKS.
217+
- See [Monitoring AKS data reference](monitor-aks-reference.md) for a reference of the metrics, logs, and other important values created by AKS.

0 commit comments

Comments
 (0)