アップグレードマニュアル

サーバーホストのローカルファイルにkeyring dataが格納されている場合、keyring_filepluginが必要です。keyring_filepluginがアクティブであることを確認するには、SHOW PLUGINSステートメントを使用するか、INFORMATION_SCHEMA.PLUGINSテーブルをクエリします。例えば:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS  
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE 'keyring%';
+--------------+---------------+
| PLUGIN_NAME  | PLUGIN_STATUS |
+--------------+---------------+
| keyring_file | ACTIVE        |
+--------------+---------------+

下記のコマンドを実行して、SenseLinkをアップグレードします。

############# run separately ############
##### Please ensure use ubuntu user. #####
# make sure install_package_path is install package path.
# use tmux for upgrade, version is like 1.10 or 2.*

tmux
./upgrade_senselink.sh ${k8sKubeConfig_path} ${sshKeyFile_path} ${version} |& tee -a
 upgrade_senselink.log

SenseLinkの構成要素

Kubernetes環境で、全てのSenseLinkの構成要素はネームスペースsenselinkの下にデプロイされました。つまり、kubectlを使って、SenseLinkのリソースを操作する時にパラメータ-n senselink が必要です。

SenseLinkポート

kubectl -n senselink get podsコマンドでsenselinkネームスペースで動いているSenseLinkのホストを取得した結果は下記の通りです。

SenseLinkサービス

kubectl -n senselink get servicesコマンドでsenselinkネームスペースで動いているSenseLinkのサービスを取得した結果は下記の通りです。

インストール時の問題のトラブルシューティング

PV or PVCを削除できません

sk patch pvc infra-claim-infra-1 -p '{"metadata":{"finalizers":null}}'

Apiv2 Pod Crash 問題

SenseLinkをデプロイしたら、apiv2 ポートは CrashLoopBackOff 状態となってしまいます。

$ kubectl -n senselink get pod

NAME                         READY     STATUS             RESTARTS   AGE
apiv2-0                      0/1       CrashLoopBackOff   37         172m
apiv2-1                      0/1       CrashLoopBackOff   37         172m
apiv2-2                      0/1       CrashLoopBackOff   36         172m
emq-5c5b6fbbf9-wmxw9         1/1       Running            0          3h9m
feature-0                    1/1       Running            0          3h9m
feature-1                    1/1       Running            0          3h8m
feature-2                    1/1       Running            0          3h8m
mmo-init-job-nbm59           0/1       Completed          0          3h10m
...

ポートログを確認したら、下記のログが見つかりました。Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'

$ kubectl -n senselink logs apiv2-0
...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'InfraService': Unsatisfied dependency expressed through field 'port'; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Integer'; nested exception is java.lang.NumberFormatException: For input string: "tcp://10.108.12.226:50009"
...

Apiv2 Pod Crashの原因

infra-serviceの一部のキャッシュがapiv2の正常な実行に影響を与えたと推測されています。 SenseLinkのコンポーネントには実行中の依存関係があります。これが、コンポーネントが順番に段階的に展開される理由です。そして、infra-serviceはapiv2の後に配備されました。したがって、この問題は通常は発生しません。

Apiv2 Pod Crash問題の対応

k8s statefulset infra-service と apiv2を削除します。その後、順番にapiv2 と infra-serviceをデプロイします。

# delete infra-service fs-service and apiv2 pods
$ kubectl delete -f /data/senselink/multi-done/service/infra-service.yaml
service "infra" deleted
$ kubectl delete -f /data/senselink/multi-done/service/fs-service.yaml
service "fs" deleted
$ kubectl delete -f /data/senselink/multi-done/statefulset/apiv2-statefulset.yaml
statefulset.apps "apiv2" deleted

# re-deploy apiv2 pods
$ kubectl apply -f /data/senselink/multi-done/statefulset/apiv2-statefulset.yaml
statefulset.apps/apiv2 created
# chech all apiv2 pods are running
$ kubectl -n senselink get pods
NAME                         READY     STATUS      RESTARTS   AGE
apiv2-0                      1/1       Running     0          4m15s
apiv2-1                      1/1       Running     0          4m5s
apiv2-2                      1/1       Running     0          3m59s
...

# redeploy infra-service
$ kubectl apply -f /data/senselink/multi-done/service/infra-service.yaml
service/infra created

# redeploy fs-service
$ kubectl apply -f /data/senselink/multi-done/service/fs-service.yaml
service/fs created

最終更新