アップグレードマニュアル
SenseLink アップグレードを実行します。
サーバーホストのローカルファイルに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
インストール時の問題のトラブルシューティング
SenseLink RDS サービスデータをクリーンアップする方法
PV or PVCを削除できません
sk patch pvc infra-claim-infra-1 -p '{"metadata":{"finalizers":null}}'
SenseLink: ポート番号の問題で、Apiv2 ポードはCrashLoopBackOff時の対応
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
最終更新
役に立ちましたか?