6.4. kubernetes版からkubernetes版へのバージョンアップ(Rel-21.04以降)

注意

バージョンアップを検討いただく場合には、本マニュアルの「2.システム要件」を参照して、バージョンアップを行うShieldバージョンのシステム要件のリソース(CPU、メモリ、SSD)を満たしていることをご確認ください。要件を満たしていない場合、Ericom Shieldがリソース不足により不安定となる問題が発生する可能性があります。

尚、各Shieldサーバのリソース構成が決まっておりリソース増強や変更が難しい等、システム要件を満たせない可能性がある場合は、バージョンアップを実施いただく前に、弊社サポートセンターへ必ずご相談ください。

参考

これまでShieldバージョンアップは1バージョンずつ行う必要がありましたが、20.07以降からバージョンアップを実施するお客様は、最新バージョンまで一度でバージョンアップが可能となりました。後述の手順で補足を加えておりますので、詳細は後述の手順をご確認ください。

警告

Rel-21.01における、バックアップ/復元機能の変更により、21.01へのアップグレードにはバックアップファイルを使用してシステム構成を手動で復元する必要があります。アップグレードプロセスを開始する前に、最新のバックアップjsonファイルを手元に用意してください。

注意

セットアップする際は下記の点にご注意ください。

  • sudo可能な一般ユーザでインストールを実施する(rootユーザでのインストールも可能 ※1)
  • sudoは付けないでスクリプトを実行する
  • インストール後は、インストールユーザで運用する

※1 rootになる際、"sudo su -" での実行は可能です。"sudo -s" での実行は、一般ユーザのカレントディレクトリや環境変数が引き継がれてしまうため不可となります。

※2 CentOSの場合は下記の警告「CentOS にインストールしている場合」も参照ください

警告

CentOS にインストールしている場合、20.05以降は必ず下記コマンドによる rootユーザにスイッチしてから実行してください。

$ sudo su -

また、shield-update.sh は通常、「/home/<インストールユーザ名>/shield.update.sh」に存在します。 rootユーザにスイッチした後、/home/<インストールユーザ名>/ に移動した上で、

$ ./shield-update.sh

を実行してください。 update後はShieldのスクリプトなど一式は「/root/」配下へと移動されます。 ご注意ください。 また、今後の運用も rootユーザで行う必要があります。

注意

20.10以前のバージョンで .es_custom_env を使用して cluster_dns_server のアドレスをデフォルトから変更してインストールした環境で21.01以降にバージョンアップする場合、一連のバージョンアップ作業完了後に追加で実施しなければならない作業がございますので、対象の環境の場合はバージョンアップ前にご連絡をください。

6.4.1. Ranchar証明書更新スプリクトの事前実行

【重要】Ericom ShieldにおけるRancher証明書期限切れについて 」を参照し、バージョンアップするタイミングで、Rancher証明書の更新をおこなってください。

注意

Rel-21.01以前のバージョンとRel-21.04以降のバージョンで手順が異なりますのでご注意ください。

6.4.2. shield システムの停止と設定ファイルのバックアップ取得

バージョンアップ作業にあたり、Shieldのシステムを事前に停止します。

$ ./ericomshield/shield-stop.sh

Shieldシステム停止後、Shield設定ファイルが含まれるディレクトリのバックアップを取得してください。

※System Componentノード上の「/home/ericom」配下、もしくは、nfsをご利用の場合は保存先のディレクトリのバックアップを取得してください。

6.4.3. Docker関連パッケージのAPTホールドとAPTアップグレード

最新Dockerバージョンにバージョンアップしてしまった場合に、正常にShieldが稼働しなくなる問題が発生する可能性がありますので、以下コマンドを全Shieldサーバにて実行することで、Docker関連パッケージのAPTホールドを行ってください。

$ sudo apt-mark hold containerd.io
$ sudo apt-mark hold docker-ce
$ sudo apt-mark hold docker-ce-cli
$ sudo apt-mark hold docker-ce-rootless-extras
$ sudo apt-mark hold docker-scan-plugin
$ sudo apt-mark hold docker.io
$ sudo apt-mark hold containerd

※ APTホールドされている一覧は以下コマンドで確認することができます。

$ sudo apt-mark showhold

