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

サーバーホストのローカルファイルに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のホストを取得した結果は下記の通りです。

Type

NAME

Instances

STATUS

pod

apiv2-X

X=number of link nodes

Running

pod

emq

1

Running

pod

feature-X

X=number of link nodes

Running

pod

fs-X

X=1

Running

pod

infra2-X

X=number of link nodes

Running

pod

mmo-init-job

0

Completed

pod

openapi-X

X=number of link nodes

Running

pod

opq

1

Running

pod

schedule2

1

Running

pod

slinkpush

1

Running

pod

sntp

1

Running

pod

sync-X

X=number of link nodes

Running

pod

web-X

X=number of link nodes

Running

pod

tk-X

1

Running

pod

event-X

X=number of link nodes

Running

pod

nebula

X=1

Running

pod

zookeeper

1

Running

pod

websocket

1

Running

SenseLinkサービス

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

NAME

TYPE

EXTERNAL-IP

PORT(S)

apiv2

ClusterIP

none

8080/TCP, 8081/TCP, 20860/TCP

emq

ClusterIP

none

8083/TCP, 8084/TCP, 8883/TCP, 1883/TCP, 18083/TCP, 18084/TCP

feature

ClusterIP

none

50052/TCP

fs

ClusterIP

none

20080/TCP

infra2

ClusterIP

none

50009/TCP, 50010/TCP

mongo

ExternalName

dds-xxxxxxxx.mongodb.japan.rds.aliyuncs.com

none

mysql

ExternalName

rm-xxxxxxxx.mysql.japan.rds.aliyuncs.com

none

openapi

ClusterIP

none

8099/TCP

opq

ClusterIP

none

9001/TCP

redis

ExternalName

r-xxxxxxxx.redis.japan.rds.aliyuncs.com

none

schedule2

ClusterIP

none

8091/TCP

slinkpush

ClusterIP

none

50055/TCP

sntp

ClusterIP

none

10080/TCP, 50080/TCP

sync

ClusterIP

none

1010/TCP, 50051/TCP

web

NodePort

none

80:80/TCP

websocket

ClusterIP

none

9000/TCP, 9099/TCP

zookeeper

ClusterIP

none

2181/TCP, 2888/TCP, 3888/TCP

tk

ClusterIP

none

8091/TCP, 50011/TCP, 20880/TCP

nebula

ClusterIP

none

55555/TCP, 20861/TCP

event

ClusterIP

none

8089/TCP, 20870/TCP

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

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

最終更新