cnSGW-C ローリング ソフトウェア アップデート

機能の概要と変更履歴

要約データ

表 1. 要約データ

該当製品または機能エリア

cnSGW-C

該当プラットフォーム

SMI

機能のデフォルト設定

N/A

関連資料

該当なし

マニュアルの変更履歴

表 2. マニュアルの変更履歴
改訂の詳細 リリース

最初の導入。

2021.02.0

はじめに

cnSGW-C は、プロトコル、サービス、セッションで構成される 3 層アーキテクチャで構成されています。各階層には、特定の機能に向けた一連のマイクロサービス(ポッド)が含まれます。これらの階層内には、Kubernetes(K8s)マスターノードとワーカーノード(運用および管理(OAM)ノードを含む)で構成される Kubernetes クラスタが存在します。

高可用性と耐障害性を確保するために、各階層に最低 2 つの K8s ワーカーノードが設定されています。ワーカーノードごとに複数のレプリカを設定できます。Kubernetes は、StatefulSets コントローラを使用してポッドをオーケストレーションします。ポッドには、耐障害性のために少なくとも 2 つのレプリカが必要です。

次の図は、12 のノードを持つ cnSGW-C K8s クラスタを示しています。

  • 3 つのマスターノード

  • 3 つの OAM ワーカーノード

  • 2 つのプロトコルワーカーノード

  • 2 つのサービスワーカーノード

  • 2 つのセッション(データストア)ワーカーノード

図 1. cnSGW-C Kubernetes クラスタ

cnSGW-C Kubernetes クラスタは、次のノードで構成されます。

  • OAM ワーカーノードは、構成管理用の Ops センターポッドと、統計および重要業績評価指標(KPI)用のメトリックポッドをホストします。

  • プロトコルワーカーノードは、サービスベースのインターフェイス(N11、N7、N10、N40)および UDP ベースのプロトコルインターフェイス(N4、S5/S8)に対応する cnSGW-C プロトコル関連ポッドをホストします。

  • サービスワーカーノードは、セッション管理処理を実行する cnSGW-C アプリケーション関連ポッドをホストします。

  • セッションワーカーノードは、サブスクライバのセッションデータを保存するデータベース関連ポッドをホストします。

cnSGW-C の更新

ローリング ソフトウェア アップデートは、古いバージョンから新しいバージョンにビルドを更新または移行するプロセス、またはアプリケーションポッドの所定の展開セットに対するパッチを更新するプロセスです。

ローリングアップデートは、ポッドインスタンスを新しいインスタンスに段階的に更新することにより、ゼロダウンタイムで実行されます。


(注)  


新しいバージョンが新しいビルドバージョンまたはパッチを使用して展開されることが予想される場合、アプリケーションは使用可能である必要があります。


アップデートの範囲

同じメジャーリリース内の古いバージョンから新しいバージョンへのローリングアップデート機能がサポートされます。

  • 前提条件:更新の際は、バージョン間で以下が変更されていないことを前提としています。

    • 新旧のバージョンでサポートされている機能。

    • 既存の CLI 動作の構成の追加、削除、または変更。

    • ピア内またはポッド全体でのインターフェイスの変更。

  • Recommendations:

    • アップデートプロセス中に構成変更をすることは推奨されません。

    • 構成の変更はすべて、アップデートプロセスの完了後に行う必要があります。

  • 失敗の処理:次の場合、ダウングレードプロセスに従って、システムを古い正常なビルドに手動でダウングレードする必要があります。

    • クラッシュなどのプロセス中の障害、およびポッド展開の失敗。

    • 新しいイベントや手順など、正常な更新後の障害。

SMI Cluster Manager を使用したローリング ソフトウェア アップデート

cnSGW-C ソフトウェアアップデートまたはインサービスアップデート手順では、K8s ローリング方法を利用してポッドイメージを更新します。この方法では、進行中のプロセスが影響を受けないように、StatefulSet のポッドが順次更新されます。最初に、StatefulSet のローリングアップデートにより、単一のポッドインスタンスが終了します。終了したポッドは、更新されたイメージを持つポッドに置き換えられます。このプロセスは、StatefulSet のすべての複製がアップデートされるまで続行されます。終了するポッドは、進行中のすべてのプロセスと競合した後、正常に終了します。他のインサービスポッドはトラフィックの受信と処理を続行し、シームレスなソフトウェアアップデートを提供します。ソフトウェア アップデート プロセスは、Ops センターの CLI を使用して制御できます。


(注)  


高可用性を実現するには、各ポッドに少なくとも 2 つのポッドが必要です。最悪のシナリオでは、ソフトウェアアップデートが進行中の間、ポッドの処理キャパシティが一時的に 50% まで低下することがあります。


次の図は、プロトコルワーカーノードでの cnSGW-C REST エンドポイントポッド(2 つのレプリカ)と、サービスワーカーノードでの cnSGW-C サービスポッド(3 つのレプリカ)の cnSGW-C ローリングアップデートを示しています。

図 2. cnSGW-C ローリングアップデート

前提条件

