はじめに
本文書では、セルフマネージド版Turbonomicをご利用の際、Turbonomicからインターネットへの接続が難しい環境において、オフラインでアップグレードする場合の手順をご紹介するものです。
アップグレード作業全体のマニュアルは以下ご参照下さい。
https://www.ibm.com/docs/ja/tarm/8.17.x?topic=SSFV9Z_8.x.x/doc-external/_INSTALL_Topics_XL/TOPIC_Updating_Operations_Manager_Offline_XL.htm#XL_OfflineUpdate
更新前のチェックは以下ページを参照下さい。
https://www.ibm.com/docs/ja/tarm/8.17.x?topic=SSFV9Z_8.x.x/doc-external/_INSTALL_Topics_XL/TOPIC_Updating_Operations_Manager_PreCheck_XL.htm#XL_OnlineUpdatePrecheck
以下では上記マニュアルの内容を実施する流れをstep by stepでご紹介します。
アップグレード用のISOファイルをダウンロード
インターネット接続可能な端末を使って、以下URLより最新バージョンのアップグレード用ISOファイルをダウンロードします。
https://community.ibm.com/community/user/viewdocument/turbonomic-latest-releases-downlo
※なお、Turbonomicは x.yy.zzといった3段階のバージョン管理がされており、このうち、zzの部分は隔週でリリースされています。最新のバージョンをダウンロードする際は "Latest Bi-Weekly Release" のISOファイルを入手下さい。
アップグレード用の最新スクリプトをダウンロード
こちらもインターネット接続が可能な端末から予めダウンロードしておきます。
ダウンロードするファイル例:
※8.17.5の部分は、アップグレードするターゲットバージョンを指定します。
https://download.vmturbo.com/appliance/download/updates/8.17.5/isoUpdate.sh
適当なlinux端末でcurlコマンドで用いてダウンロードした例:
$ curl -O https://download.vmturbo.com/appliance/download/updates/8.17.5/isoUpdate.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1233 100 1233 0 0 1522 0 --:--:-- --:--:-- --:--:-- 1522
$
こちらのファイルはTurbonomicの仮想マシン上からアップグレードを開始する際に必要になりますので、SCPなどを使って、Turbonomicの仮想マシンへ転送しておいてください。
Turbonomicへログインの上、upgrade-precheckスクリプトを実行
事前チェックスクリプトを実行し、アップグレード可能な状態である事を確認します。
なお、"Are you going to be performing an ONLINE upgrade of the IBM Turbonomic instance"の質問に対しては、今回はオフラインアップグレードを実施しますので、"n" として回答下さい。
最終的に "All tests PASSED you can proceed with upgrade!" として完了する事を確認下さい。
$ /opt/local/bin/upgrade-precheck.sh
--Starting Upgrade Pre-check...
****************************
Checking for free disk space...
Disk space check PASSED
****************************
*****************************
Are you going to be performing an ONLINE upgrade of the IBM Turbonomic instance (y/n)? n
****************************
Checking MariaDB status and version...
Checking if the MariaDB service is running...
MariaDB checks PASSED
****************************
****************************
Checking if the Kubernetes service is running...
Kubernetes service checks PASSED
****************************
****************************
Checking for expired Kubernetes certificates...
Checking all certs now...
Kubernetes Client Version installed is: v1.29.12
Kubernetes Server Version installed is: v1.29.12
Certificate checks PASSED
****************************
*****************************
Checking if root password is expired or set to expire...
Root account checks PASSED
****************************
****************************
Checking time and date settings (NTP, Timezone...)
Time and date settings checks PASSED
****************************
*****************************
Checking for any IBM Turbonomic pods not ready and running...
IBM Turbonomic pods checks PASSED
*****************************
All tests PASSED you can proceed with upgrade!
If you need more details for any of the checks, re-run the script with the -v switch for verbose mode
--End of Upgrade Pre-Check--
$
現在の Turbonomic VM のスナップショットを保存します
作業中に何か予期しない状況に陥った場合、アップグレード前の状態にすぐ戻せる様、仮想マシンとしてのスナップショットを取得しておきます。
まず、静止点をとる為にTurbonomicとしての仮想マシンをシャットダウンします
sudo init 0
シャットダウン完了後、VMwareとしてのsnapshotを取得しておきます。

