ここでは、Container Managementを旧バージョンから本バージョンにアップデートする手順について説明します。
以下の事項が前提です。
Automation Managerが本バージョンにアップデート済みであること。
Kubernetes masterサーバーおよびKubernetes nodeサーバーのOSが「設計ガイド(FJCS仕様)」-「システム構成」-「標準のリソース構成」-「仮想サーバー」に記載の条件を満たしていること。
「更新ツールの実行準備」の[更新時]の手順を実施済みであること。
旧バージョンマニュアル「インストールガイド」-「アップデート手順後のContainer Management cgroup driver変更」および「flannelの更新・切り戻し」の「flannel更新手順」が実施済みであること
注意
アップデート作業中、Container Managementで動作するアプリケーションが業務無停止となるために、以下の条件を満たす必要があります。
KubernetesクラスタにKubernetes nodeサーバーが2台以上存在すること。
配備するアプリケーションが停止されたとき、グレースフルにシャットダウンするよう設計されていること。(注1)
配備するアプリケーションのコンテナの数が、常に1つ以上動作するように設計されていること。(注2)
注1) 設計の詳細は、The Twelve-Factor App (IX. Disposability)を参照してください。未設計の場合、Container Managementのアップデート中に業務処理が停止する場合があります。
注2) アプリケーションの実行最小数をKubernetesのPodDisruptionBudgetで制御することができます。詳細はKubernetes公式ドキュメントのDisruptionsを参照してください。未設計の場合、アップデート中に業務処理が失敗する場合があります。
注意
更新ツールでは「概説書」のサポート範囲で、既存のデータおよびオープンソースの設定ファイルを、アップデート後のオープンソースに適用します。オープンソースの設定ファイルや機能に対して個別に追加・設定した場合は更新後、設定を引き継げない場合があります。個別に機能・設定を追加した場合は、該当のオープンソースを業務とは異なる環境で再現・更新することで引き継ぎ可能であることを検証し、更新ツールを実行してください。
更新ツールでは、設定ファイルのバックアップやデータを引き継ぐためのデータベースのダンプファイル取得を行います。お客様のシステムのリソース利用状況に合わせ、十分なリソース状況であることを確認した後、更新ツールの実行を行ってください。リソース確認方法は「運用ガイド(FJCS仕様)」を参照してください。
オープンソースのアップデートの際、非互換である機能の取り込みが含まれる可能性があります。切り戻しによっても更新前に復元できない場合に備え、更新前に必ずバックアップを取得してください。バックアップ方法は「運用ガイド(FJCS仕様)」を参照してください。
Container Managementのアップデートでは、Kubernetes nodeサーバーを1台ずつ、配備されたアプリケーション(コンテナ)を別のKubernetes nodeサーバーに退避させながらアップデートを行います。そのため、アプリケーションが一部のKubernetes nodeサーバーに偏って配置される場合があります。偏って配置された場合でも正常に動作するようリソース使用量を考慮し、更新ツールの実行を計画してください。詳細は「設計ガイド(FJCS仕様)」3.2. Container Managementに関する設定 を参照してください。
更新、および、切り戻しの操作は多重実行できません。各操作はシーケンシャルに実行してください。
Container Managementで使用しているホストサーバーの/etc/resolve.confに記載されているIPアドレスがループバックアドレス(127.0.0.1)のみ指定されている場合は、更新ツールの実行途中でエラーが発生し、更新に失敗します。ループバックアドレスのみを指定をしている場合は、ループバックアドレスの代わりにホストのIPアドレスを指定するか、正常に動作するDNSのIPアドレスを指定してください。
リソースタイプReplicationController、ReplicaSet、Job、DaemonSet、StatefulSetで管理されていないPodが配備されている場合は更新ツールの実行に失敗し、以下のようなエラーが出力されます。
TASK [get_status/container_mng : Fail if non managed pods exist] *************** fatal: [172.16.0.11]: FAILED! => {"changed": false, "msg": "Non managed pod exists [u'nginx-pod', u'nginx-pod1']"}
エラーメッセージの''で囲まれた部分が該当するPod名になります。出力されたPodを削除するか、ReplicasetなどでPodを管理するように設定した後に、Container Managementのアップデートを再実行して下さい。
Automation Managerコンテナにログインし、以下の手順を行うことでContainer Managementのアップデートができます。
事前準備
以下のコマンドを実行し、更新ツールの実行に必要なファイルを生成します。
# cd /data/playbook # ansible-playbook -i inventories/<環境識別子>/hosts play_create_playbook_for_update_tool.yml
<環境識別子>は、「第2章 インストール手順」実施時に環境を一意に識別するために指定した任意の文字列を指定します。
Container Managementのアップデート
以下のコマンドを実行し、Container Managementをアップデートします。
# cd /data/playbook # ansible-playbook -i inventories/<環境識別子>/hosts play_update_container_mng.yml
コマンドを実行すると、以下のメッセージが表示されます。誤って実行した場合や前提・業務無停止の条件を満たしていない場合は、「n」を入力し、Enterキーを押下することでアップデートを中断できます。アップデートを継続する場合は「y」を入力し、Enterキーを押下します。
[Please confirm] ============================================================== [WARNING] Do you want to run Update Container Management? (y/n) ============================================================== :
注意
Kubernetesのバージョンアップでは、Kubernetes masterおよびnodeサーバーの台数分、マイナーバージョンを1世代ずつアップデートします。
この際、業務無停止とするために、ロードバランサーやAPI ProxyからKubernetes nodeへの振り分け停止/再開を行う操作が必要となります。
アップデートの処理は、以下の形式でメッセージを表示して一時停止します。
[update/container_mng/k8s_cluster : confirm] ====================================================== <メッセージ> ======================================================
以降の説明に従って、Kubernetes nodeへの振り分け停止/再開の操作を行ってください。
【メッセージ】
[WARNING] Upgrade the version of k8s_node [<IPアドレス>] to <バージョン>. Please prepare to continue working on other k8s nodes instead of the [<IPアドレス>]. If you are ready to continue, please press enter key.
【説明】
<IPアドレス>のKubernetes nodeサーバーを<バージョン>にアップデートします。
<IPアドレス>のKubernetes nodeサーバーへの振り分けを停止してください。
振り分け停止後、Enterキーを押下し、処理を再開してください。
【メッセージ】
[WARNING] k8s_node [<IPアドレス>] has been upgraded to <バージョン>. Please prepare to resume work on k8s_node [<IPアドレス>]. If you are ready to continue, please press 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は任意の整数が記載されています。
PLAY RECAP ********************************************************************* 127.0.0.1 : ok=XX changed=YY unreachable=AA failed=BB
注意
本手順実施後にContainer Managementのコンテナ間通信に使用されるflannelおよびIngressリソースを制御するIngress Controllerの更新を実施してください。
更新は、Container Managementで動作中コンテナの通信に影響があるため、業務影響を考慮して実施してください。
更新方法については「B.1 flannelの更新・切り戻し」および「B.2 Ingress Controllerの更新・切り戻し」を参照してください。
Ingress Controllerの更新後にKubernetesのパッケージ管理を行うHelmの更新を実施してください。
更新方法については「B.3 Helmの更新・切り戻し」を参照してください。