cnSGW-C をアップグレードするための前提条件は次のとおりです。

  • 稼働しているノード内のすべてのポッドを含むすべてのノード。

  • cnSGW-C ソフトウェアのパッチバージョン。


    (注)  


    メジャーバージョンではローリング更新はサポートされていません。



    重要


    ノードの CPU 使用率が 50% 未満の場合にのみ、ローリング更新をトリガします。


  • サイト内 HA サポート。

cnSGW-C ヘルスチェック

ヘルスチェックを実行して、すべてのサービスが実行され、ノードが準備完了状態になっていることを確認します。

ヘルスチェックを実行するには、次の設定を使用します。

  • マスターノードにログインし、次の設定を使用します。

    kubectl get pods -n smi 
    kubectl get nodes 
    kubectl get pod --all-namespaces -o wide 
    kubectl get pods -n cnsgw-wsp -o wide 
    kubectl get pods -n cee-wsp -o wide 
    kubectl get pods -n smi-vips -o wide 
    helm list 
    kubectl get pods -A | wc -l 
    

重要


続行する前に、すべてのサービスが実行されており、ノードが準備完了状態になっていることを確認してください。


展開ファイルのバックアップ

バックアップ設定、ログ、および展開ファイルを作成するには、次の構成を使用します。

  1. Ubuntu ユーザーとして SMI クラスタマネージャノードにログインします。

  2. 展開用の新しいディレクトリを作成します。

    例:

    test@smicnsgw-cm01:~$ mkdir -p "temp_$(date +'%m%d%Y_T%H%M')" && cd "$_"
  3. 新しく作成した展開ディレクトリに作業ファイルをバックアップします。

  4. cnsgw 展開ファイルを解凍します。

    例:
    test@smi1cnsgw01-cm01:~/temp_08072019_T1651$ tar -xzvf cnsgw.2020.01.0-1.SPA.tgz
    ./
    ./cnsgw_REL_KEY-CCO_RELEASE.cer
    ./cisco_x509_verify_release.py
    ./cnsgw.2020.01.0-1.tar
    ./cnsgw.2020.01.0-1.tar.signature.SPA
    ./cnsgw.2020.01.0-1.tar.SPA.README
    
  5. ダウンロードしたイメージを確認します。

    例:

    test@smi1cnsgw01-cm01:~/temp_08072019_T1651$ cat cnsgw.2020.01.0-1.tar.SPA.README

    重要


    次のステップに進む前に、SPA.README ファイルに記載されている手順に従ってビルドを確認します。


Ops センターの設定のバックアップ

Ops センターの設定をバックアップするには、次の設定を使用します。

  1. Ubuntu ユーザーとして SMI クラスタマネージャノードにログインします。

  2. 次の構成を使用して、SMI Ops センターの構成を /home/ubuntu/smiops.backup ファイルにバックアップします。

    ssh -p <port_number> admin@$(kubectl get svc -n smi | grep '.*netconf.*<port_number>' | awk '{ print $4 }') "show run | nomore" > smiops.backup_$(date +'%m%d%Y_T%H%M') 
  3. 次の構成を使用して、CEE Ops センターの構成を /home/ubuntu/ceeops.backup ファイルにバックアップします。

    ssh admin@<cee-vip> "show run | nomore" > ceeops.backup_$(date +'%m%d%Y_T%H%M') 
  4. 次の構成を使用して、cnSGW-C Ops センターの構成を /home/ubuntu/cnSGWops.backup ファイルにバックアップします。

    ssh admin@<cnSGW-vip> "show run | nomore" > cnSGWops.backup_$(date +'%m%d%Y_T%H%M') 
CEE および cnSGW-C Ops Center の設定のバックアップ

