ページの先頭行へ戻る
Enterprise Service Development Platform V1.2.0 運用ガイド
FUJITSU Software

12.5.1 Container Managementの更新手順

ここでは、Container Managementを更新する手順について説明します。

以下の事項が前提です。

注意

Container Managementの更新では、Kubernetes nodeサーバーを1台ずつ更新します。対象のnodeサーバー上のアプリケーション(コンテナ)への新規リクエストの振り分けを停止させ、 アプリケーションを別のKubernetes nodeサーバーに退避させます。そのため、業務無停止で更新するためには、以下の条件を満たす必要があります。

  • KubernetesクラスタにKubernetes nodeサーバーが2台以上存在すること。

  • アプリケーションが退避される際、グレースフルにシャットダウンするように設計されていること。(注1)

  • 配備するアプリケーションのコンテナの数が、常に1つ以上動作するように設計されていること。(注2)

  • Podの配備先を1つのKubernetes nodeサーバーに固定していると、更新処理で実行されるPodの退避処理でエラーとなります。予め複数のKubernetes nodeサーバーにPodが配備できるように設計してください。

  • Kubernetes nodeサーバーにリクエストを転送しているロードバランサーなどで、Kubernetes nodeサーバーへの新規のリクエストを停止しつつ、既存リクエストの終了を待機できること。

注1) 設計の詳細は、The Twelve-Factor App (IX. Disposability)を参照してください。 未設計の場合、Container Managementの更新中に業務処理が停止する場合があります。

注2) アプリケーションの実行最小数をKubernetesのPodDisruptionBudgetで制御することができます。 詳細はKubernetes公式ドキュメントのDisruptionsを参照してください。 未設計の場合、更新中に業務処理が失敗する場合があります。

注意

  • 更新後、マニュアルに記載がない方法でオープンソースの設定ファイルを編集した場合や、サポート対象外の機能については、設定を引き継げない場合があります。サポート範囲については、「概説書」を参照してください。

  • 更新、および、切り戻しの操作は多重実行できません。各操作はシーケンシャルに実行してください。

  • Container Managementの更新実行後、Kubernetes masterサーバーの/var/FJSGHD/update_k8sにバックアップが出力されます。必要に応じて別の場所へのコピーを実施してください。 /var/FJSGHD/update_k8sに出力されたバックアップファイルは削除せず、バックアップの所有者とパーミッションの設定は変更しないでください。

  • 本製品に同梱されているIngress Controllerを使用中かつ修正パッチF1013-2021-001を適用する場合、更新前にIngressリソースの定義の変更が必要です。

    リソースの定義にmetadata.annotations.kubernetes.io/ingress.class: "kong"を追加してください。指定しない場合、Ingress Controllerによる振り分けができなくなります。

    パラメータの詳細と指定例は「入門ガイド」の「アプリケーション公開・公開停止方法」を参照してください。

