ここでは、Container Managementを更新する手順について説明します。
以下の事項が前提です。
Automation Managerが更新済みであること。
「13.2.2 メディアパック配置場所の設定」の手順が実施済みであること。
Kubernetes masterサーバーおよびKubernetes nodeサーバーのOSが「設計ガイド(FJCS仕様)」-「システム構成」-「標準のリソース構成」-「仮想サーバー」に記載の条件を満たしていること。
注意
Container Managementの更新では、Kubernetes nodeサーバーを1台ずつ、配備されたアプリケーション(コンテナ)を別のKubernetes nodeサーバーに退避させながら更新します。 そのため、業務無停止で更新するためには、以下の条件を満たす必要があります。
KubernetesクラスタにKubernetes nodeサーバーが2台以上存在すること。
アプリケーションが退避される際、グレースフルにシャットダウンするように設計されていること。(注1)
配備するアプリケーションのコンテナの数が、常に1つ以上動作するように設計されていること。(注2)
注1) 設計の詳細は、The Twelve-Factor App (IX. Disposability)を参照してください。未設計の場合、Container Managementのアップデート中に業務処理が停止する場合があります。
注2) アプリケーションの実行最小数をKubernetesのPodDisruptionBudgetで制御することができます。詳細はKubernetes公式ドキュメントのDisruptionsを参照してください。未設計の場合、アップデート中に業務処理が失敗する場合があります。
注意
更新後、マニュアルに記載がない方法でオープンソースの設定ファイルを編集した場合や、サポート対象外の機能については、設定を引き継げない場合があります。サポート範囲については、「概説書」を参照してください。
更新時、設定ファイルのバックアップやデータを引き継ぐためのデータベースのダンプファイル取得を行います。お客様のシステムのリソース利用状況に合わせ、あらかじめ十分なリソース状況であることを確認した上で、更新手順を実行してください。リソース確認方法は「5.4 Container Managementのリソース確認」を参照してください。
オープンソースの更新により、非互換である機能の取り込みが含まれる可能性があります。切り戻しによっても更新前に復元できない場合に備え、更新前に必ずバックアップを取得してください。バックアップ方法は「10.2 Container Managementのバックアップ」を参照してください。
Container Managementの更新では、Kubernetes nodeサーバーを1台ずつ、配備されたアプリケーション(コンテナ)を別のKubernetes nodeサーバーに退避させながら更新します。そのため、更新後にアプリケーションが一部のKubernetes nodeサーバーに偏って配置される場合があります。偏って配置された場合でも正常に動作するようリソース使用量を考慮し、更新を計画してください。 詳細は「設計ガイド(FJCS仕様)」-「Automation Managerに関する設定」-「Container Managementに関する設定」を参照してください。
Podの配備先を1つのnodeサーバーに固定していると、更新処理で実行されるPodの退避処理でエラーとなります。予め複数のnodeサーバーにPodが配備できるように設計してください。
更新、および、切り戻しの操作は多重実行できません。各操作はシーケンシャルに実行してください。
Container Managementで使用しているホストサーバーの/etc/resolve.confに記載されているIPアドレスがループバックアドレス(127.0.0.1)のみ指定されている場合は、更新途中でエラーが発生し、更新に失敗します。ループバックアドレスのみを指定をしている場合は、ループバックアドレスの代わりにホストのIPアドレスを指定するか、正常に動作するDNSのIPアドレスを指定してください。
下記に示す更新手順を実行後、Ansibleサーバーの/home/k5user/.kube/configの内容が更新されます。KubernetesとCIパイプラインの連携などで、/home/k5user/.kube/configをコピーして別の場所で使用している場合は、更新後のconfigファイルで置き換えて下さい。
リソースタイプ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'pod-name1 in namespace1', u'pod-name2 in namespace2']"}
エラーメッセージの''で囲まれた部分が該当する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
<環境識別子>は、「インストールガイド(FJCS仕様)」- 「インストール手順」実施時に環境を一意に識別するために指定した任意の文字列を指定します。
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 update Container Management? (y/n) ============================================================== :
注意
Kubernetesの更新処理では、nodeサーバーを1台ずつ、配備されたPodを別のnodeサーバーに退避させながらメンテナンスします。 業務無停止で更新するためには、メンテナンス中のnodeサーバーにアプリケーションへのリクエストを振り分けないようにする必要があります。 nodeサーバーをメンテナンスする前後に以下のメッセージが出力され更新処理が一時停止されるので、「操作ガイド(FJCS仕様)」の手順に従い、API Proxyからnodeサーバーへの振り分け停止および再開を実施してください。
メンテナンス前には以下のメッセージが表示されます。
【メッセージ】
[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
注意
上記の条件を満たしていない場合、Podの退避処理(Drain k8s_nodeタスク)でエラーが発生する場合があります。その場合、退避が正常に行えるようにアプリケーションの設計を見直した後、更新手順(手順1、手順2)を再実行することで更新処理を継続することができます。
本手順ではContainer ManagementのflannelおよびIngress Controllerの更新は実施されません。 flannelおよびIngress Controller更新手順については「13.2.5 flannel」および「13.2.6 Ingress Controller」を参照してください。