Snapshot取得後、仮想マシンを起動し、Turbonomicとしてのサービスが全て起動し、UIへログイン可能になった事を確認します。(環境によっては30分程度掛かる場合もありますので、少し気長にお待ちください。)
内部証明書の更新スクリプトを実行する
Turbonomic内部で使用されている各種証明書をk8s-certs-renew.shを用いて更新しておきます。
※なお、バージョンにもよりますが、2025年時点では証明書の有効期限は1年となっています。つまり、1年に一度はこの証明書の更新処理が必要になりますので、併せてご留意ください。(可能な限り半年に一度はアップグレードを実行頂き、その際にこの証明書の更新も済ませてしまう運用をお勧めします。)
また、バージョン8.12以前のCentOSをベースとしたバージョンをご利用の場合は、実行頂くスクリプトが変わりますのでご注意下さい。
$ sudo /opt/local/bin/k8s-certs-renew.sh
## Expiration before renewal ##
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 24, 2026 08:27 UTC 363d ca no
apiserver Oct 24, 2026 08:27 UTC 363d ca no
apiserver-etcd-client Oct 24, 2026 08:27 UTC 363d etcd-ca no
apiserver-kubelet-client Oct 24, 2026 08:27 UTC 363d ca no
controller-manager.conf Oct 24, 2026 08:27 UTC 363d ca no
etcd-healthcheck-client Oct 24, 2026 08:27 UTC 363d etcd-ca no
etcd-peer Oct 24, 2026 08:27 UTC 363d etcd-ca no
etcd-server Oct 24, 2026 08:27 UTC 363d etcd-ca no
front-proxy-client Oct 24, 2026 08:27 UTC 363d front-proxy-ca no
scheduler.conf Oct 24, 2026 08:27 UTC 363d ca no
super-admin.conf Oct 24, 2026 08:27 UTC 363d ca no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Oct 22, 2035 08:27 UTC 9y no
etcd-ca Oct 22, 2035 08:27 UTC 9y no
front-proxy-ca Oct 22, 2035 08:27 UTC 9y no
## Renewing certificates managed by kubeadm ##
[renew] Reading configuration from the cluster...
[renew] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
certificate embedded in the kubeconfig file for the admin to use and for kubeadm itself renewed
certificate for serving the Kubernetes API renewed
certificate the apiserver uses to access etcd renewed
certificate for the API server to connect to kubelet renewed
certificate embedded in the kubeconfig file for the controller manager to use renewed
certificate for liveness probes to healthcheck etcd renewed
certificate for etcd nodes to communicate with each other renewed
certificate for serving etcd renewed
certificate for the front proxy client renewed
certificate embedded in the kubeconfig file for the scheduler manager to use renewed
certificate embedded in the kubeconfig file for the super-admin renewed
Done renewing certificates. You must restart the kube-apiserver, kube-controller-manager, kube-scheduler and etcd, so that they can use the new certificates.
## Restarting control plane pods managed by kubeadm ##
Removed sandbox cd97a87b30ec081a4a9c6618172cfd5c707e8bf8c9794ef2137350ef33b6079f
Removed sandbox f6352bd8efd230a735b8e629065375aecd02ad09b03a0f00b98e0e54b0cd96ee
Removed sandbox b573a8c3f09a75339d59db5489c78245e1b0b7e428fb46bf75d58d7653cd03ee
Removed sandbox a79503217cedd0191afb362165e9091ad30de8294eaf097e5b1b3328e7cc38db
Stopped sandbox 2ab91b9ed21e84a07292547cf20f3c8c5372eb7e33f1c01880922cafc8463cca
Stopped sandbox 97d6473db769cef1bde10259c5735d88ba4e0dabaf8cc667bf9935b2f98f0407
Removed sandbox 2ab91b9ed21e84a07292547cf20f3c8c5372eb7e33f1c01880922cafc8463cca
Stopped sandbox 07769da3ed038558ad34e96c19dcbb65e3cee4110407656529e402c4259c27ae
Removed sandbox 97d6473db769cef1bde10259c5735d88ba4e0dabaf8cc667bf9935b2f98f0407
Stopped sandbox 2e2d2aeb9668732596d7e6e43e75d10928db8110d20a2df4932ca3ad46624fff
Removed sandbox 07769da3ed038558ad34e96c19dcbb65e3cee4110407656529e402c4259c27ae
Removed sandbox 2e2d2aeb9668732596d7e6e43e75d10928db8110d20a2df4932ca3ad46624fff
## Updating /root/.kube/config ##
## Waiting for apiserver to be up again ##
## Expiration after renewal ##
[check-expiration] Reading configuration from the cluster...
[check-expiration] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
CERTIFICATE EXPIRES RESIDUAL TIME CERTIFICATE AUTHORITY EXTERNALLY MANAGED
admin.conf Oct 25, 2026 11:50 UTC 364d ca no
apiserver Oct 25, 2026 11:50 UTC 364d ca no
apiserver-etcd-client Oct 25, 2026 11:50 UTC 364d etcd-ca no
apiserver-kubelet-client Oct 25, 2026 11:50 UTC 364d ca no
controller-manager.conf Oct 25, 2026 11:50 UTC 364d ca no
etcd-healthcheck-client Oct 25, 2026 11:50 UTC 364d etcd-ca no
etcd-peer Oct 25, 2026 11:50 UTC 364d etcd-ca no
etcd-server Oct 25, 2026 11:50 UTC 364d etcd-ca no
front-proxy-client Oct 25, 2026 11:50 UTC 364d front-proxy-ca no
scheduler.conf Oct 25, 2026 11:50 UTC 364d ca no
super-admin.conf Oct 25, 2026 11:50 UTC 364d ca no
CERTIFICATE AUTHORITY EXPIRES RESIDUAL TIME EXTERNALLY MANAGED
ca Oct 22, 2035 08:27 UTC 9y no
etcd-ca Oct 22, 2035 08:27 UTC 9y no
front-proxy-ca Oct 22, 2035 08:27 UTC 9y no
$
ISO イメージを Turbonomic VM が使用可能な場所に保存し、CD ドライブとしてマウントします。
例えば以下例では、VMwareのRemote Consoleを起動し、取り外し可能デバイス -> CD/DVDドライブ -> ディスクイメージファイル(iso)に接続、を選択し、downloadしたISOファイルを直接指定してマウントしています。
なお、仮想マシンの中からもマウント出来ている事を確認するには、lsblkコマンドなどが使えます。
TurbonomicにSSHログインし、lsblkを実行した例
※最下段にsr0として14.5Gのディスク(マウントしたISOイメージ)が認識されています。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
tqsda1 8:1 0 1G 0 part /boot
mqsda2 8:2 0 1.7T 0 part
tqibmturbo-root
x 253:0 0 100G 0 lvm /
tqibmturbo-usr_local_bin
x 253:1 0 100G 0 lvm /usr/local/bin
tqibmturbo-var
x 253:2 0 301G 0 lvm /var
tqibmturbo-var_lib_mysql
x 253:3 0 800G 0 lvm /var/lib/dbs
tqibmturbo-tmp
x 253:4 0 4G 0 lvm /tmp
tqibmturbo-data_turbonomic
x 253:5 0 256G 0 lvm /var/lib/kubelet/pods/d592ebbd-6ca3-40a1-b593-47ebdb0f0156/volumes/kubernetes.io~local-volume/local-pv-prometheus-server
x /var/lib/kubelet/pods/46ea157f-f440-4d0a-9119-8da76c1b4589/volumes/kubernetes.io~local-volume/local-pv-kafka-log
x /var/lib/kubelet/pods/85a3cfd1-0880-4928-8959-3b81da1f932a/volumes/kubernetes.io~local-volume/local-pv-redis-data-redis-master-0
x /var/lib/kubelet/pods/6741cebc-e494-49cb-9c79-517e62a66bc0/volumes/kubernetes.io~local-volume/local-pv-consul-data
x /var/lib/kubelet/pods/068ddd3f-5c12-4c14-8503-a76db609de67/volumes/kubernetes.io~local-volume/local-pv-topology-processor
x /var/lib/kubelet/pods/fa12a71d-37f9-4ecf-a9b4-26e280fc41d8/volumes/kubernetes.io~local-volume/local-pv-zookeeper-data
x /var/lib/kubelet/pods/fc274047-2ef8-4b16-9a9e-f7757a43e5f1/volumes/kubernetes.io~local-volume/local-pv-rsyslog-auditlogdata
x /var/lib/kubelet/pods/fc274047-2ef8-4b16-9a9e-f7757a43e5f1/volumes/kubernetes.io~local-volume/local-pv-rsyslog-syslogdata
x /data/turbonomic
mqibmturbo-var_lib_containerd
253:6 0 230G 0 lvm /var/lib/containerd
sr0 11:0 1 14.5G 0 rom
$
予めダウンロード・転送しておいたisoUpdate.shスクリプトを実行
お待たせしました。ここまでくれば後はアップグレードを実行するのみです。
予めダウンロード・転送しておいたisoUpdate.shに実行権を付与の上、スクリプトを実行します。
$ ls -l isoUpdate.sh
-rw-r--r-- 1 turbo turbo 1233 Oct 25 08:18 isoUpdate.sh
$
$ chmod +x isoUpdate.sh
$
$ ./isoUpdate.sh
mount: /mnt/iso: WARNING: source write-protected, mounted read-only.
The t8c upgrade iso is been mounted
~/images ~
Loading image 1 of 8 - into local docker repo (SIZE:5M)
unpacking icr.io/cpopen/turbonomic/configmap-reload:v0.13.1 (sha256:845cc9419abf67b755c6310c9751b50089377034a8d05181a4a8151040f689a5)...
Loaded image: icr.io/cpopen/turbonomic/configmap-reload:v0.13.1
Loading image 2 of 8 - into local docker repo (SIZE:183M)
unpacking icr.io/cpopen/cpfs/ibm-licensing:4.2.16 (sha256:7aee11a802018f318b885c14aeb8805750f2b586441eeedef9674cabf7c4b5d3)...
Loaded image: icr.io/cpopen/cpfs/ibm-licensing:4.2.16
:
<中略>
:
The ISO image has been unmounted
$
スクリプト完了後、"t8c-operator"というpodが起動している事を確認下さい。こちらのpodの起動が完了した後、Turbonomic関連サービスの全てが自動的に再起動(バージョンアップ)されますので、その完了をお待ちください。
$ kubectl get pod -n turbonomic | grep t8c-operator
t8c-operator-fcb64c9b-n9l9g 1/1 Running 0 2m48s
$
最終的に全てのpodが正常起動するのをお待ちください。
※この手順例では、isoUpdate.sh実行後、概ね45分程度で全ポッドの起動まで完了。
$ kubectl get pod -n turbonomic
NAME READY STATUS RESTARTS AGE
action-orchestrator-56bd6cdbc6-z9ffn 1/1 Running 0 7m50s
api-84d84f4765-2rl8s 1/1 Running 0 7m32s
auth-7dbd89b5b4-454mh 1/1 Running 0 7m31s
cloud-optimizer-6d9455bfb5-qgp47 1/1 Running 0 7m31s
clustermgr-c75fd748d-zb55j 2/2 Running 0 7m31s
consul-7d58ddb56c-722xp 1/1 Running 0 7m31s
cost-5b788467d9-t7dgp 1/1 Running 0 7m30s
extractor-545fcc6b84-5gqn7 1/1 Running 0 7m59s
group-7849d99c7d-57qgt 1/1 Running 0 7m31s
history-7c54d4dc8b-p2pt9 1/1 Running 0 7m30s
kafka-54d4f8d88d-wt4qw 1/1 Running 0 7m56s
kubeturbo-5b86b76cb6-b84c5 1/1 Running 0 8m2s
market-6d45d8d4bb-bph7d 1/1 Running 0 7m28s
mediation-actionscript-59b59b5f94-x2ll6 1/1 Running 0 7m29s
mediation-appdynamics-dcfd45c77-4xm48 1/1 Running 0 7m29s
mediation-aws-85c4495778-cp5w7 1/1 Running 0 7m29s
mediation-awscloudbilling-777469994d-66x2v 1/1 Running 0 7m28s
mediation-awscost-654cc76bcc-5jxg9 1/1 Running 0 7m27s
mediation-awsinfra-6c75f69b6b-bk42w 1/1 Running 0 7m26s
mediation-awsorganization-6d8575cdd5-gd478 1/1 Running 0 7m28s
mediation-azure-d586bc696-nrtgj 1/1 Running 0 7m25s
mediation-azurebilling-f87fd4758-5vmwg 1/1 Running 0 7m26s
mediation-azurecost-7bc4d57496-9jp4q 1/1 Running 0 7m26s
mediation-azureea-855ff47f78-plkdk 1/1 Running 0 7m27s
mediation-azureinfra-64dcdb966d-r7s5g 1/1 Running 0 7m21s
mediation-azurepricing-648d845b6b-hk5jz 1/1 Running 0 7m27s
mediation-azuresp-6bc4599dc6-qwbd7 1/1 Running 0 7m9s
mediation-azurevolumes-5f8f8c9596-4bxpq 1/1 Running 0 7m7s
mediation-datadog-8c68647c6-dtkn8 1/1 Running 0 7m29s
mediation-dynatrace-6965cc49dc-l47kb 1/1 Running 0 6m35s
mediation-gcpbilling-6d4f5d74d-8j68n 1/1 Running 0 7m30s
mediation-gcpcost-5995f4c457-r9ltj 1/1 Running 0 7m21s
mediation-gcpinfra-845896dd7-wc47s 1/1 Running 0 7m8s
mediation-gcpproject-7668f54bb8-b4k4f 1/1 Running 0 7m21s
mediation-gcpsa-7c8bf9b9b5-djs5g 1/1 Running 0 7m9s
mediation-hpe3par-76d9846c56-vdtfs 1/1 Running 0 7m8s
mediation-hyperv-7d44cd6896-fpwm2 2/2 Running 0 7m7s
mediation-ibmstorage-flashsystem-f898df58-d9kjh 1/1 Running 0 7m9s
mediation-instana-7f7dffdb96-2ddvg 1/1 Running 0 7m31s
mediation-mssql-bfdfcf59d-k48mt 1/1 Running 0 6m46s
mediation-netapp-6ddccb8f-r6b4p 1/1 Running 0 7m21s
mediation-newrelic-5d46fd7c89-cmn5b 1/1 Running 0 7m25s
mediation-nutanix-7d9ff89d58-gbn2n 1/1 Running 0 7m9s
mediation-oneview-5c5d66dfc4-vcv58 1/1 Running 0 7m9s
mediation-powervm-78c465967f-jckrg 1/1 Running 0 7m7s
mediation-pure-58d97ddb9c-t7lgb 1/1 Running 0 7m9s
mediation-snmp-7b6f46bcff-86fpz 1/1 Running 0 6m37s
mediation-ucs-db8b59894-krgm6 1/1 Running 0 6m13s
mediation-udt-77b4956bd9-6fcsd 1/1 Running 0 6m53s
mediation-vcenter-74fd96c84d-rzlhg 1/1 Running 0 6m38s
mediation-vcenterbrowsing-77bd8b5f48-zkql4 1/1 Running 0 7m4s
mediation-vmax-5cd76987cf-pqbkx 1/1 Running 0 7m6s
mediation-vmm-7dcf57857d-rxp5z 2/2 Running 0 6m46s
mediation-webhook-5744c9fbf5-6zvbl 1/1 Running 0 7m4s
mediation-wmi-77744b4fbd-9tgzp 1/1 Running 0 6m35s
metadata-db9497c6c-5zm88 1/1 Running 0 6m53s
metrics-adapter-aws-cloudwatch-5c76d5dfff-plz8q 1/1 Running 0 6m32s
metrics-adapter-aws-performanceinsights-7b579444dc-2shcb 1/1 Running 0 6m38s
metrics-adapter-azure-monitormetrics-78ff5d489c-8lbnv 1/1 Running 0 6m38s
metrics-adapter-gcp-monitoring-5678c4c755-h8tgv 1/1 Running 0 6m38s
metrics-processor-7ff776b87c-thlzs 1/1 Running 0 6m38s
nginx-55bf6b597c-lpmmv 1/1 Running 0 7m49s
oauth2-5545cc89c6-pr7xx 1/1 Running 1 (2m26s ago) 6m38s
plan-orchestrator-85bc86bbd8-x4ldg 1/1 Running 0 7m6s
prometheus-kube-state-metrics-7554bbf9c9-h8f8f 1/1 Running 0 7m52s
prometheus-mysql-exporter-84cd47cd67-p9d82 1/1 Running 0 7m53s
prometheus-server-6b8c8fc56f-dj72f 4/4 Running 4 (5m21s ago) 5m38s
prometurbo-7bf884d67-7kdfs 2/2 Running 0 7m52s
redis-576db87b8d-qhxr4 2/2 Running 0 7m49s
repository-0 1/1 Running 0 42s
rsyslog-748cfb89d7-m7lrv 1/1 Running 0 7m49s
server-power-modeler-5bc4fb8fbc-szdkj 1/1 Running 0 6m56s
suspend-f45b65957-vzcqb 1/1 Running 0 7m6s
sustainability-6f594f6688-v29vz 1/1 Running 0 6m37s
t8c-operator-fcb64c9b-n9l9g 1/1 Running 0 9m45s
telemetry-99f88d9fb-f5smj 1/1 Running 0 7m51s
topology-processor-7bf5d5c686-hjgx4 1/1 Running 0 6m58s
ui-7f4c44c6c9-hcwlf 1/1 Running 0 7m48s
$
最後にTurbonomicのUIへアクセスし、トップページからアップグレード後のバージョンになっている事を確認。
以上になります。お疲れ様でした!
FAQ
Q. precheckスクリプトでエラーが出てしまった。
A. もし何かエラーが出る場合は、"upgrade-precheck.sh -v"として "v" を付与して実行する事で、エラーの詳細が確認可能です。
Q. そういえばアップグレード中に取得したVMwareのsnaopshotはどうすればよいか?
A. バックアップ的に長期間残すことはVmwareとしては推奨されていませんので、例えばアップグレード後しばらく(2,3日)ご利用頂き、特に問題なければその時点で削除頂く事をお勧めします。





