Upgrade CNFs from 2.2.0 to 2.2.1 using F5 Lifecycle Operator¶
Introduction¶
The following instructions provides the step-by-step procedure to upgrade CNFs from v2.2.0 to v2.2.1. Follow the steps in sequence to ensure a smooth, successful upgrade. Please review the Release notes to understand new features, fixes, and any potential impacts.
Note
You can upgrade using F5 Lifecycle Operator (FLO) only if the 2.2.0 was installed using FLO.
Prereqisites
Make sure the system is using CNFs 2.2.0 (Release-manifest version: 2.2.0-3.2226.0-0.0.385).
Upgrade to 2.2.1 using FLO¶
In a terminal window on your computer, make sure you’re in the release-manifest directory.
Upgrade the FLO to the 2.2.1 version.
$ helm upgrade f5-lifecycle-operator tar/<f5LifecycleOperatorVersion> \
--namespace default \
--values flo-values.yaml
example
$ helm upgrade f5-lifecycle-operator tar/f5-lifecycle-operator-v2.9.27-0.3.4.tgz \
--namespace default \
--values flo-values.yaml
output
Helm upgrade successful for f5-lifecycle-operator.
Release "f5-lifecycle-operator" has been upgraded. Happy Helming!
NAME: f5-lifecycle-operator
LAST DEPLOYED: Thu Feb 26 13:08:14 2026
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
Create the CNEInstance CR file (cneinstance-cr.yaml) for the 2.2.1 manifest version. For example,
apiVersion: k8s.f5.com/v1
kind: CNEInstance
metadata:
labels:
app.kubernetes.io/name: f5-lifecycle-operator
app.kubernetes.io/managed-by: kustomize
name: adi-alpha-cneinstcr
namespace: adi-alpha
spec:
wholeCluster: false
product:
type: CNF
gatewayAPI: false
manifestVersion: "2.2.1-3.2226.0-0.0.511"
telemetry:
loggingSubsystem:
enabled: true
metricSubsystem:
enabled: true
certificate:
clusterIssuer: oss-issuer
deploymentSize: "Small"
registry:
uri: "repo.f5.com"
imagePullSecrets:
- name: farimagesecret
imagePullPolicy: Always
networkAttachments:
- "auto-bond-pool-intel810-numa0"
storageClassName: robin-rwx
# Features
# CSRC Egress
pseudoCNI:
enabled: true
# BGP
dynamicRouting:
enabled: true
# AFM
firewallACL:
enabled: true
# Core dump files
coreCollection:
enabled: true
# CGNAT
cgnat:
enabled: true
# IPSD
intrusionPrevention:
enabled: true
# IP Intelligence
ipIntelligence:
enabled: true
# Intelligent Load Balancer
intelligentLB:
enabled: false
# DPU
dpu:
enabled: false
# TMM Replicas (when not whole cluster or DPU mode)
tmmReplicas: 2
# Watch Namespaces
watchNamespaces:
- "tcpapp"
- "udpapp"
# Advanced Configuration
advanced:
maintenanceMode:
enabled: false
demoMode:
enabled: false
tmm:
# add_k8s_routes: true
env:
- name: SESSIONDB_EXTERNAL_SERVICE
value: "f5-dssm-sentinel.adi-alpha.svc.cluster.local"
- name: SESSIONDB_DISCOVERY_SENTINEL
value: "true"
- name: SSL_SERVERSIDE_STORE
value: "/tls/tmm/mds/clt"
- name: SSL_TRUSTED_CA_STORE
value: "/tls/tmm/mds/clt"
- name: TMM_MAPRES_VERBOSITY
value: "debug"
- name: TMM_MAPRES_USE_VETH_NAME # Set to false to resolve the issue (BZ 1407137)
value: "FALSE"
- name: CONFIG_VIEWER_ENABLE
value: "TRUE"
- name: TMM_MAPRES_ADDL_VETHS_ON_DP
value: "TRUE"
- name: TMM_CALICO_ROUTER
value: "default"
- name: TMM_IGNORE_GATEWAYS
value: "TRUE"
- name: ROBIN_VFIO_RESOURCE_1
value: "ENS1F0_VFIOPCI"
- name: ROBIN_VFIO_RESOURCE_2
value: "ENS1F1_VFIOPCI"
- name: EXPORT_TMROUTED_LOGS
value: "true"
- name: EXPORT_BLOBD_LOGS
value: "true"
- name: ENABLE_K8S_ROUTES
value: "true"
cneController:
env:
- name: ICNI20_ENABLED
value: "true"
envDiscovery:
enabled: false
Note: While upgrading CNFs from 2.2.0 to 2.2.1 using FLO, the DSSM upgrade hook pod gets stuck in a
container-creatingstate, preventing the DSSM pods from upgrading successfully. To mitigate this issue, before the upgrade:
Create a file named
dssm-upgrade-cm.yamlcontaining the configuration for theConfigMapin the lower version prior to performing the upgrade.apiVersion: v1 kind: ConfigMap metadata: name: f5-dssm-logs-config namespace: f5-alpha data: .minlevel.yaml: |
Apply the following
dssm-upgrade-cm.yamlcm.yaml in the same namespace where the DSSM pods are deployed.$ kubectl apply -f dssm-upgrade-cm.yaml -n <dssm pods installed name space>
Apply the CNEInstance CR file (cneinstance-cr.yaml), the custom resource for CNFs.
$ kubectl apply -f <cneInstanceFilename> - n namespace
example
$ kubectl apply -f <cneinstance-cr.yaml> - n f5-alpha
Validate the deployment.
$ kubectl get -f <cneInstanceFilename> - n namespace
example
$ kubectl get -f <cneinstance-cr.yaml> - n f5-alpha
Note
Verify if all the components are available in the CNE Instance CR status.