その後、以下のコマンドにて最新パッケージまでAPTアップグレードも合わせて行ってください。

$ sudo apt update
$ sudo apt full-upgrade -y

6.4.4. shield-prepare-servers.sh による事前準備

バージョンアップ予定のバージョンに合わせて、shield-prepare-servers.sh を事前実行しておきます。 詳細な実行手順は 「5.1.5. shield-prepare-servers.sh による事前準備 」を参照してください。

6.4.5. kernelバージョン固定

最新kernelバージョンの場合に稀に正しくShieldが起動しない問題が発生する場合があります。アシストにて動作確認済みのkernelバージョンに以下のコマンドを各サーバにて実行して固定を実施してください。

アシスト動作確認済みkernelバージョン

  • 物理サーバやVMware環境などの汎用kernelを利用している場合
    Ubuntu18.04:Linux 5.4.0-150-generic
    Ubuntu20.04:Linux 5.15.0-84-generic
  • AWS環境(AWS用kernel)の場合
    Ubuntu18.04:Linux 5.4.0-1103-aws
    Ubuntu20.04:Linux 5.15.0-1045-aws
  • AzureやHyper-V環境(Azure用kernel)の場合
    Ubuntu18.04:Linux 5.4.0-1103-azure
    Ubuntu20.04:Linux 5.15.0-1045-azure

物理サーバやVMware環境などの汎用kernelを利用している場合

  • Ubuntu18.04の場合
$ kernel_var="5.4.0-150-generic"
$ sudo apt-get install linux-image-${kernel_var} -y
$ kernel_id=`grep \'gnulinux-simple- /boot/grub/grub.cfg | awk -F'gnulinux-simple-' '{print $2}' | tr -d "' {"`
$ sudo sed -i -e '/GRUB_DEFAULT=/c\GRUB_DEFAULT=0' /etc/default/grub
$ sudo sed -i -e "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"gnulinux-advanced-${kernel_id}>gnulinux-${kernel_var}-advanced-${kernel_id}\"/g" /etc/default/grub
$ grep GRUB_DEFAULT= /etc/default/grub
$ sudo update-grub
$ grep "set default" /boot/grub/grub.cfg
  • Ubuntu20.04の場合
$ kernel_var="5.15.0-84-generic"
$ sudo apt-get install linux-image-${kernel_var} -y
$ kernel_id=`grep \'gnulinux-simple- /boot/grub/grub.cfg | awk -F'gnulinux-simple-' '{print $2}' | tr -d "' {"`
$ sudo sed -i -e '/GRUB_DEFAULT=/c\GRUB_DEFAULT=0' /etc/default/grub
$ sudo sed -i -e "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"gnulinux-advanced-${kernel_id}>gnulinux-${kernel_var}-advanced-${kernel_id}\"/g" /etc/default/grub
$ grep GRUB_DEFAULT= /etc/default/grub
$ sudo update-grub
$ grep "set default" /boot/grub/grub.cfg

AWS環境(AWS用kernel)の場合

  • Ubuntu18.04の場合
$ kernel_var="5.4.0-1103-aws"
$ sudo apt-get install linux-image-${kernel_var} -y
$ kernel_id=`grep \'gnulinux-simple- /boot/grub/grub.cfg | awk -F'gnulinux-simple-' '{print $2}' | tr -d "' {"`
$ sudo sed -i -e '/GRUB_DEFAULT=/c\GRUB_DEFAULT=0' /etc/default/grub
$ sudo sed -i -e "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"gnulinux-advanced-${kernel_id}>gnulinux-${kernel_var}-advanced-${kernel_id}\"/g" /etc/default/grub
$ grep GRUB_DEFAULT= /etc/default/grub
$ sudo update-grub
$ grep "set default" /boot/grub/grub.cfg
  • Ubuntu20.04の場合
$ kernel_var="5.15.0-1045-aws"
$ sudo apt-get install linux-image-${kernel_var} -y
$ kernel_id=`grep \'gnulinux-simple- /boot/grub/grub.cfg | awk -F'gnulinux-simple-' '{print $2}' | tr -d "' {"`
$ sudo sed -i -e '/GRUB_DEFAULT=/c\GRUB_DEFAULT=0' /etc/default/grub
$ sudo sed -i -e "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"gnulinux-advanced-${kernel_id}>gnulinux-${kernel_var}-advanced-${kernel_id}\"/g" /etc/default/grub
$ grep GRUB_DEFAULT= /etc/default/grub
$ sudo update-grub
$ grep "set default" /boot/grub/grub.cfg