Kubernetes masterサーバーで、以下の手順を行うことでContainer Managementの更新ができます。

  1. 事前準備

    更新前に以下のコマンドを実行し、更新に必要なファイルを生成します。

    $ cd /var/FJSGHD/playbook
    $ ansible-playbook -i /var/FJSGHD/inventories/hosts play_create_playbook_for_update_tool.yml
  2. Container Managementの更新

    以下のコマンドを実行し、Container Managementを更新します。 コマンド実行時にオプションを指定することができます。オプションの詳細については、下記参考をご覧ください。

    $ ansible-playbook -i /var/FJSGHD/inventories/hosts play_update_container_mng.yml

    コマンドを実行すると、以下のメッセージが表示されます。誤って実行した場合や前提・業務無停止の条件を満たしていない場合は、「n」を入力し、Enterキーを押下することで更新を中断できます。更新を継続する場合は「y」を入力し、Enterキーを押下します。

    [Please confirm]
    ==============================================================
    [WARNING] If the Kubernetes cluster has only one worker node, 
              services will be temporarily down during update. 
              Do you want to update Container Management? (y/n) 
    ==============================================================
    :

    参考

    【オプション説明】

    以下に示すAnsibleのコマンドオプションを利用することができます。

    -eオプション

    更新コマンド実行後のコンソール画面上での確認 y/n や Enterキー などの入力をスキップできます。

    $ ansible-playbook -i /var/FJSGHD/inventories/hosts play_update_container_mng.yml -e <指定値>
    指定値 オプション説明
    no_interactive=True 更新確認のための y/n 入力をスキップします。
    interactive_update=False 更新中、ロードバランサーからKubernetes nodeサーバーへの振り分け停止/再開を行う操作の確認のためのEnterキーの入力待ちをスキップできます。

    注意

    Kubernetesの更新処理では、Kubernetes nodeサーバーを1台ずつ更新します。 Kubernetes nodeサーバーが2台以上存在する場合、Kubernetes nodeサーバーをメンテナンスする前後に以下のメッセージが出力され更新処理が一時停止されます。 業務無停止で更新するためには、Kubernetes nodeサーバーへのリクエスト振り分けの制御が必要です。前述の注意事項を確認した上で、 ロードバランサーからKubernetes nodeサーバーへの振り分け停止および再開を実施し、Enterキーを押下してください。

    メンテナンス前には以下のメッセージが表示されます。

    【メッセージ】

    [update/container_mng/k8s_cluster : confirm]
    ======================================================
    [WARNING]
    Updating the version of the kubernetes node [<IPアドレス>] to <バージョン>.
    Please stop routing requests to the kubernetes node [<IPアドレス>] from the load balancer.
    If you have stopped routing requests, please press the enter key.
    ======================================================

    【説明】

    <IPアドレス>のKubernetes nodeサーバーを<バージョン>にアップデートします。
    ロードバランサーから<IPアドレス>のKubernetes nodeサーバーへの振り分けを停止してください。
    振り分け停止後、Enterキーを押下し、処理を再開してください。

    メンテナンス後には以下のメッセージが表示されます。

    【メッセージ】

    [update/container_mng/k8s_cluster : confirm]
    ======================================================
    [WARNING]
    The kubernetes node [<IPアドレス>] has been updated to <バージョン>.
    Please resume routing requests to the kubernetes node [<IPアドレス>] from the load balancer.
    If you have resumed routing requests, please press the enter key.
    ======================================================

    【説明】

    <IPアドレス>のKubernetes nodeサーバーを<バージョン>にアップデートしました。
    ロードバランサーから<IPアドレス>のKubernetes nodeサーバーへの振り分けを再開してください。
    振り分け再開後、Enterキーを押下し、処理を再開してください。

    コマンドの結果は以下のように出力されます。

    【正常終了時】

    正常終了時は下記のようにunreachable=0, failed=0となり、XX、YYは任意の整数が記載されています。

    PLAY RECAP *********************************************************************
    127.0.0.1                  : ok=XX  changed=YY  unreachable=0    failed=0

    【異常終了時】

    異常終了時は下記のようにunreachable, failedのAAおよびBBは1以上の任意の整数が記載されています。

    PLAY RECAP *********************************************************************
    127.0.0.1                  : ok=XX  changed=YY  unreachable=AA    failed=BB

参考

Container Managementの更新は、Podの退避処理(Drain k8s_nodeタスク)に失敗した場合、 退避が正常に行えるように修正後、下記コマンドを再実行することで現在のバージョンから更新を再開することができます。

$ ansible-playbook -i /var/FJSGHD/inventories/hosts play_create_playbook_for_update_tool.yml
$ ansible-playbook -i /var/FJSGHD/inventories/hosts play_update_container_mng.yml

注意

本手順実施後にContainer Managementのコンテナ間通信に使用されるflannelの更新を実施してください。 更新は、Container Managementで動作中コンテナの通信に影響があるため、業務影響を考慮して実施してください。 更新方法については「12.5.2 flannelの更新」を参考にしてください。