Skip to content

Commit f197cdd

Browse files
authored
Merge pull request #286792 from msftadam/patch-20
Create install-network-function-operator.md
2 parents d1311d3 + 016b301 commit f197cdd

File tree

2 files changed

+201
-0
lines changed

2 files changed

+201
-0
lines changed

articles/operator-service-manager/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@
110110
href: how-to-manage-artifacts-nexus.md
111111
- name: Push and pull artifacts for virtualized network functions (VNF) on Azure
112112
href: how-to-manage-artifacts-virtualized-network-function-cloud.md
113+
- name: Manage the network function operator extension
114+
href: manage-network-function-operator.md
113115
- name: Troubleshooting
114116
expanded: false
115117
items:
Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
---
2+
title: Manage the Azure Operator Service Manager cluster extension
3+
description: Command reference syntax and examples guiding management of the Azure Operator Service Manager network function operator extension.
4+
author: msftadam
5+
ms.author: adamdor
6+
ms.date: 09/16/2024
7+
ms.topic: how-to
8+
ms.service: azure-operator-service-manager
9+
---
10+
11+
# Manage network function operator extension
12+
This article guides user management of the Azure Operator Service Manager (AOSM) network function operator (NFO) extension. This kubernetes cluster extension is used as part of the AOSM service offering and used to manage container based workloads, hosted by the Azure Operator Nexus platform.
13+
14+
## Overview
15+
These commands are executed after making the NAKS cluster ready for the add-on extension and presume prior installation of the Azure CLI and authentication into the target subscription.
16+
17+
## Create network function extension
18+
The Azure CLI command 'az k8s-extension create' is executed to install the NFO extension.
19+
20+
### Command
21+
```bash
22+
az k8s-extension create --cluster-name
23+
--cluster-type {connectedClusters}
24+
--extension-type {Microsoft.Azure.HybridNetwork}
25+
--name
26+
--resource-group
27+
--scope {cluster}
28+
--release-namespace {azurehybridnetwork}
29+
--release-train {preview, stable}
30+
--config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator
31+
[--auto-upgrade {false, true}]
32+
[--config global.networkfunctionextension.enableClusterRegistry={false, true}]
33+
[--config global.networkfunctionextension.enableLocalRegistry={false, true}]
34+
[--config global.networkfunctionextension.enableEarlyLoading={false,true}]
35+
[--config global.networkfunctionextension.clusterRegistry.highAvailability.enabled={true, false}]
36+
[--config global.networkfunctionextension.clusterRegistry.autoScaling.enabled={true, false}]
37+
[--config global.networkfunctionextension.webhook.highAvailability.enabled={true, false}]
38+
[--config global.networkfunctionextension.webhook.autoScaling.enabled={true, false}]
39+
[--config global.networkfunctionextension.clusterRegistry.storageClassName=]
40+
[--config global.networkfunctionextension.clusterRegistry.storageSize=]
41+
[--config global.networkfunctionextension.webhook.pod.mutation.matchConditionExpression=]
42+
[--version]
43+
```
44+
45+
### Required Parameters
46+
`--cluster-name -c`
47+
* Name of the Kubernetes cluster.
48+
49+
`--cluster-type -t`
50+
* Specify Arc clusters or Azure kubernetes service (AKS) managed clusters or Arc appliances or provisionedClusters.
51+
* Accepted values: connectedClusters.
52+
53+
`--extension-type`
54+
* Name of the extension type.
55+
* Accepted values: Microsoft.Azure.HybridNetwork.
56+
57+
`--name -n`
58+
* Name of the extension instance.
59+
60+
`--resource-group -g`
61+
* Name of resource group. You can configure the default group using 'az configure --defaults group=groupname'.
62+
63+
`--config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator`
64+
* This configuration must be provided.
65+
66+
### Optional Parameters
67+
`--auto-upgrade`
68+
* Automatically upgrade minor version of the extension instance.
69+
* Accepted values: false, true.
70+
* Default value: true.
71+
72+
`--release-train`
73+
* Specify the release train for the extension type.
74+
* Accepted values: preview, stable.
75+
* Default value: stable.
76+
77+
`--version`
78+
* Specify the explicit version to install for the extension instance if '--auto-upgrade-minor-version' isn't enabled.
79+
80+
### Optional feature specific configurations
81+
82+
#### Pod Mutating Webhook
83+
`--config global.networkfunctionextension.webhook.pod.mutation.matchConditionExpression=`
84+
* This configuration is an optional parameter. It comes into play only when container network functions (CNFs) are installed in the corresponding release namespace.
85+
* This configuration configures more granular control on top of rules and namespaceSelectors.
86+
* Default value:
87+
```bash
88+
"((object.metadata.namespace != \"kube-system\") || (object.metadata.namespace == \"kube-system\" && has(object.metadata.labels) && (has(object.metadata.labels.app) && (object.metadata.labels.app == \"commissioning\") || (has(object.metadata.labels.name) && object.metadata.labels.name == \"cert-exporter\") || (has(object.metadata.labels.app) && object.metadata.labels.app == \"descheduler\"))))"
89+
```
90+
The referenced matchCondition implies that the pods getting accepted in kube-system namespace are mutated only if they have at least one of the following labels: app == "commissioning", app == "descheduler", or name == "cert-exporter." Otherwise, they aren't mutated and continue to be pulled from the original source as per the helm chart of CNF/Component/Application.
91+
* Accepted value: Any valid CEL expression.
92+
* This parameter can be set or updated during either network function (NF) extension installation or update.
93+
* This condition comes into play only when the CNF/Component/Application are getting installed into the namespace as per the rules and namespaceSelectors. If there are more pods getting spin up in that namespace, this condition is applied.
94+
95+
#### Cluster registry
96+
`--config global.networkfunctionextension.enableClusterRegistry=`
97+
* This configuration provisions a registry in the cluster to locally cache artifacts.
98+
* Default values enable lazy loading mode unless global.networkfunctionextension.enableEarlyLoading=true.
99+
* Accepted values: false, true.
100+
* Default value: false.
101+
102+
`--config global.networkfunctionextension.clusterRegistry.highAvailability.enabled=`
103+
* This configuration provisions the cluster registry in high availability mode if cluster registry is enabled.
104+
* Default value is true and uses Nexus Azure kubernetes service (NAKS) nexus-shared volume on AKS recommendation is set false.
105+
* Accepted values: true, false.
106+
* Default value: true.
107+
108+
`--config global.networkfunctionextension.clusterRegistry.autoScaling.enabled=`
109+
* This configuration provisions the cluster registry pods with horizontal auto scaling.
110+
* Accepted values: true, false.
111+
* Default value: true.
112+
113+
`--config global.networkfunctionextension.webhook.highAvailability.enabled=`
114+
* This configuration provisions multiple replicas of webhook for high availability.
115+
* Accepted values: true, false.
116+
* Default value: true.
117+
118+
`--config global.networkfunctionextension.webhook.autoScaling.enabled=`
119+
* This configuration provisions the webhook pods with horizontal auto scaling.
120+
* Accepted values: true, false.
121+
* Default value: true.
122+
123+
`--config global.networkfunctionextension.enableEarlyLoading=`
124+
* This configuration enables artifacts early loading into cluster registry before helm installation or upgrade.
125+
* This configuration can only be enabled when global.networkfunctionextension.enableClusterRegistry=true.
126+
* Accepted values: false, true.
127+
* Default value: false.
128+
129+
`--config global.networkfunctionextension.clusterRegistry.storageClassName=`
130+
* This configuration must be provided when global.networkfunctionextension.enableClusterRegistry=true.
131+
* NetworkFunctionExtension provisions a PVC to local cache artifacts from this storage class.
132+
* Platform specific values
133+
* AKS: managed-csi
134+
* NAKS(Default): nexus-shared
135+
* NAKS(Non-HA): nexus-volume
136+
* Azure Stack Edge (ASE): managed-premium
137+
* Default value: nexus-shared.
138+
139+
`--config global.networkfunctionextension.clusterRegistry.storageSize=`
140+
* This configuration must be provided when global.networkfunctionextension.enableClusterRegistry=true.
141+
* This configuration configures the size we reserve for cluster registry.
142+
* This configuration uses unit as Gi and Ti for sizing.
143+
* Default value: 100Gi
144+
145+
#### Side loading
146+
147+
`--config global.networkfunctionextension.enableLocalRegistry=`
148+
* This configuration allows artifacts to be delivered to edge via hardware drive.
149+
* Accepted values: false, true.
150+
* Default value: false.
151+
152+
### Recommended NFO config for AKS
153+
154+
The default NFO config configures HA on NAKS but none of the disk drives on AKS support ReadWriteX access mode. Where HA needs to be disabled, use the following config options;
155+
156+
``` --config global.networkfunctionextension.clusterRegistry.highAvailability.enabled=false```
157+
158+
``` --config global.networkfunctionextension.webhook.highAvailability.enabled=false```
159+
160+
(optional)
161+
162+
``` --config global.networkfunctionextension.clusterRegistry.storageClassName=managed-csi```
163+
164+
## Update network function extension
165+
The Azure CLI command 'az k8s-extension update' is executed to update the NFO extension.
166+
167+
## Delete network function extension
168+
The Azure CLI command 'az k8s-extension delete' is executed to delete the NFO extension.
169+
170+
## Examples
171+
Create a network function extension with auto upgrade.
172+
```bash
173+
az k8s-extension create --resource-group myresourcegroup --cluster-name mycluster --name myextension --cluster-type connectedClusters --extension-type Microsoft.Azure.HybridNetwork --scope cluster --config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator --release-namespace azurehybridnetwork
174+
```
175+
176+
Create a network function extension with a pined version.
177+
```bash
178+
az k8s-extension create --resource-group myresourcegroup --cluster-name mycluster --name myextension --cluster-type connectedClusters --extension-type Microsoft.Azure.HybridNetwork --auto-upgrade-minor-version false --scope cluster --config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator --release-namespace azurehybridnetwork --version 1.0.2711-7
179+
```
180+
181+
Create a network function extension with cluster registry (default lazy loading mode) feature enabled on NAKS.
182+
```bash
183+
az k8s-extension create --resource-group myresourcegroup --cluster-name mycluster --name myextension --cluster-type connectedClusters --extension-type Microsoft.Azure.HybridNetwork --scope cluster --config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator --release-namespace azurehybridnetwork --config global.networkfunctionextension.enableClusterRegistry=true --config global.networkfunctionextension.clusterRegistry.storageSize=100Gi
184+
```
185+
186+
Create a network function extension with cluster registry (default lazy loading mode) feature enabled on AKS.
187+
```bash
188+
az k8s-extension create --resource-group myresourcegroup --cluster-name mycluster --name myextension --cluster-type connectedClusters --extension-type Microsoft.Azure.HybridNetwork --scope cluster --config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator --release-namespace azurehybridnetwork --config global.networkfunctionextension.enableClusterRegistry=true --config global.networkfunctionextension.clusterRegistry.highAvailability.enabled=false --config global.networkfunctionextension.clusterRegistry.storageClassName=managed-csi --config global.networkfunctionextension.clusterRegistry.storageSize=100Gi
189+
```
190+
191+
Create a network function extension with cluster registry (early loading) feature enabled.
192+
```bash
193+
az k8s-extension create --resource-group myresourcegroup --cluster-name mycluster --name myextension --cluster-type connectedClusters --extension-type Microsoft.Azure.HybridNetwork --scope cluster --config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator --release-namespace azurehybridnetwork --config global.networkfunctionextension.enableClusterRegistry=true --config global.networkfunctionextension.enableEarlyLoading=true --config global.networkfunctionextension.clusterRegistry.storageClassName=managed-csi --config global.networkfunctionextension.clusterRegistry.storageSize=100Gi
194+
```
195+
196+
Create a network function extension with side loading feature enabled.
197+
```bash
198+
az k8s-extension create --resource-group myresourcegroup --cluster-name mycluster --name myextension --cluster-type connectedClusters --extension-type Microsoft.Azure.HybridNetwork --scope cluster --config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator --release-namespace azurehybridnetwork --config global.networkfunctionextension.enableLocalRegistry=true
199+
```

0 commit comments

Comments
 (0)