AzureやHyper-V環境(Azure用kernel)の場合

  • Ubuntu18.04の場合
$ kernel_var="5.4.0-1103-azure"
$ sudo apt-get install linux-image-${kernel_var} -y
$ kernel_id=`grep \'gnulinux-simple- /boot/grub/grub.cfg | awk -F'gnulinux-simple-' '{print $2}' | tr -d "' {"`
$ sudo sed -i -e '/GRUB_DEFAULT=/c\GRUB_DEFAULT=0' /etc/default/grub
$ sudo sed -i -e "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"gnulinux-advanced-${kernel_id}>gnulinux-${kernel_var}-advanced-${kernel_id}\"/g" /etc/default/grub
$ grep GRUB_DEFAULT= /etc/default/grub
$ sudo update-grub
$ grep "set default" /boot/grub/grub.cfg
  • Ubuntu20.04の場合
$ kernel_var="5.15.0-1045-azure"
$ sudo apt-get install linux-image-${kernel_var} -y
$ kernel_id=`grep \'gnulinux-simple- /boot/grub/grub.cfg | awk -F'gnulinux-simple-' '{print $2}' | tr -d "' {"`
$ sudo sed -i -e '/GRUB_DEFAULT=/c\GRUB_DEFAULT=0' /etc/default/grub
$ sudo sed -i -e "s/GRUB_DEFAULT=0/GRUB_DEFAULT=\"gnulinux-advanced-${kernel_id}>gnulinux-${kernel_var}-advanced-${kernel_id}\"/g" /etc/default/grub
$ grep GRUB_DEFAULT= /etc/default/grub
$ sudo update-grub
$ grep "set default" /boot/grub/grub.cfg

上記の各環境向けのkernel固定コマンドにて、kernelバージョンを固定した後は、OS再起動(sudo reboot)を実施してください。OS再記号後に指定して固定したkernelバージョンとなっていることを以下コマンドで確認してください。

$ hostnamectl | grep -e Kernel: -e Operating
  • コマンド実行例
kkauser@sh01:~$ hostnamectl | grep -e Kernel: -e Operating
        Operating System: Ubuntu 18.04.6 LTS
        Kernel: Linux 5.4.0-150-generic

6.4.6. アップデート用スクリプトの確認

Rancherサーバに shield-update.sh が存在するか確認してください。 存在しない場合、下記コマンドにより取得してください。 存在する場合も、必ず最新版のスクリプトをダウンロードしてご利用ください。

$ curl -O https://ericom-tec.ashisuto.co.jp/shield/shield-update.sh

6.4.7. スクリプトの差し替え

注意

20.07から20.10へのバージョンアップを行う際は、shield-stop.sh も最新版のものに差し替えてください。

20.07から20.10へのバージョンアップを行う際は、「6.3.2 アップデート用スクリプトの確認」で、 shield-update.sh を最新版にし、さらに shield-stop.sh も最新版のものに差し替えてから、バージョンアップを実施してください。

shield-stop.sh の最新版は、下記コマンドより、取得いただけます。

$ curl -O https://ericom-tec.ashisuto.co.jp/shield/shield-stop.sh

警告

shield-update.sh と shield-stop.shが古いバージョンのもので、20.07から20.10へのバージョンアップを行うと、以下のようなエラーが出力され、Shieldサービスが起動に失敗する場合があります。

Error: rendered manifests contain a resource that already exists. Unable to continue with install:
Secret "proxyless-certificate" in namespace "farm-services" exists and cannot be imported into
the current release: invalid ownership metadata; label validation error: missing key
"app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key
"meta.helm.sh/release-name": must be set to "shield-farm-services"; annotation validation error:
missing key "meta.helm.sh/release-namespace": must be set to "farm-services"

6.4.8. アップデート用スクリプトの実行

アップデート用スクリプトを実行してください。

$ ./shield-update.sh