マスターノードから CEE および Ops Center の設定をバックアップするには、次の設定を使用します。

  1. マスターノードに Ubuntu ユーザーとしてログインします。

  2. 次の設定を使用して、構成ファイルをバックアップするためのディレクトリを作成します。

    mkdir backups_$(date +'%m%d%Y_T%H%M') && cd "$_" 
  3. cnSGW-C Ops Center の設定をバックアップし、次の設定を使用してバックアップファイルの行数を確認します。

    ssh -p <port_number> admin@$(kubectl get svc -n $(kubectl get namespaces | grep -oP 'cnSGW-(\d+|\w+)') | grep <port_number> | awk '{ print $3 }') "show run | nomore" > cnSGWops.backup_$(date +'%m%d%Y_T%H%M') && wc -l cnSGWops.backup_$(date +'%m%d%Y_T%H%M') 
    例:
    ubuntu@pocnSGW-mas01:~/backups_09182019_T2141$ ssh -p 2024 admin@$(kubectl get svc -n $(kubectl get namespaces | grep -oP 'cnSGW-(\d+|\w+)') | grep <port_number> | awk '{ print $3 }') "show run | nomore" > cnSGWops.backup_$(date +'%m%d%Y_T%H%M') && wc -l cnSGWops.backup_$(date +'%m%d%Y_T%H%M')
    admin@<ipv4address>'s password: cnSGW-OPS-PASSWORD
    334 cnSGWops.backup
    
  4. CEE Ops Center の設定をバックアップし、次の設定を使用してバックアップファイルの行数を確認します。

    ssh -p <port_number> admin@$(kubectl get svc -n $(kubectl get namespaces | grep -oP 'cee-(\d+|\w+)') | grep <port_number> | awk '{ print $3 }') "show run | nomore" > ceeops.backup_$(date +'%m%d%Y_T%H%M') && wc -l ceeops.backup_$(date +'%m%d%Y_T%H%M') 
    例:
    ubuntu@pocnSGW-mas01:~/backups_09182019_T2141$ ssh -p <port_number> admin@$(kubectl get svc -n $(kubectl get namespaces | grep -oP 'cee-(\d+|\w+)') | grep <port_number> | awk '{ print $3 }') "show run | nomore" > ceeops.backup_$(date +'%m%d%Y_T%H%M') && wc -l ceeops.backup_$(date +'%m%d%Y_T%H%M')
    admin@<ipv4address>'s password: CEE-OPS-PASSWORD
    233 ceeops.backup
    
  5. 次の設定を使用して、SMI Cluster Manager からの SMI Ops Center のバックアップファイルをバックアップディレクトリに移動します。

    scp $(grep cm01 /etc/hosts | awk '{ print $1 }'):/home/ubuntu/smiops.backup_$(date +'%m%d%Y_T%H%M') . 

    例:

    ubuntu@pocnSGW-mas01:~/backups_09182019_T2141$ scp $(grep cm01 /etc/hosts | awk '{ print $1 }'):/home/ubuntu/smiops.backup_$(date +'%m%d%Y_T%H%M') .
    ubuntu@<ipv4address>'s password: SMI-CM-PASSWORD
    smiops.backup                                                       100% 9346    22.3MB/s   00:00                                                                            
    
  6. バックアップファイルの行数を確認します。

    例:

    ubuntu@pocnSGW-mas01:~/backups_09182019_T2141$ wc -l *
      233 ceeops.backup
      334 cnSGWops.backup
      361 smiops.backup
      928 total
    
新しい cnSGW-C イメージのステージング

