docker-containerd-shim や docker-runc が検出されない場合
エラーの説明: 実行ファイルが検出されない
Diamond v1.4.3 および Diamond v1.5.3 では、インストール環境で使用される Docker のバージョンは v18.09.2
です。Mercury のテスト環境では、いくつかの理由から Docker バージョンが v18.09.7
にアップグレードされています。バージョンのアップグレードにより、特定のアプリケーションパスや実行パスが変更されます。k8s でポッドが稼働したり、Docker を使用してコンテナを直接起動すると、エラーが表示されます。
コピー docker: Error response from daemon: failed to start shim: exec: "docker: Error response from daemon: failed to start shim: exec: "docker-containerd-shim": executable file not found in $PATH: unknown.
": executable file not found in $PATH: unknown.
もしくは
コピー docker: Error response from daemon: OCI runtime create failed: unable to retrieve OCI runtime error (open /run/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/b123c36ddea60f7bf562946b7ffb9520023fcb4946b3e7f9941a564a46bad28c/log.json: no such file or directory): exec: "docker-runc": executable file not found in $PATH: unknown.
問題の原因
原因はまだ特定されていません。 Docker のバージョンが 18.09.2 から 18.09.7 にアップグレードされたため、一部の実行ファイルが再計画されています。
問題の解決方法
アップグレードが実行されていない環境で、/usr/bin/
ディレクトリを探し、docker-containerd-shim
と docker-runc
ファイルを問題のマシンの /usr/bin/
ディレクトリにコピーします。
この問題の発生を防ぐには、Ubuntu / CentOSマシンで APT 自動アップグレードサービスを無効にします。スクリプトを実行して、このサービスを停止します。以下のスクリプトは、環境デプロイメントスクリプトに組み込まれています。Diamond のデプロイメントパブリックキーを設定する際、このキーをデプロイメントマニュアル内に見つけることができます。
コピー # Disable apt package auto upgrade service
sudo systemctl stop apt-daily.service apt-daily.timer apt-daily-upgrade.timer apt-daily-upgrade.service
sudo systemctl disable apt-daily.service apt-daily.timer apt-daily-upgrade.timer apt-daily-upgrade.service
upstreamDNS を設定すると k8s インストールのタイムアウトが発生する場合
タイムアウトの説明
Diamond のインストール中に発生
ディスク構造のクリーンアップを要する場合
問題の説明
デプロイメントで init_data_fs_vdb
のディスクパーティションの初期化を実行中、Error mounting /mnt/locals/xxx/volume0: mount: mount /dev/vdbx on /mnt/locals/xxx/volumevolume0 failed: Structure needs cleaning
というエラーが発生する場合があります。
コピー ...
TASK [Create a ext4 filesystem] ********************************************************************************************************************************************************************************
ok: [mercury-work-01]
ok: [mercury-work-02]
ok: [mercury-work-03]
TASK [Mount up device] *****************************************************************************************************************************************************************************************
fatal: [mercury-work-02]: FAILED! => {"changed": false, "msg": "Error mounting /mnt/locals/afd/volume0: mount: mount /dev/vdb5 on /mnt/locals/afd/volume0 failed: Structure needs cleaning\n"}
fatal: [mercury-work-01]: FAILED! => {"changed": false, "msg": "Error mounting /mnt/locals/afd/volume0: mount: mount /dev/vdb5 on /mnt/locals/afd/volume0 failed: Structure needs cleaning\n"}
fatal: [mercury-work-03]: FAILED! => {"changed": false, "msg": "Error mounting /mnt/locals/afd/volume0: mount: mount /dev/vdb5 on /mnt/locals/afd/volume0 failed: Structure needs cleaning\n"}
to retry, use: --limit @/data/mercury/init_data_fs_vdb.retry
PLAY RECAP *****************************************************************************************************************************************************************************************************
mercury-work-01 : ok= 24 changed= 11 unreachable= 0 failed= 1
mercury-work-02 : ok= 24 changed= 11 unreachable= 0 failed= 1
mercury-work-03 : ok= 24 changed= 11 unreachable= 0 failed= 1
...
問題分析
原因は不明です。この問題は毎回発生するわけではありません。同じデプロイメントスクリプトを使用して、初回実行時にエラーが発生する場合もあれば、繰り返し実行した場合にのみエラーが発生する場合もあります。
問題の修正手順
この問題が発生した場合は、fsck ツールを使用して修正します。たとえば、前述した /dev/vdb5
のエラーが発生した場合、関連ノードにログインして sudo fsck.ext4 /dev/vdb5 -y
コマンドを実行すると、問題を修正できます。エラーの修正後、再度デプロイメントを実行します。
engine-alert-feature-db サービスの初期化でタイムアウトが発生する場合
コピー TASK [engine-alert-feature-db : App engine-alert-feature-db | Config & Pod & Service] ******************************************************************************************
ok: [mercury-work-01] = > (item = config.yml )
ok: [mercury-work-01] = > (item = proxy.yml )
ok: [mercury-work-01] = > (item = worker.yml )
ok: [mercury-work-01] = > (item = ingress.yml )
ok: [mercury-work-01] = > (item = init.sh )
ok: [mercury-work-01] = > (item = worker-monitor.yml )
ok: [mercury-work-01] = > (item = proxy-monitor.yml )
TASK [engine-alert-feature-db : App engine-alert-feature-db | Init] ************************************************************************************************************
fatal: [mercury-work-01]: FAILED! => {"changed": true, "cmd": ["bash", "/etc/kubernetes/apps/engine-alert-feature-db/init.sh"], "delta": "0:00:14.564060", "end": "2019-10-17 22:29:22.053773", "msg": "non-zero return code", "rc": 2, "start": "2019-10-17 22:29:07.489713", "stderr": "+ (( i=0 ))\n+ (( i<20 ))\n+ kubectl exec -it -n component cassandra-alert-0 -- cqlsh -u root -p d@6lo6kBjK%jllN -e 'CREATE KEYSPACE IF NOT EXISTS viper_test WITH replication = {'\\''class'\\'':'\\''SimpleStrategy'\\'', '\\''replication_factor'\\'' : 3};'\nUnable to use a TTY - input is not a terminal or the right kind of file\n+ ret_code=0\n+ [[ 0 -eq 0 ]]\n+ break\n+ [[ 0 -ne 0 ]]\n+ (( i=0 ))\n+ (( i<20 ))\n+ kubectl exec -it -n component cassandra-alert-0 -- cqlsh -u root -p d@6lo6kBjK%jllN -e '\n CREATE TABLE IF NOT EXISTS viper_test.static_feature_dbs(\n db_id uuid,\n object_type text,\n name text,\n feature_version int,\n description text,\n creation_time timestamp,\n indexes map<uuid, text>,\n deleted boolean,\n max_size bigint,\n PRIMARY KEY (db_id),\n );'\nUnable to use a TTY - input is not a terminal or the right kind of file\n+ ret_code=0\n+ [[ 0 -eq 0 ]]\n+ break\n+ [[ 0 -ne 0 ]]\n+ (( i=0 ))\n+ (( i<20 ))\n+ kubectl exec -it -n component cassandra-alert-0 -- cqlsh -u root -p d@6lo6kBjK%jllN -e '\n CREATE TABLE IF NOT EXISTS viper_test.static_features(\n index_id uuid,\n seq_id bigint,\n feature_version int,\n creation_time timestamp,\n metadata blob,\n image_id text,\n payload text,\n feature blob,\n PRIMARY KEY (index_id, seq_id),\n );'\nUnable to use a TTY - input is not a terminal or the right kind of file\n<stdin>:1:OperationTimedOut: errors={'10.244.1.8': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=10.244.1.8\ncommand terminated with exit code 2", "stderr_lines": ["+ (( i=0 ))", "+ (( i<20 ))", "+ kubectl exec -it -n component cassandra-alert-0 -- cqlsh -u root -p d@6lo6kBjK%jllN -e 'CREATE KEYSPACE IF NOT EXISTS viper_test WITH replication = {'\\''class'\\'':'\\''SimpleStrategy'\\'', '\\''replication_factor'\\'' : 3};'", "Unable to use a TTY - input is not a terminal or the right kind of file", "+ ret_code=0", "+ [[ 0 -eq 0 ]]", "+ break", "+ [[ 0 -ne 0 ]]", "+ (( i=0 ))", "+ (( i<20 ))", "+ kubectl exec -it -n component cassandra-alert-0 -- cqlsh -u root -p d@6lo6kBjK%jllN -e '", " CREATE TABLE IF NOT EXISTS viper_test.static_feature_dbs(", " db_id uuid,", " object_type text,", " name text,", " feature_version int,", " description text,", " creation_time timestamp,", " indexes map<uuid, text>,", " deleted boolean,", " max_size bigint,", " PRIMARY KEY (db_id),", " );'", "Unable to use a TTY - input is not a terminal or the right kind of file", "+ ret_code=0", "+ [[ 0 -eq 0 ]]", "+ break", "+ [[ 0 -ne 0 ]]", "+ (( i=0 ))", "+ (( i<20 ))", "+ kubectl exec -it -n component cassandra-alert-0 -- cqlsh -u root -p d@6lo6kBjK%jllN -e '", " CREATE TABLE IF NOT EXISTS viper_test.static_features(", " index_id uuid,", " seq_id bigint,", " feature_version int,", " creation_time timestamp,", " metadata blob,", " image_id text,", " payload text,", " feature blob,", " PRIMARY KEY (index_id, seq_id),", " );'", "Unable to use a TTY - input is not a terminal or the right kind of file", "<stdin>:1:OperationTimedOut: errors={'10.244.1.8': 'Client request timeout. See Session.execute[_async](timeout)'}, last_host=10.244.1.8", "command terminated with exit code 2"], "stdout": "", "stdout_lines": []}
remove-services.sh の実行中に PV の削除がフリーズする場合
問題の説明
インストールパッケージには、すべてのデプロイメントサービスを削除する remove-services.sh
スクリプトが用意されています。これにより、デプロイメント全体をテストしてから、もう一度インストールをやり直すことができます。しかし、remove-services.sh
スクリプトを実行すると、pv の削除時にスクリプトがフリーズします。一定時間待機すると、問題は解決します。
コピー $ kubectl -n component delete persistentvolume/local-pv-12bd5454 persistentvolume/local-pv-7d88103a persistentvolume/local-pv-db999675
persistentvolume "local-pv-12bd5454" deleted
persistentvolume "local-pv-7d88103a" deleted
persistentvolume "local-pv-db999675" deleted
問題分析
原因は不明です。Kubernetes でも同様の問題が発生する場合がありますが、実際の原因は分かっていません (https://github.com/kubernetes/kubernetes/issues/69697 )。ただし、この問題を解決するための対応策はあります。
問題の修正手順
別のコンソールを開き、以下のコマンドを実行します。pv のステータスが Terminating
になっていることを確認します。これは、pv が削除を完了できないことを示し、削除スクリプトの処理に影響します。
コピー $ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
local-pv-12bd5454 4793Mi RWO Delete Terminating default/engine-alert-feature-db-oplogs-engine-alert-feature-db-worker-1-0 storageclass-local-afd 39h
local-pv-1ea63c14 14Gi RWO Delete Bound component/localvolume0-minio-default-0 storageclass-local-minio-default 39h
local-pv-21daf7fb 23Gi RWO Delete Available storageclass-local-cassandra-alert 39h
local-pv-483597 14Gi RWO Delete Available storageclass-local-minio-default 39h
...
上記例の場合、 以下のように kubectl edit pv local-pv-12bd5454
の pv を編集します。pv の中にある finalizers
フィールドを探し、値を null
に変更します。保存して終了すると、問題が解決します。元のコンソールのスクリプトは、継続して実行されます。
コピー ...
kind : PersistentVolume
metadata :
creationTimestamp : 2019-10-09T10:11:41Z
deletionGracePeriodSeconds : 0
deletionTimestamp : 2019-10-11T01:03:21Z
finalizers :
- kubernetes.io/pv-protection
name : local-pv-12bd5454
...
変更後
コピー ...
kind : PersistentVolume
metadata :
creationTimestamp : 2019-10-09T10:11:41Z
deletionGracePeriodSeconds : 0
deletionTimestamp : 2019-10-11T01:03:21Z
finalizers : null
name : local-pv-12bd5454
...
(テスト環境にのみ適用) デプロイされたすべてのサービスリソースの削除
デプロイメントのテスト中にデプロイメントのテストを最初からやり直すためには、デプロイされたすべてのリソースを完全に削除してデプロイメント前の状態に戻す必要があるがあります。プロジェクトのインストールパッケージには、これに対応したリソース削除スクリプトが用意されています。このスクリプトでは、互換性の多くが考慮されていません。既存のデプロイメント Ansible をインストールし、実行内容を戻すステップにすぎません。Ansible のデプロイメントコンテンツに変更があった場合、削除スクリプトのコンテンツを同時に変更する必要があります。
mercury/bin/remove-services.sh: すべてのコンポーネント、ライセンスサービス、ローカルボリューム、pv、pvc およびエンジン層とインフラ層のラベルの削除に使用
mercury/bin/remove-volumes.sh: データディスクのデータとパーティション情報の削除に使用
すべてのサービスの削除が必要な場合は、インストールパッケージのディレクトリで以下のコマンドを実行します。ホスト部分は該当する IP で置き換える必要があります。
コピー ssh mercury-work-01 < ./mercury/bin/remove-services.sh
ssh mercury-work-01 < ./mercury/bin/remove-volumes.sh
ssh mercury-work-02 < ./mercury/bin/remove-volumes.sh
...
ssh mercury-work-XX < ./mercury/bin/remove-volumes.sh