###### START ###########################################################
==================================================================
現在インストールされているバージョン: Rel-20.03.541
==================================================================
どのバージョンをセットアップしますか?
1: Rel-20.05.649
2: Rel-20.03.541

 番号で指定してください:1
Rel-20.05_Build:649 をセットアップします。
[start] change dir
pwd: /home/ubuntu
pwd: /home/ubuntu/ericomshield
[end] change dir
BRANCH: Rel-20.05
[start] get install scripts
[end] get install scripts
[start] check sysctl file
[start] exec sysctl script
Disabling swap
Removing swap partition, original fstab file could be found at /etc/fstab.bak
/etc/sysctl.d/30-ericom-shield.conf has been updated!
Values from /etc/sysctl.d/30-ericom-shield.conf have been applied!

警告

20.07以降からバージョンアップを実施するお客様は、最新バージョンへ一度にバージョンアップが可能です。最新バージョンへバージョンアップされる場合は、最新バージョンを指定してください。

続いて、システムを停止することについての確認が行われます。よろしければ「y」を入力して先に進めてください。

###### START (update)###########################################################
BRANCH: Rel-20.05

=================================================================================
updateを実行します。よろしいですか?(Update前にShieldシステムを停止します。) [y/N]:y

システムを停止してアップデートが実行されます。完了するまで暫くおまちください。下記メッセージの表示で完了です。

New Version: Rel-20.05.649

Shield is not fully deployed
***************     Deploying Ericom Shield Repo:20.05.649 on System:456737a8-2b99-45a6-8706-b87e02ba8134 ...
***************     Deploying Shield Common *******************************
***************     Deploying Shield Farm Services *******************************
***************     Deploying Shield Management *******************************
***************     Deploying Shield Proxy *******************************
***************     Deploying Shield ELK *******************************
***************     Done!
NAME                    REVISION        UPDATED                         STATUS          CHART                   APP VERSION     NAMESPACE
shield-common           1               Tue Jun 16 06:28:38 2020        DEPLOYED        shield-20.05.649        20.05.649       common
shield-elk              1               Tue Jun 16 06:30:27 2020        DEPLOYED        shield-20.05.649        20.05.649       elk
shield-farm-services    1               Tue Jun 16 06:28:42 2020        DEPLOYED        shield-20.05.649        20.05.649       farm-services
shield-management       1               Tue Jun 16 06:29:20 2020        DEPLOYED        shield-20.05.649        20.05.649       management
shield-proxy            1               Tue Jun 16 06:29:53 2020        DEPLOYED        shield-20.05.649        20.05.649       proxy
[end] deploieng shield
[end] deploy shield
[start] get Default project id
DEFPROJECTID: c-ntqft:p-fvcxp
[end] get Default project id
[start] Move namespases to Default project
move namespases to Default project/ management
move namespases to Default project/ proxy
move namespases to Default project/ elk
move namespases to Default project/ farm-services
move namespases to Default project/ common
[end] Move namespases to Default project
[start] Waiting All namespaces are Deploied
[end] Waiting All namespaces are Deploied

【※確認※】 Rancher UI https://192.168.3.230:8443 をブラウザで開くか、
          /home/ubuntu/ericomshield/shield-status.sh 実行し、
          全てのワークロードが Acriveになることをご確認ください。

###### DONE ############################################################
###### DONE (update)############################################################
###### DONE (update)############################################################

6.4.9. Kubernetes のバージョンアップ

  • https://<Rancher Server のIPアドレス>:8443 へブラウザでアクセスし、Rancher UI を開いてログインしてください。

shield-update-kk01

  • 表示されているクラスタ名の右端にある三点リーダをクリックし、 EDIT 選択してください。

shield-update-kk02

  • Kubernetes OptionsKubernetes version で、最新のバージョンが選択されていることを確認します。

k8s-ver-up

選択されていることを確認したら、 Save で保存をしてください。

  • ダッシュボード上部にクラスタがアップデートされている旨のメッセージが表示されます。 アップデートが終わると、メッセージは自動的に消えます。

6.4.10. Rancherのクラスタ設定変更




Rel-20.01以前から、Rel-20.01以降へのアップデートのみ