更新を開始する前に新しい cnSGW-C イメージをステージングするには、次の設定を使用します。

  1. 新しい cnSGW-C イメージをダウンロードして確認します。

  2. Ubuntu ユーザーとして SMI クラスタマネージャノードにログインします。

  3. イメージを uploads ディレクトリにコピーします。

    sudo mv <cnSGW_new_image.tar> /data/software/uploads 

    (注)  


    SMI は、uploads ディレクトリに存在する新しいイメージを使用して更新します。


  4. uploads ディレクトリから処理するために、イメージが SMI によって取得されているかどうかを確認します。

    sleep 30; ls /data/software/uploads 

    例:

    ubuntu@pocnSGW-cm01:~/temp_08072019_T1651$ sleep 30; ls /data/software/uploads
    ubuntu@pocnSGW-cm01:~/temp_08072019_T1651$
    
  5. イメージが正常に取得され、処理されたかどうかを確認します。

    例:

    auser@unknown:$ sudo du -sh /data/software/packages/*
    1.6G	/data/software/packages/cee.2019.07
    5.3G	/data/software/packages/cnSGW.2019.08-04
    16K	/data/software/packages/sample
    

    (注)  


    SMI は、ステージングを完了するためにイメージを packages ディレクトリに正常に解凍する必要があります。


ローリング ソフトウェア アップグレードのトリガー

cnSGW-C は SMI クラスタマネージャを使用して、ローリングソフトウェア更新を実行します。

SMI Cluster Manager を使用して cnSGW-C を更新するには、次の構成を使用します。


重要


開始する前に、cnSGW-C が稼働しており、現在のバージョンのソフトウェアを実行していることを確認します。


  1. SMI Cluster Manager Ops Center にログインします。

  2. URL から最新の tarall をダウンロードします。

    software-packages download url 

    注:

    • software-packages download url :HTTP/HTTPS を介してダウンロードするソフトウェアパッケージを指定します。

    SMI Cluster Manager# software-packages download <url> 
    
  3. tarall がロードされているかどうかを確認します。

    software-packages list 

    注:

    • software-packages list :使用可能なソフトウェアパッケージのリストを指定します。

    SMI Cluster Manager# software-packages list 
    [ cnSGW-2019-08-21 ] 
    [ sample ] 
    
  4. 製品チャートの最新バージョンで製品リポジトリ URL を更新します。


    (注)  


    リポジトリの URL に複数のバージョンが含まれている場合、Ops センターは自動的に最新バージョンを選択します。


    configure
      cluster cluster_name
       ops-centers app_name cnSGW_instance_name
            repository url
             exit
           exit 

    例:

    SMI Cluster Manager# config 
    SMI Cluster Manager(config)# clusters test2 
    SMI Cluster Manager(config-clusters-test2)# ops-centers cnSGW data 
    SMI Cluster Manager(config-ops-centers-cnSGW/data)# repository <url> 
    SMI Cluster Manager(config-ops-centers-cnSGW/data)# exit 
    SMI Cluster Manager(config-clusters-test2)# exit 
    
  5. 製品チャートの最新バージョンに更新するには、次のコマンドを使用して cluster sync コマンドを実行します。

    clusters cluster_name actions sync run 

    SMI Cluster Manager# clusters test2 actions sync run

注:

  • cluster :K8s クラスタを指定します。

  • cluster_name :クラスタの名前を指定します。

  • ops-centers app_name instance_name :製品 Ops センターとインスタンスを指定します。app_name は、アプリケーション名です。instance_name は、インスタンスの名前です。

  • repository url :チャートをダウンロードするためのローカルレジストリの URL を指定します。

  • actions :クラスタで実行されるアクションを指定します。

  • sync run :クラスタの同期をトリガーします。


重要


  • クラスタ同期により、cnSGW-C Ops センターが更新され、アプリケーションポッドが 1 つずつ自動的に更新されます(helm sync コマンドを介して)。

  • 特定のポッドでローリングアップグレードをトリガーすると、cnSGW-C はそのポッドへの新しいコールのルーティングを回避します。

  • cnSGW-C は、ローリングアップグレードが開始されたポッドを再起動する前に、30 秒間待機して進行中のコールを受け入れます。また、cnSGW-C は、アップグレード期間中(最大コール設定時間は 10 秒)に、進行中のすべてのコールを 30 秒以内に完全に確立します。


更新手順のモニタリング

SMI Cluster Manager Ops Center を介してステータスの更新をモニターするには、次の設定を使用します。

config 
   clusters cluster_name actions sync run debug true 
   clusters cluster_name actions sync logs 
   monitor sync-logs cluster_name 
   clusters cluster_name actions sync status 
   exit 
例:
SMI Cluster Manager# clusters test1 actions sync run
SMI Cluster Manager# clusters test1 actions sync run debug true
SMI Cluster Manager# clusters test1 actions sync logs
SMI Cluster Manager# monitor sync-logs test1
SMI Cluster Manager# clusters test1 actions sync status

注:

  • clusters cluster_name :展開するノードに関する情報を指定します。cluster_name はクラスタの名前です。

  • actions :クラスタで実行されるアクションを指定します。

  • sync run :クラスタの同期をトリガーします。

  • sync logs :現在のクラスタ同期ログを表示します。

  • sync status :クラスタ同期の現在のステータスを表示します。

  • debug true :デバッグモードを開始します。

  • monitor sync logs :クラスタ同期プロセスをモニターします。


重要


アップグレード後は、CEE Ops Center でポッドの詳細を確認できます。ポッドの詳細については、ポッド詳細の表示を参照してください。


ポッド詳細の表示

CEE Ops センターを介して現在のポッドの詳細を表示するには、CEE Ops センター CLI で次のコマンドを使用します。

cluster pods instance_name pod_name detail 

注:

  • cluster pods :クラスタ内の現在のポッドを指定します。

  • instance_name :インスタンスの名前を指定します。

  • pod_name :ポッドの名前を指定します。

  • detail:指定されたポッドの詳細を表示します。

次に、cnSGW-data インスタンスの alertmanager-0 という名前のポッドの詳細を表示する例を示します。

例:
cee# cluster pods cnSGW-data alertmanager-0 detail
details apiVersion: "v1"
kind: "Pod"
metadata:
  annotations:
    alermanager.io/scrape: "true"
    cni.projectcalico.org/podIP: "<ipv4address/subnet>"
    config-hash: "5532425ef5fd02add051cb759730047390b1bce51da862d13597dbb38dfbde86"
  creationTimestamp: "2020-02-26T06:09:13Z"
  generateName: "alertmanager-"
  labels:
    component: "alertmanager"
    controller-revision-hash: "alertmanager-67cdb95f8b"
    statefulset.kubernetes.io/pod-name: "alertmanager-0"
  name: "alertmanager-0"
  namespace: "cnSGW"
  ownerReferences:
  - apiVersion: "apps/v1"
    kind: "StatefulSet"
    blockOwnerDeletion: true
    controller: true
    name: "alertmanager"
    uid: "82a11da4-585e-11ea-bc06-0050569ca70e"
  resourceVersion: "1654031"
  selfLink: "/api/v1/namespaces/cnSGW/pods/alertmanager-0"
  uid: "82aee5d0-585e-11ea-bc06-0050569ca70e"
spec:
  containers:
  - args:
    - "/alertmanager/alertmanager"
    - "--config.file=/etc/alertmanager/alertmanager.yml"
    - "--storage.path=/alertmanager/data"
    - "--cluster.advertise-address=$(POD_IP):6783"
    env:
    - name: "POD_IP"
      valueFrom:
        fieldRef:
          apiVersion: "v1"
          fieldPath: "status.podIP"
    image: "<path_to_docker_image>"
    imagePullPolicy: "IfNotPresent"
    name: "alertmanager"
    ports:
    - containerPort: 9093
      name: "web"
      protocol: "TCP"
    resources: {}
    terminationMessagePath: "/dev/termination-log"
    terminationMessagePolicy: "File"
    volumeMounts:
    - mountPath: "/etc/alertmanager/"
      name: "alertmanager-config"
    - mountPath: "/alertmanager/data/"
      name: "alertmanager-store"
    - mountPath: "/var/run/secrets/kubernetes.io/serviceaccount"
      name: "default-token-kbjnx"
      readOnly: true
  dnsPolicy: "ClusterFirst"
  enableServiceLinks: true
  hostname: "alertmanager-0"
  nodeName: "for-smi-cdl-1b-worker94d84de255"
  priority: 0
  restartPolicy: "Always"
  schedulerName: "default-scheduler"
  securityContext:
    fsGroup: 0
    runAsUser: 0
  serviceAccount: "default"
  serviceAccountName: "default"
  subdomain: "alertmanager-service"
  terminationGracePeriodSeconds: 30
  tolerations:
  - effect: "NoExecute"
    key: "node-role.kubernetes.io/oam"
    operator: "Equal"
    value: "true"
  - effect: "NoExecute"
    key: "node.kubernetes.io/not-ready"
    operator: "Exists"
    tolerationSeconds: 300
  - effect: "NoExecute"
    key: "node.kubernetes.io/unreachable"
    operator: "Exists"
    tolerationSeconds: 300
  volumes:
  - configMap:
      defaultMode: 420
      name: "alertmanager"
    name: "alertmanager-config"
  - emptyDir: {}
    name: "alertmanager-store"
  - name: "default-token-kbjnx"
    secret:
      defaultMode: 420
      secretName: "default-token-kbjnx"
status:
  conditions:
  - lastTransitionTime: "2020-02-26T06:09:02Z"
    status: "True"
    type: "Initialized"
  - lastTransitionTime: "2020-02-26T06:09:06Z"
    status: "True"
    type: "Ready"
  - lastTransitionTime: "2020-02-26T06:09:06Z"
    status: "True"
    type: "ContainersReady"
  - lastTransitionTime: "2020-02-26T06:09:13Z"
    status: "True"
    type: "PodScheduled"
  containerStatuses:
  - containerID: "docker://821ed1a272d37e3b4c4c9c1ec69b671a3c3fe6eb4b42108edf44709b9c698ccd"
    image: "<path_to_docker_image>"
    imageID: "docker-pullable://<path_to_docker_image>"
    lastState: {}
    name: "alertmanager"
    ready: true
    restartCount: 0
    state:
      running:
        startedAt: "2020-02-26T06:09:05Z"
  hostIP: "<host_ipv4address>"
  phase: "Running"
  podIP: "<pod_ipv4address>"
  qosClass: "BestEffort"
  startTime: "2020-02-26T06:09:02Z"
cee#

非 SMI クラスタでのローリング ソフトウェア アップデート

Helm リポジトリを設定するには、次の設定を使用します。

  • cnSGW-C Ops Center にログインし、次の設定を使用します。

    config
     helm default-repository cn
     helm repository cn
     access-token smf-deployer.gen:AKCp5ekcX7DcBhuAmMZYfGLaHvH3E4Syr9TQDp1gjzcSjYrqsrGbXSYs5X2XYij3d9n9VfWQe
     url <old-build/new-build>
    exit

更新の検証

正常性チェック、現在の Helm チャート、およびサブスクライバ/ピア/セッション情報は、ローリング アップデート プロセスが成功したかどうかを理解するのに役立ちます。

更新を検証するには、次の手順を実行します。

  1. 展開されたポッドはすべて、更新の前後に実行状態である必要があります。

    kubectl get pods -n cn
  2. Helm チャートには、適切なビルドのチャートが反映される必要があります。

    現在展開されている Helm チャートを確認するには、cnSGW-C Ops Center で次のコマンドを使用します。

    show helm charts
    show running-config helm repository
  3. 次の設定を使用して、保持の検証のためにサブスクライバ、セッション、またはピア情報を確認します。

    show subscriber namespace sgw count all
    show peers all

ローリングアップグレード最適化

表 3. 機能の履歴
機能名

リリース情報

説明

プロトコル PFCP ポッドのローリングアップグレード最適化 2024.04.0

プロトコル(PFCP)ポッドの場合、再送信された要求を処理するために、コンバージド コア ゲートウェイでは、サービスポッドにセッションレベルの応答メッセージキャッシュが導入されます。この最適化は、アップグレード手順中のセッションと 1 秒あたりのコールイベント(CEPS)の損失の削減に役立ちます。

エンドポイントポッドのローリングアップグレード最適化 2024.03.0

コンバージド コア ゲートウェイは、次のポッドのローリングアップグレード最適化サポートを提供します。

  • RADIUS エンドポイントポッド

  • Diameter エンドポイントポッド

  • UDP プロキシポッド

  • GTPP エンドポイントポッド

この最適化は、既存の最適化に対する機能拡張です。

この機能では、コンバージド コア プロファイルで既存の CLI コマンド supported-features [ app-rx-retx-cache | app-tx-retx | rolling-upgrade-all | rolling-upgrade-enhancement-infra ] が使用されます。

ローリングアップグレード最適化

2024.02.0

コンバージド コア ゲートウェイは、次のサポートを提供します。

  • アップグレード中のサービスおよびプロトコルポッドでの再試行メカニズム

  • 設定ベースのローリングアップグレードの機能拡張

この最適化は、アップグレード手順中のセッションと 1 秒あたりのコールイベント(CEPS)の損失の削減に役立ちます。設定可能なローリングアップグレードの機能拡張により、変更のスムーズなロールアウトが可能になります。

この機能により、コンバージド コア プロファイルに新しい CLI コマンド supported-features [ app-rx-retx-cache | app-tx-retx | rolling-upgrade-all | rolling-upgrade-enhancement-infra ] が導入されます。

デフォルト設定:[Disabled]:設定が必要

コンバージド コア ゲートウェイ(CCG)ソフトウェアバージョン 2024.02.0 以降は、最適化の強化を備えたローリングアップグレードをサポートしています。ローリングアップグレードを使用すると、セッションと CEPS への影響を最小限に抑えて、すべてのポッドのグレースフルアップグレードを実行できます。最適化の強化により、必要に応じて、アップグレードプロセスの CLI コマンドを使用してローリングアップグレード機能を有効または無効にするオプションが提供され、運用上の柔軟性がもたらされます。

この機能は、次のアプリケーションレベルの機能拡張をサポートしています。

  • サービスポッドのアップグレード中のプロトコルポッドにおける再試行メカニズム。

  • アップグレード中のサービスポッドおよびプロトコルポッドでの一時的なセッションまたはトランザクションの処理。

  • 再起動中または非アクティブなポッドを検出するためのトポロジと IPC メカニズムの変更処理。非アクティブなポッドの場合、再試行オプションはポッドの他のインスタンスに対して試行されます。

supported-features [ app-rx-retx-cache | app-tx-retx | rolling-upgrade-all | rolling-upgrade-enhancement-infra ] CLI コマンドを使用して、ローリングアップグレードの拡張機能を設定できます。


重要


  • 既存のセッションへの影響を防ぐために、実行時にローリングアップグレード機能を有効または無効にしないことを推奨します。

  • 他のコマンドオプションはすべてデバッグ目的でのみ使用できるため、rolling-upgrade-all オプションのみを使用することを強く推奨します。


機能説明

Converged Core Gateway(CCG)ソフトウェアバージョン 2024.02.0 以降は、最適化を追加していくローリングアップグレードをサポートしています。ローリングアップグレードを使用すると、セッションと CEPS への影響を最小限に抑えて、すべてのポッドのグレースフルアップグレードを実行できます。

この機能は、次のアプリケーションレベルの拡張機能をサポートしています。

  • サービスポッドのアップグレード中のプロトコルポッドにおける再試行メカニズム。

  • アップグレード中のサービスポッドおよびプロトコルポッドでの一時的なセッションまたはトランザクションの処理。

  • 再起動中または非アクティブなポッドを検出するためのトポロジと IPC メカニズムの変更処理。非アクティブなポッドの場合、再試行オプションはポッドの他のインスタンスに対して試行されます。

supported-features [ app-rx-retx-cache | app-tx-retx | rolling-upgrade-all | rolling-upgrade-enhancement-infra ] CLI コマンドを使用して、ローリングアップグレードの拡張機能を設定できます。


重要


  • 既存のセッションへの影響を防ぐために、実行時にローリングアップグレード機能を有効または無効にしないことを推奨します。

  • 他のすべてのコマンドオプションはデバッグ専用であるため、rolling-upgrade-all オプションのみを使用することを強くお勧めします。


ローリングアップグレード最適化の仕組み

このセクションでは、さまざまなポッドのアップグレードとローリングアップグレードの手順について説明します。

ポッドのアップグレード

サービスポッド

ピアポッドは特定のポッドのアップグレードや再起動を認識するため、そのポッドとの間のトランザクションが正常に処理されるようになります。

ここでは、サービスポッドでの着信および発信メッセージの処理について説明します。

着信メッセージ(Incoming Messages)

  • アップグレード中、サービスポッドの状態は、トポロジの更新を介して他のポッドに伝達されます。セッションにアフィニティが存在しない場合、そのポッドは新しいメッセージの転送ポッドとして選択されません。

  • セッションでは、サービスポッドにコンテキストがない場合、これがキャッシュタイムアウト後のユーザーに対する最初のメッセージであり、アプリケーション停止メッセージがプロトコルポッドに伝達されます。そのプロトコルポッドが、他のサービスポッドインスタンスにメッセージをリダイレクトします。

  • サービスポッドにセッションのコンテキストがあり、セッションまたはユーザーに対する保留中の手順やトランザクションがない場合、アプリケーション停止メッセージがプロトコルポッドに伝達されます。そのプロトコルポッドが、他のサービスポッドインスタンスにメッセージをリダイレクトします。ただし、プロトコルポッドと通信する前に、セッション状態の強制同期が CDL に対して実行されます。さらに、セッションまたはユーザーのアフィニティエントリが削除されます。

発信メッセージ(Outgoing Messages)

  • セッションまたはユーザーのコールフローや手順の完了後、サービスポッドがアップグレードや再起動の通知を受信すると、セッションまたは PDU の状態と CDL との同期が実行されます。さらに、サービスまたはユーザーのアフィニティエントリが削除され、サービスポッドインスタンスに対する後続メッセージのトリガーが許可されません。

  • 進行中の既存のコールフローについては、コールを完了させるためにベストエフォートベースでトランザクションが処理されます。

プロトコルポッド

ここでは、REST エンドポイント、GTPC エンドポイント、およびプロトコル(PFCP)エンドポイントポッドでのメッセージの処理について説明します。

REST エンドポイントポッド

ここでは、REST エンドポイントポッドでの着信および発信メッセージの処理について説明します。

着信メッセージ(Incoming Messages)

  • 新しい TCP 接続の場合、入力 K8 サービスでは、アップグレードまたは再起動中に特定の REST エンドポイントポッドは選択されず、そのような要求は他のインスタンスに転送されます。

  • アップグレード通知または再起動通知を受信後、既存の接続で GOAWAY フレームが送信されます。このフレームを送信すると、新しいメッセージがピアノードの新しい接続で送信されます。

発信メッセージ(Outgoing Messages)

  • サービスポッドから発信要求メッセージを受信後、アプリケーション停止通知がサービスポッドに送り返されます。その結果、サービスポッドが、メッセージをトリガーする別の REST エンドポイントインスタンスを選択できます。

  • 既存の一時的なメッセージの発信応答では、ベストエフォート方式でトランザクションが完了します。

GTPC エンドポイントポッド

着信メッセージ(Incoming Messages)

GTPC エンドポイントポッドの再起動中時に、着信要求メッセージの処理をサポートするために、セッションレベルの応答メッセージキャッシュがサービスポッドに追加されました。サービスポッドは、シーケンス番号、送信元 IP アドレス、送信元ポート、および要求メッセージタイプに基づいて、応答メッセージバッファを保存します。

  • GTPC エンドポイントポッドの再起動が原因で回線上の応答メッセージが失われた場合、ピアで要求メッセージが再試行されます。このメッセージは、セッションレベルの応答メッセージキャッシュを使用して応答されます。

  • 応答メッセージがサービスポッドで生成されない場合でも、メッセージは再送信としてサービスで検出されて適宜処理されます。

発信メッセージ(Outgoing Messages)

GTPC エンドポイントポッドの再起動中、発信要求メッセージは次の方法で処理されます。

  • サービスポッドが、BGIPC を実行する際の要求のタイムアウト間隔と再送信回数を設定します。タイムアウト間隔と送信回数は、S5、S11、および S5E インターフェイスに対して定義されている N3 T3 に基づいています。

  • GTPC エンドポイントポッドの代わりに、サービスポッドが送信元ポートとシーケンス番号を設定します。

  • このメカニズムは、ポッドの再起動中に応答メッセージが失われた場合の発信メッセージの再送信に役立ちます。サービスポッドがシーケンス番号とポートを生成します。この場合、ピアでもメッセージが再送信として検出されるため、回線上のメッセージに不明瞭さはありません。

ノードマネージャポッド

ノードマネージャポッドの 1 つのインスタンスは、アップグレード中にコールを処理するために使用できます。準備状況プローブとタイマーも、アップグレードシナリオ用に設定されます。ポッドが非アクティブの場合、サービスポッドは他のノードマネージャのポッドインスタンスを再試行します。

CDL ポッド

CDL ポッドには、アップグレードプロセス中にサービスを継続するための複数のレプリカがあります。アップグレードおよび再起動プロセス中の障害を最小限に抑えるために、CDL エンドポイントに対して複数の接続ストリームを使用できます。これらのプロセスでエラーが発生した場合、再試行メカニズムは別の CDL エンドポイント接続に対しても実装されます。

ローリングアップグレード最適化サポートを利用したバージョンへのソフトウェアのアップグレード

ここでは、ローリングアップグレードを実行する方法と、ローリングアップグレードの拡張機能を有効にする方法について説明します。


重要


ローリングアップグレードの手順に関連する、次の重要なガイドラインを確認してください。

  • ローリングアップグレード最適化機能は、リリース 2024.02.0 以降からアップグレードする場合にのみ使用してください。

    リリース 2024.02.0 より前のバージョンからリリース 2024.02.0 以降にアップグレードする場合は、最初にシャットダウンと起動によるアップグレードを実行します。

  • アップグレード後、CLI コマンドを使用して、ローリングアップグレードの拡張機能を有効にします。この場合、その後の将来のリリースへのローリングアップグレードに、利用可能な最適化が含まれるようになります。


ローリングアップグレードに関する考慮事項

SMF の両方のラック(ラック 1 とラック 2)は快晴のシナリオに設定されており、リリース 2024.02.0 より前のバージョンです。

ローリング方法を実行するには、次の手順に従います。

  1. ラック 1 を雨天のシナリオに移行させ、ラック 2 を両方の GR インスタンスでアクティブのままにします。

  2. ラック 1 の GR インスタンスを Standby_ERROR に移行します。

  3. ラック 1 をシャットダウンします。

  4. ラック 1 をリリース 2024.02 に移行するため、sync-phase ops-center を介してクラスタ同期を実行します。

  5. ローリングアップグレードの拡張機能を有効にするには、推奨構成を適用します。

    ローリングアップグレードの推奨構成は次のとおりです。

    config 
       profile converged-core converged_core_profile_name 
       supported-features [ rolling-upgrade-all ]  
       end 
  6. ラック 1 を開始します。

  7. CDL の調整が完了するまで 30 分間待機します。

  8. GR インスタンスをプライマリに切り替えて、ラック 1 をアクティブにします。

  9. ラック 2 をシャットダウンします。

  10. 続けて、ラック 2 でステップ 4 ~ 6 を実行します。

  11. ラック 1 とラック 2 で快晴シナリオの構成を行います。

制限事項

この機能には、次の制限事項があります。

  • ローリングアップグレードの間、サービスポッドは一度に 1 つずつ再起動します。このアップグレードにより、セッションが均等に再配布されます。最初に再起動するサービスポッドのセッション数が多くなります。同様に、最後に再起動したサービスポッドのセッション数が最小になります。このようなセッションの再配布により、一部のサービスポッドのメモリ要件が一時的に急増する可能性があります。セッションがサービスポッドのローカルキャッシュから削除された後、システムは期待どおりに動作します。

  • サービスポッドでの一連の手順は、ローリングアップグレード中も継続されます。ただし、これらを正常に完了させるためのベストエフォートメカニズムが実装されています。

ローリングアップグレードでサポートされる機能の構成

ローリングアップグレードでサポートされている機能を有効にするには、次の構成例を使用します。

config 
   profile converged-core cc_profile_name 
      supported-features [ app-rx-retx-cache | app-tx-retx | rolling-upgrade-all | rolling-upgrade-enhancement-infra ] 
      end 

注:

  • profile converged-core cc_profile_name :コンバージド コア プロファイルの名前を指定します。このキーワードを使用すると、コンバージド コア プロファイル構成モードを開始できます。

  • supported-features [ app-rx-retx-cache | app-tx-retx | rolling-upgrade-all | rolling-upgrade-enhancement-infra ] :ローリングアップグレードでサポートされている機能を有効にするには、次のいずれかのオプションを指定します。

    • app-rx-retx-cache :アプリケーションでの着信メッセージの再送信キャッシュを有効にします。

    • app-tx-retx :アプリケーションでのアウトバウンドメッセージの再送信を有効にします。

    • rolling-upgrade-all rolling-upgrade-enhancement-infra app-rx-retx-cache 、および app-tx-retxrolling キーワードオプションで使用可能なすべてのローリングアップグレード機能を有効にします。デフォルトでは、ローリングアップグレード機能は無効になっています。

      rolling-upgrade-all は唯一の推奨オプションです。

    • rolling-upgrade-enhancement-infra :インフラレベルの機能を有効にします。


    重要


    • 既存のセッションへの影響を防ぐために、実行時にローリングアップグレード機能を有効または無効にしないことを推奨します。

    • 他のすべてのコマンドオプションはデバッグ専用であるため、rolling-upgrade-all オプションのみを使用することを強くお勧めします。


ローリングアップグレード最適化の確認

show running-config profile amf-services コマンドを使用して、ローリングアップグレードでサポートされる機能を確認します。

show running-config amf-services コマンドの出力例を次に示します。

show running-config profile amf-services
amf-services am1
   supported-features [ rolling-upgrade-all ]
exit

OAM サポート

バルク統計

ローリングアップグレード最適化機能では、次の統計情報がサポートされています。

IPC 再試行統計情報:

再試行の原因に関するラベル「retry_cause」の追加により、「ipc_request_total」統計情報が更新されます。

CDL 統計情報:

CDL 操作に次の統計情報が追加されます。

  • cdl_request_total

  • cdl_response_total

  • cdl_request_seconds_total

  • cdl_request_duration_histgram_total

これらの CDL 統計情報は、次のフィルタで更新されます。

  • retry:再試行メッセージを表示するために使用されます

  • method_name:CDL 強制同期更新を表示するために使用されます


(注)  


以前のリリースでは、CDL 統計情報は、フィルタ rpc_name を STREAM_SESSION_DB として、RPC 統計情報を介して表示されていました。リリース 2024.02 以降、CDL 統計情報は、前述の CDL 統計情報を使用する場合にのみ使用できます。


アプリケーション停止カウンタ:

App-infra でアクションを表示するために、「application_stop_action」統計情報が追加されました。これらのアクションの例には、セッションキャッシュの削除やアフィニティの削除があります。