Rel-20.01より前のバージョンからRel-20.01以降のバージョンへアップデートする場合には、 Rancherのクラスタ設定を手動で変更する必要があります。

  • https://<Rancher Server のIPアドレス>:8443 へブラウザでアクセスし、Rancher UI を開いてログインしてください。

shield-update-kk01

  • 表示されているクラスタ名の右端にある三点リーダをクリックし、 EDIT 選択してください。

shield-update-kk02

  • 画面にある Edit as YAML をクリックしてください。

shield-update-kk03

  • 表示されたYAMLを下記のように変更してください。 編集箇所は kubelet セクションの extra_ards です。 赤枠で囲んだ文字列を追記してください。YAMLフォーマットのため、インデントは正確に設定してください。

注意

既に設定済みの値は変更しないように注意してください。

shield-update-kk04

 kube-controller:
   cluster_cidr: 10.42.0.0/16
   service_cluster_ip_range: 10.43.0.0/16
 kubelet:
   cluster_dns_server: 10.43.0.10
   extra_args:
     eviction-hard: 'memory.available<0.2Gi,nodefs.available<10%'
     kube-reserved: 'cpu=1,memory=1Gi'
     kube-reserved-cgroup: "/system"
     max-pods: '110'
     system-reserved: 'cpu=1,memory=0.5Gi'
     system-reserved-cgroup: "/system"
  • 編集後、画面下部の Save をクリックしてください。 ダッシュボードに戻ります。ダッシュボード上部にクラスタがアップデートされている旨のメッセージが表示されます。 アップデートが終わると、メッセージは自動的に消えます。

shield-update-kk05

Rel-20.05以前から、Rel-20.07以降へのアップデートのみ

Rel-20.05以前のバージョンからRel-20.07以降のバージョンへアップデートする場合には、 Rancherのクラスタ設定を手動で変更する必要があります。

  • https://<Rancher Server のIPアドレス>:8443 へブラウザでアクセスし、Rancher UI を開いてログインしてください。

shield-update-kk01

  • 表示されているクラスタ名の右端にある三点リーダをクリックし、 EDIT 選択してください。

shield-update-kk02

  • 画面にある Edit as YAML をクリックしてください。

shield-update-kk03

  • 表示されたYAMLを下記のように変更してください。 編集箇所は kube-controller セクションの extra_ards です。 赤枠で囲んだ文字列を 削除 してください。YAMLフォーマットのため、インデントは正確に設定してください。

注意

既に設定済みの値は変更しないように注意してください。

shield-update-kk06

kube-controller:
  cluster_cidr: 10.42.0.0/16
  extra_args:
    node-monitor-grace-period: 10s
    node-monitor-period: 10s
    pod-eviction-timeout: 30s
  service_cluster_ip_range: 10.43.0.0/16
kubelet:
  cluster_dns_server: 10.43.0.10
  extra_args:
    eviction-hard: 'memory.available<0.2Gi,nodefs.available<10%'
    kube-reserved: 'cpu=1,memory=1Gi'
    kube-reserved-cgroup: "/system"
    max-pods: '110'
    system-reserved: 'cpu=1,memory=0.5Gi'
    system-reserved-cgroup: "/system"
  • 編集後、画面下部の Save をクリックしてください。 ダッシュボードに戻ります。ダッシュボード上部にクラスタがアップデートされている旨のメッセージが表示されます。 アップデートが終わると、メッセージは自動的に消えます。

shield-update-kk05

6.4.11. バックアップjsonファイルによる復元

注意

Rel-20.07以降から最新バージョンまで一度にバージョンアップした場合は、下記を実施してください。

  1. Adminコンソールにおいて、Admin | Settings | Restore に移動します。
shield-json-restore01
  1. Upload File To Restore より、「ファイル選択」のボタンを押します。
shield-json-restore02
  1. 復元に使用するバックアップjsonファイルを選択します。
shield-json-restore03
  1. 続いて「Restore Shield」のボタンを押します。
shield-json-restore04
  1. 確認のポップアップが表示されますので、「Yes!Restore」ボタンを押します。
shield-json-restore05
  1. システム構成が復元されますので、最後に「Save」ボタンを押し、設定を保存します。
shield-json-restore06
  1. 「shield-stop / start」を実行します。