Longhorn クラウド ネイティブ コンテナ分散ストレージ - トラブルシューティング ガイド

Longhorn クラウド ネイティブ コンテナ分散ストレージ - トラブルシューティング ガイド

[[429654]]

目次

  1. Longhornボリュームファイルシステムが破損すると、Podは作成状態のままになります。
  2. 非標準の Kubelet ディレクトリ
  3. Longhornのデフォルト設定は保持されない
  4. ボリュームをデタッチしてアタッチした後、定期的なジョブは新しいジョブを作成しません。
  5. Traefik 2.x をイングレス コントローラとして使用する
  6. cURL を使用してサポート バンドルを作成する
  7. Longhorn RWXの共有マウント所有権は消費者向けポッドでは誰も表示されません
  8. ノード上のマルチパスが原因でボリュームの MountVolume.SetUp が失敗する
  9. Longhorn-UI: WebSocket ハンドシェイク中にエラーが発生しました: 予期しない応答コード: 200 #2265
  10. Longhornボリュームのマウントには長い時間がかかります
  11. ボリューム読み取り専用またはI/Oエラー
  12. ボリューム pvc-xxx はスケジュールされていません

1. Longhornボリュームファイルシステムが破損すると、Podは作成状態のままになる

適用可能なバージョン

すべての Longhorn バージョン。

症状

ポッドはコンテナの作成中に停止し、ログにエラーが記録されます。

  1. 警告 FailedMount 30 秒 (63 秒を超える x7)ボリューム"pvc-bb8582d5-eaa4-479a-b4bf-328d1ef1785d"kubelet MountVolume.SetUp が失敗しました: rpc エラー: コード = 内部説明= 'fsck'デバイス /dev/longhorn/pvc-bb8582d5-eaa4-479a-b4bf-328d1ef1785dエラーを検出しましたが、修正できませでした: fsck from util-linux 2.31.1
  2. ext2fs_check_if_mount: /dev/longhorn/pvc-bb8582d5-eaa4-479a-b4bf-328d1ef1785dマウントされているかどうかを判断中に、mtab ファイルが見つからないため、ファイルシステムがマウントされているどう確認できません。
  3. /dev/longhorn/pvc-bb8582d5-eaa4-479a-b4bf-328d1ef1785d にはエラーのあるファイル システムが含まれているため強制的にチェックされます
  4. /dev/longhorn/pvc-bb8582d5-eaa4-479a-b4bf-328d1ef1785d:破損した孤立したリンク リスト一部であった i ノードが見つかりました。
  5.  
  6. /dev/longhorn/pvc-bb8582d5-eaa4-479a-b4bf-328d1ef1785d: 予期しない不整合; fsck を手動で実行します。
  7. (つまり、-aまたは-p オプションなし)

理由

Longhorn ボリュームのファイル システムが破損すると、Longhorn はボリュームを再マウントできなくなります。したがって、ワークロードを再起動することはできません。

Longhorn ではこの問題を自動的に修正することはできません。このような場合は、問題を手動で解決する必要があります。

解決

注意すべき兆候:

  • ボリュームがエラー状態でない場合は、Longhorn ボリューム内のファイル システムが外部的な理由により破損している可能性があります。
    • Longhorn UI からボリュームがエラー状態かどうかを確認します。
    • Longhorn マネージャー ポッド ログでシステム破損エラー メッセージを確認します。
  • 作業負荷を軽減します。
  • UI からボリュームを任意のノードに接続します。
  • ノードに SSH で接続します。
  • /dev/longhorn/ の下にある Longhorn ボリュームに対応するブロック デバイスを見つけます。
  • fsck を実行してファイル システムを修復します。
  • ボリュームを UI から切り離します。
  • 作業負荷を拡大します。

2. 非標準の Kubelet ディレクトリ

適用可能なバージョン

すべての Longhorn バージョン。

症状

Kubernetes クラスターが非標準の Kubelet ディレクトリを使用すると、longhorn-csi-plugin は起動に失敗します。

  1. ip-172-30-0-73:/home/ec2-ユーザー# kubectl -n longhorn-system ポッドを取得します
  2. 名前準備完了 ステータス 再起動 年齢
  3. longhorn-ui-5b864949c4-4sgws 1/1 実行中 0 7分35秒
  4. longhorn-manager-tx469 1/1 実行中 0 7分35秒
  5. longhorn-driver-deployer-5444f75b8f-kgq5v 1/1 実行中 0 7分35秒
  6. longhorn-csi-plugin-s4fg7 0/2 コンテナ作成 0 6分59秒
  7. instance-manager-r-d185a1e9 1/1 実行中 0 7分10秒
  8. instance-manager-e-b5e69e2d 1/1 実行中 0 7分10秒
  9. csi-attacher-7d975797bc-qpfrv 1/1 実行中 0 7m
  10. csi-snapshotter-7dbfc7ddc6-nqqtg 1/1 実行中 0 6分59秒
  11. csi-attacher-7d975797bc-td6tw 1/1 実行中 0 7m
  12. csi-resizer-868d779475-v6jvv 1/1 実行中 0 7 メートル
  13. csi-resizer-868d779475-2bbs2 1/1 実行中 0 7m
  14. csi-provisioner-5c6845945f-46qnb 1/1 実行中 0 7 メートル
  15. csi-resizer-868d779475-n5vjn 1/1 実行中 0 7分
  16. csi-provisioner-5c6845945f-fjnrq 1/1 実行中 0 7 メートル
  17. csi-snapshotter-7dbfc7ddc6-mhfpl 1/1 実行中 0 6分59秒
  18. csi-provisioner-5c6845945f-4lx5c 1/1 実行中 0 7 メートル
  19. csi-attacher-7d975797bc-flldq 1/1 実行中 0 7m
  20. csi-snapshotter-7dbfc7ddc6-cms2v 1/1 実行中 0 6分59秒
  21. engine-image-ei-611d1496-dlqcs 1/1 実行中 0 7分10秒

理由

Longhorn は Kubelet のルート ディレクトリが設定されている場所を検出できないためです。

解決

Longhorn は longhorn.yaml 経由でインストールされます:

コメントを外して編集:

  1. #-名前: KUBELET_ROOT_DIR
  2. # 値: /var/lib/rancher/k3s/agent/kubelet

Longhorn は Rancher - アプリ経由でインストールされます:

  • Kubeletのルートディレクトリを設定するには、デフォルト設定のカスタマイズをクリックします。
  • 関連情報
  • Longhorn の問題:

https://github.com/longhorn/longhorn/issues/2537

詳細については、OS/ディストリビューション固有の構成のトラブルシューティング セクションを参照してください。

3. Longhornのデフォルト設定は保持されない

適用可能なバージョン

すべての Longhorn バージョン。

症状

  • Helm または Rancher アプリを介して Longhorn システムをアップグレードする場合、変更された Longhorn のデフォルトは保持されません。
  • kubectl -n longhorn-system edit configmap longhorn-default-setting を使用してデフォルト設定を変更しても、その変更は Longhorn システムに適用されません。

背景

このデフォルト設定は、まだ展開されていない Longhorn システムにのみ適用されます。既存の Longhorn システムには影響はありません。

解決

既存のクラスターの Longhorn 設定を変更するには、Longhorn UI を使用することをお勧めします。

kubectl を使用することもできますが、これにより Longhorn バックエンドの認証がバイパスされることに注意してください。

kubectl 設定の編集-n ロングホーンシステム

4. ボリュームをデタッチしてアタッチした後、定期的なジョブは新しいジョブを作成しません。

適用可能なバージョン

すべての Longhorn バージョン。

症状

ボリュームが長期間切断された後に接続されると、繰り返しジョブは新しいジョブを作成しません。

Kubernetes CronJob の制限によると:

  • https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#cron-job-limitations
  1. 各 CronJob について、CronJob コントローラは、最後にスケジュールされた時刻から現在までの期間に、実行されなかったスケジュールの数を確認します。 100件を超えるスケジュールが未達の場合、ジョブは開始されず、エラーが記録されます。
  2.  
  3. ジョブを開始する必要があるかどうかを判断できません。開始時間の遅れが多すぎます(> 100)。セット または.spec.startingDeadlineSecondsを減らす クロックスキューをチェックします

たとえば、定期的なバックアップ ジョブが 1 分ごとに実行されるように設定されている場合、許容範囲は 100 分になります。

解決

スタックした cronjob を削除し、Longhorn で再作成するだけです。

  1. ip-172-30-0-211:/home/ec2-ユーザー# kubectl -n longhorn-system は cronjobs を取得します
  2. 名前スケジュール 一時停止 アクティブ最終スケジュール 年齢
  3. pvc-394e6006-9c34-47da-bf27-2286ae669be1-c-ptl8l1-c * * * * *誤り1 47秒 2分23秒
  4.  
  5. ip-172-30-0-211:/home/ec2-ユーザー# kubectl -n longhorn-system削除cronjobs/pvc-394e6006-9c34-47da-bf27-2286ae669be1-c-ptl8l1-c
  6. cronjob.batch 「pvc-394e6006-9c34-47da-bf27-2286ae669be1-c-ptl8l1-c」が削除されました
  7.  
  8. ip-172-30-0-211:/home/ec2-ユーザー# kubectl -n longhorn-system は cronjobs を取得します
  9. longhorn-system 名前空間リソースが見つかりません
  10.  
  11. ip-172-30-0-211:/home/ec2-ユーザー# スリープ 60
  12.  
  13. ip-172-30-0-211:/home/ec2-ユーザー# kubectl -n longhorn-system は cronjobs を取得します
  14. 名前スケジュール 一時停止 アクティブ最終スケジュール 年齢
  15. pvc-394e6006-9c34-47da-bf27-2286ae669be1-c-ptl8l1-c * * * * *誤り1 2秒 3分21秒

関連情報

  • 関連する Longhorn の問題:
    • https://github.com/longhorn/longhorn/issues/2513

5. Traefik 2.xをイングレスコントローラとして使用する

適用可能なバージョン

すべての Longhorn バージョン。

症状

Longhorn GUI フロントエンド API リクエストが longhorn-manager バックエンドに到達できないことがあります。

理由

API リクエストにより HTTPS/WSS 間のプロトコルが変更され、この変更によって CORS の問題が発生する可能性があります。

解決

Traefik 2.x イングレス コントローラーは WebSocket ヘッダーを設定しません。

1. Longhorn フロントエンド サービスのルートに次のミドルウェアを追加します。

  1. apiバージョン: traefik.containo.us/v1alpha1
  2. 種類: ミドルウェア
  3. メタデータ:
  4. 名前: svc-longhorn-headers
  5. 名前空間: longhorn-system
  6. 仕様:
  7. ヘッダー:
  8. カスタムリクエストヘッダー:
  9. X-Forwarded-Proto: "https"  

2. ミドルウェア ルールを使用するように Ingress を更新します。

  1. APIバージョン: networking.k8s.io/v1beta1
  2. 種類: イングレス
  3. メタデータ:
  4. 名前: longhorn-ingress
  5. 名前空間: longhorn-system
  6. 注釈:
  7. traefik.ingress.kubernetes.io/router.entrypoints: ウェブセキュア
  8. traefik.ingress.kubernetes.io/router.tls: "true"         
  9. traefik.ingress.kubernetes.io/router.middlewares: longhorn-system-svc-longhorn-headers@kubernetescrd
  10. 仕様:
  11. ルール:
  12. - http:
  13. パス:
  14. - パス:​​ /
  15. バックエンド:
  16. サービス名: longhorn-frontend
  17. サービスポート: 80

関連情報

  • Longhorn の問題に関するコメント:
    • https://github.com/longhorn/longhorn/issues/1442#issuecomment-639761799

6. cURLを使用してサポートバンドルを作成する

適用可能なバージョン

すべての Longhorn バージョン。

症状

Web ブラウザを使用してサポート バンドルを作成することはできません。

解決

Longhorn バックエンド サービスを公開します。以下は NodePort を使用した例です。ロード バランサーが設定されている場合は、ロード バランサーを介して公開することもできます。

  1. ip-172-30-0-21:~ # kubectl -n longhorn-system patch svc longhorn-backend -p '{"spec": {"type":"NodePort"}}'  
  2. service/longhorn-backend にパッチを適用
  3. ip-172-30-0-21:~ # kubectl -n longhorn-system は svc/longhorn-backend を取得します
  4. 名前タイプ クラスター IP 外部 IP ポート 年齢
  5. longhorn-backend NodePort 10.43.136.157 <なし> 9500:32595/TCP 156m

次のスクリプトを実行して、サポート バンドルを作成してダウンロードします。 BACKEND_URL、ISSUE_URL、ISSUE_DESCRIPTION を置き換える必要があります。

  1. #このブロックを置き換えます====>
  2. BACKEND_URL = "18.141.237.97:32595"  
  3.  
  4. ISSUE_URL = "https://github.com/longhorn/longhorn/issues/dummy"  
  5. ISSUE_DESCRIPTION= "ダミーの説明"  
  6. # <====このブロックを置き換える
  7.  
  8. #リクエスト サポートバンドルを作成する
  9. REQUEST_SUPPORT_BUNDLE=$( curl -sSX POST -H 'Content-Type: application/json' -d '{ "issueURL": "' "${ISSUE_URL} "'" , "description" : "'" ${ISSUE_DESCRIPTION} "'" }' http://${BACKEND_URL}/v1/supportbundles )
  10.  
  11. ID=$( jq -r '.id' <<< ${REQUEST_SUPPORT_BUNDLE} )
  12. SUPPORT_BUNDLE_NAME=$( jq -r '.name' <<< ${REQUEST_SUPPORT_BUNDLE} )
  13. echo "ノード ${ID} にサポート バンドル ${SUPPORT_BUNDLE_NAME} を作成しています"  
  14.  
  15. [ $(curl -sSX GET http://${BACKEND_URL}/v1/supportbundles/${ID}/${SUPPORT_BUNDLE_NAME} | jq -r '.state' ) != "ReadyForDownload" ];する
  16. echo "進行状況: $(curl -sSX GET http://${BACKEND_URL}/v1/supportbundles/${ID}/${SUPPORT_BUNDLE_NAME} | jq -r '.progressPercentage' )%"  
  17. 1秒寝る
  18. 終わり
  19.  
  20. curl -i -X ​​GET http://${BACKEND_URL}/v1/supportbundles/${ID}/${SUPPORT_BUNDLE_NAME}/download --output /tmp/${SUPPORT_BUNDLE_NAME}.zip  
  21. echo "サポートバンドルを /tmp/${SUPPORT_BUNDLE_NAME}.zip にダウンロードしました"  

関連情報

  • 関連する Longhorn コメント:
    • https://github.com/longhorn/longhorn/issues/2118#issuecomment-748099002

7. Longhorn RWXの共有マウント所有権は、消費者向けポッドでは誰も表示されません

適用可能なバージョン

Longhorn バージョン = v1.1.0

症状

RWX ボリュームを使用して Pod がマウントされると、Pod の共有マウント ディレクトリとその繰り返しコンテンツのすべての所有権は nobody として表示されますが、共有マネージャーでは root として表示されます。

  1. root@ip-172-30-0-139:/home/ubuntu# kubectl exec -it rwx-test-2pml2 -- ls -l /data  
  2. 合計 16
  3. drwx ------ 2 誰もいない 42949672 16384 3月31日 04:16 lost+found  
  4.  
  5. root@ip-172-30-0-139:~# kubectl -n longhorn-system exec -it share-manager-pvc-f3775852-1e27-423f-96ab-95ccd04e4777 -- ls -l /export/pvc-f3775852-1e27-423f-96ab-95ccd04e4777  
  6. 合計 16
  7. drwx ------ 2 ルート ルート 16384 3月 31 04:42 lost+found  

背景

share-manager の nfs-ganesha は、NFSv4 ID マッピングに idmapd を使用し、エクスポート ドメインとして localdomain を使用するように設定されています。

理由

所有権の変更は、クライアント (ホスト) とサーバー (共有マネージャー) 間の /etc/idmapd.conf の内容が一致しないために発生します。

例を見てみましょう:

クラスター ホスト上の /etc/idmapd.conf を変更していないことを前提としています。一部のオペレーティング システムでは、Domain = localdomain がコメント アウトされており、デフォルトではホスト名を除いた FQDN が使用されます。

ホスト名が ip-172-30-0-139 で、FQDN が ip-172-30-0-139.lan の場合、ホスト idmapd はドメインとして lan を使用します。

  1. root@ip-172-30-0-139:/home/ubuntu# ホスト名
  2. ip-172-30-0-139
  3.  
  4. root@ip-172-30-0-139:/home/ubuntu# ホスト名 -f
  5. ip-172-30-0-139.lan

この結果、共有マネージャー (localdomain) とクラスター ホスト (lan) の間でドメインの不一致が発生しました。これにより、ファイルの権限が nobody を使用するように変更されます。

  1. [マッピング]セクション変数
  2.  
  3. 誰も-ユーザー 
  4. 地元 ユーザー 名前 マッピングを完了できない場合に使用します
  5. 誰もいないグループ 
  6. 地元 グループ 名前 マッピングを完了できない場合に使用します

解決

1. すべてのクラスター ホストの /etc/idmapd.conf で、Domain = localdomain のコメントを解除するか追加します。

  1. root@ip-172-30-0-139:~# cat /etc/idmapd.conf
  2. [一般的な]
  3.  
  4. 冗長性 = 0
  5. Pipefs ディレクトリ = /run/rpc_pipefs
  6. # FQDNからホスト名を除いたドメインと異なる場合は、ここで独自のドメインを設定します
  7. ドメイン = ローカルドメイン
  8.  
  9. [マッピング]
  10.  
  11. 誰も-ユーザー= 誰も
  12. 誰もいないグループ= nogroup

2. RWX リソース スタック (pvc + pod) を削除して再作成します。

  1. root@ip-172-30-0-139:/home/ubuntu# kubectl exec -it ボリュームテスト-- ls -l /data  
  2. 合計 16
  3. drwx ------ 2 ルート ルート 16384 3月 31 04:42 lost+found  

関連情報

  • 関連する Longhorn の問題:
    • https://github.com/longhorn/longhorn/issues/2357
  • 関連する idmapd.conf ファイル:
    • https://linux.die.net/man/5/idmapd.conf

8. ノード上のマルチパスが原因でボリュームの MountVolume.SetUp が失敗する

適用可能なバージョン

すべての Longhorn バージョン。

症状

ボリュームを持つポッドが起動せず、longhorn-csi-plugin で次のエラー メッセージが表示されます。

  1. 時刻= "2020-04-16T08:49:27Z"  レベル=info msg= "GRPC リクエスト: {\"target_path\":\"/var/lib/kubelet/pods/cf0a0b5b-106e-4793-a74a-28bfae21be1a/volumes/kubernetes.io~csi/pvc-d061512e-870a-4ece-bd45 -2f04672d5256/mount\",\"volume_capability\":{\"AccessType\":{\"Mount\":{\"fs_type\":\"ext4\"}},\"access_mode\":{\"mode\":1}},\"volu me_context\":{\"baseImage\":\"\",\"fromBackup\":\"\",\"numberOfReplicas\":\"3\",\"staleReplicaTimeout\":\"30\",\"storage.kubernetes .io/csiProvisionerIdentity\":\"1586958032802-8081-driver.longhorn.io\"},\"volume_id\":\"pvc-d061512e-870a-4ece-bd45-2f04672d5256\"}"  
  2. 時刻= "2020-04-16T08:49:27Z"   level =info msg= "NodeServer NodePublishVolume が必要です: volume_id:\"pvc-d061512e-870a-4ece-bd45-2f04672d5256\" target_path:\"/var/lib/kubelet/pods/cf0a0b5b-106e-4793-a74a-28bfae21be1a/volumes/kubernetes.io~csi/pvc-d061512e-870a-4ece-bd45-2f04672d5256/mount\" volume_capability:<mount:<fs_type:\"ext4\" > access_mode:<mode:SINGLE_NODE_WRITER > > volume_context:<key:\"baseImage\" value:\"\" > volume_context:<key:\"fromBackup\" value:\"\" > volume_context:<key:\"numberOfReplicas\" value:\"3\" > volume_context:<key:\"staleReplicaTimeout\" value:\"30\" > volume_context:<key:\"storage.kubernetes.io/csiProvisionerIdentity\" value:\"1586958032802-8081-driver.longhorn.io\" > "  
  3. E0416 08:49:27.567704 1 mount_linux.go:143] マウントに失敗しました: 終了ステータス 32
  4. マウントコマンド: mount
  5. マウント引数: -t ext4 -o defaults /dev/longhorn/pvc-d061512e-870a-4ece-bd45-2f04672d5256 /var/lib/kubelet/pods/cf0a0b5b-106e-4793-a74a-28bfae21be1a/volumes/kubernetes.io~csi/pvc-d061512e-870a-4ece-bd45-2f04672d5256/mount
  6. 出力: mount: /var/lib/kubelet/pods/cf0a0b5b-106e-4793-a74a-28bfae21be1a/volumes/kubernetes.io~csi/pvc-d061512e-870a-4ece-bd45-2f04672d5256/mount: /dev/longhorn/pvc-d061512e-870a-4ece-bd45-2f04672d5256 は既にマウントされているか、マウント ポイントがビジーです。
  7. E0416 08:49:27.576477 1 mount_linux.go:487]ディスク「/dev/longhorn/pvc-d061512e-870a-4ece-bd45-2f04672d5256」フォーマットに失敗しました: タイプ:( 「ext4」 ) ターゲット:( 「/var/lib/kubelet/pods/cf0a0b5b-106e-4793-a74a-28bfae21be1a/volumes/kubernetes.io~csi/pvc-d061512e-870a-4ece-bd45-2f04672d5256/mount」 ) オプション:([ 「defaults」 ])エラー:(終了ステータス 1)
  8. 時刻= "2020-04-16T08:49:27Z"  レベル=エラー メッセージ = "GRPC エラー: rpc エラー: コード = 内部説明 = 終了ステータス 1"  

詳細

これは、明示的にブラックリストに登録されていないすべての Longhorn ボリューム デバイスを含む、適格なデバイス パスに対してマルチパスがマルチパス デバイスを作成するためです。

トラブルシューティング

1. Longhorn デバイスのメジャー:マイナー番号を見つけます。ノード上で、ls -l /dev/longhorn/ を試してください。メジャー:マイナー番号はデバイス名の前に表示されます (例: 8、32)。

  1. ls -l /dev/longhorn
  2. brw-rw ---- 1 ルート ルート 8、32 8月 10 21:50 pvc-39c0db31-628d-41d0-b05a-4568ec02e487  

2. 同じメジャー番号とマイナー番号に対して Linux が生成するデバイスを見つけます。 ls -l /dev を使用して、同じメジャー:マイナー番号を持つデバイス (例: /dev/sde) を見つけます。

  1. brw-rw ---- 1 ルートディスク 8、32 8月 10 21:50 sdc  

プロセスを見つけます。 lsof を使用して使用中のファイル ハンドラーのリストを取得し、デバイス名 (例: sde または /dev/longhorn/xxx) を grep で検索します。そこにデバイス名が見つかるはずです。

  1. lsof | grep sdc
  2. マルチパス 514292 ルート 8r BLK 8,32 0t0 534 /dev/sdc
  3. マルチパス 514292 514297 マルチパス ルート 8r BLK 8,32 0t0 534 /dev/sdc
  4. マルチパス 514292 514299 マルチパス ルート 8r BLK 8,32 0t0 534 /dev/sdc
  5. マルチパス 514292 514300 マルチパス ルート 8r BLK 8,32 0t0 534 /dev/sdc
  6. マルチパス 514292 514301 マルチパス ルート 8r BLK 8,32 0t0 534 /dev/sdc
  7. マルチパス 514292 514302 マルチパス ルート 8r BLK 8,32 0t0 534 /dev/sdc
  8. マルチパス 514292 514304 マルチパス ルート 8r BLK

解決

マルチパス デーモンが Longhorn によって作成された追加のブロック デバイスを追加しないようにするには、次の手順に従ってください。

まず、lsblk を使用して、Longhorn によって作成されたデバイスを確認します。

  1. ルート@localhost:~# lsblk
  2. 名前MAJ:最小RMサイズRO タイプ マウントポイント
  3. sda 8:0 0 79.5G 0 ディスク /
  4. sdb 8:16 0 512M 0 ディスク [SWAP]
  5. sdc 8:32 0 1G 0 ディスク /var/lib/kubelet/pods/c2c2b848-1f40-4727-8a52-03a74f9c76b9/volumes/kubernetes.io~csi/pvc-859bc3c9-faa8-4f54-85e4-b12935b5ae3c/マウント
  6. sdd 8:48 0 1G 0 ディスク /var/lib/kubelet/pods/063a181a-66ac-4644-8268-9215305f9b73/volumes/kubernetes.io~csi/pvc-837eb6ac-45fe-4de7-9c97-8d371eb02190/マウント
  7. sde 8:64 0 1G 0 ディスク /var/lib/kubelet/pods/4c80842d-7257-4b91-b668-bb5b111da003/volumes/kubernetes.io~csi/pvc-c01cee3e-f292-4979-b183-6546d6397fbd/マウント
  8. sdf 8:80 0 1G 0 ディスク /var/lib/kubelet/pods/052dadd9-042a-451c-9bb1-2d9418f0381f/volumes/kubernetes.io~csi/pvc-ba7a5c9a-d84d-4cb0-959d-3db39f34d81b/マウント
  9. sdg 8:96 0 1G 0 ディスク /var/lib/kubelet/pods/7399b073-c262-4963-8c7f-9e481272ea36/volumes/kubernetes.io~csi/pvc-2b122b42-141a-4181-b8fd-ce3cf91f6a64/マウント
  10. sdh 8:112 0 1G 0 ディスク /var/lib/kubelet/pods/a63d919d-201b-4eb1-9d84-6440926211a9/volumes/kubernetes.io~csi/pvc-b7731785-8364-42a8-9e7d-7516801ab7e0/マウント
  11. sdi 8:128 0 1G 0 ディスク /var/lib/kubelet/pods/3e056ee4-bab4-4230-9054-ab214bdf711f/volumes/kubernetes.io~csi/pvc-89d37a02-8480-4317-b0f1-f17b2a886d1d/マウント

Longhornのデバイス名は/dev/sd[x]で始まることに注意してください。

  • デフォルトの設定ファイル /etc/multipath.conf が存在しない場合は作成します。
  • ブラックリストセクション devnode "^sd[a-z0-9]+" に次の行を追加します。
  1. ブラックリスト {
  2. devnode "^sd[a-z0-9]+"  
  3. }
  • マルチパスサービスを再起動する
  1. systemctl で multipathd.service を再起動します。
  • 設定が適用されていることを確認する
  1. マルチパス -t

マルチパス ブラックリスト セクションのデフォルト設定では、次のデバイス名がデフォルトでブロックされます ^(ram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9] ^(td|hd|vd)[az]

関連情報

  • 関連する Longhorn の問題:
    • https://github.com/longhorn/longhorn/issues/1210
  • 関連マニュアル
    • http://manpages.org/multipathconf/5

9. Longhorn-UI: WebSocket ハンドシェイク中にエラーが発生しました: 予期しない応答コード: 200 #2265

適用可能なバージョン

既存の Longhorn バージョン < v1.1.0 は Longhorn >= v1.1.0 にアップグレードされます。

症状

Longhorn をバージョン >= v1.1.0 にアップグレードすると、次の状況が発生します。

エントリーメッセージ:

  1. { "level" : "error" "msg" : "vulcand/oxy/forward/websocket: \"10.17.1.246\" へのダイヤル中にエラーが発生しました: websocket: 応答: 200 200 OK とのハンドシェイクが不正です" "time" : "2021-03-09T08:29:03Z" }

Longhorn UI メッセージ:

  1. 10.46.0.3 - - [2021年2月19日:11:33:24 +0000] "GET /node/v1/ws/1s/engineimages HTTP/1.1" 200 578 "-"   「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68」  
  2. 10.46.0.3 - - [2021年2月19日:11:33:29 +0000] 「GET /node/v1/ws/1s/volumes HTTP/1.1」 200 578 「-」   「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68」  
  3. 10.46.0.3 - - [2021年2月19日:11:33:32 +0000] 「GET /node/v1/ws/1s/nodes HTTP/1.1」 200 578 「-」   「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68」  
  4. 10.46.0.3 - - [2021年2月19日:11:33:37 +0000] 「GET /node/v1/ws/1s/events HTTP/1.1」 200 578 「-」   「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68」  
  5. 10.46.0.3 - - [2021年2月19日:11:33:38 +0000] "GET /node/v1/ws/1s/engineimages HTTP/1.1" 200 578 "-"   「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68」  
  6. 10.46.0.3 - - [2021年2月19日:11:33:41 +0000] "GET /node/v1/ws/1s/volumes HTTP/1.1" 200 578 "-"   「Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/88.0.4324.150 Safari/537.36 Edg/88.0.705.68」  

理由

さまざまなルーター (Rancher-Proxy、NodePort、Ingress、Nginx) をサポートするために、Longhorn v1.1.0 では、次の 2 つの理由からハッシュ履歴を使用するように UI を再構築しました。

  • 異なるパスへの Longhorn UI ルーティングをサポートします。たとえば、/longhorn/#/dashboard
  • フロントエンドとバックエンドを分離することで、シングルページ アプリケーションをサポートします。

結果、 /変更する/#/

その後、出力メッセージは次のようになります。

Ingress メッセージには Websocket エラーが含まれてはなりません。

  1. 時刻= "2021-03-16T04:54:23Z"  レベル=debug メッセージ = "websocket: open" id = 6809628160892941023 タイプ = events
  2. 時刻= "2021-03-16T04:54:23Z"  レベル=debug メッセージ = "websocket: オープン" id = 3234910863291903636 タイプ = engineimages
  3. 時刻= "2021-03-16T04:54:23Z"  レベル=debug メッセージ = "websocket: open" id=2117763315178050120 タイプ = backingimages
  4. 時刻= "2021-03-16T04:54:23Z"  レベル=debug メッセージ = "websocket: open" id = 621105775322000457 タイプ = ボリューム

Longhorn UI メッセージ:

Ingress の使用:

  1. 10.42.0.8 - - [2021年3月16日:04:54:34 +0000] 「GET /v1/nodes HTTP/1.1」 200 6729 「http://10.17.0.169/」   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  2. 10.42.0.8 - - [2021年3月16日:04:54:34 +0000] "GET /v1/backingimages HTTP/1.1" 200 117 "http://10.17.0.169/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  3. 10.42.0.8 - - [16/Mar/2021:04:54:34 +0000] "GET /v1/volumes HTTP/1.1" 200 162 "http://10.17.0.169/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  4. 10.42.0.8 - - [2021年3月16日:04:54:34 +0000] 「GET /v1/engineimages HTTP/1.1」 200 1065 「http://10.17.0.169/」   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  5. 10.42.0.8 - - [2021年3月16日:04:54:34 +0000] 「GET /v1/settings HTTP/1.1」 200 30761 「http://10.17.0.169/」   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  6. 10.42.0.8 - - [2021年3月16日:04:54:34 +0000] 「GET /v1/events HTTP/1.1」 200 62750 「http://10.17.0.169/」   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  

プロキシの使用:

  1. 10.42.0.0 - - [16/Mar/2021:05:03:51 +0000] "GET /v1/engineimages HTTP/1.1" 200 1070 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  2. 10.42.0.0 - - [16/Mar/2021:05:03:51 +0000] "GET /v1/events HTTP/1.1" 200 62904 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  3. 10.42.0.0 - - [16/Mar/2021:05:03:52 +0000] "GET /v1/engineimages HTTP/1.1" 200 1071 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  4. 10.42.0.0 - - [16/Mar/2021:05:03:52 +0000] "GET /v1/nodes HTTP/1.1" 200 6756 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  5. 10.42.0.0 - - [16/Mar/2021:05:03:52 +0000] "GET /v1/settings HTTP/1.1" 200 30882 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  6. 10.42.0.0 - - [16/Mar/2021:05:03:52 +0000] "GET /v1/volumes HTTP/1.1" 200 168 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  7. 10.42.0.0 - - [16/Mar/2021:05:03:52 +0000] "GET /v1/backingimages HTTP/1.1" 200 120 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  
  8. 10.42.0.0 - - [16/Mar/2021:05:03:52 +0000] "GET /v1/events HTTP/1.1" 200 62900 "http://localhost:8001/api/v1/namespaces/longhorn-system/services/http:longhorn-frontend:80/proxy/"   「Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/89.0.4389.90 Safari/537.36」  

解決

  1. ブラウザのキャッシュをクリアしてください。
  2. から/# Longhorn URL にアクセス/再度ブックマークします。

関連情報

  • 関連する Longhorn の問題:
    • https://github.com/longhorn/longhorn/issues/2265
    • https://github.com/longhorn/longhorn/issues/1660

10. Longhornボリュームのマウントに時間がかかる

適用可能なバージョン

すべての Longhorn バージョン。

症状

Longhorn ボリュームを使用するワークロード ポッドを起動すると、Longhorn UI には Longhorn ボリュームがすぐに接続されることが表示されますが、ボリュームがマウントされてワークロードが開始できるようになるまでに長い時間がかかります。

この問題は、Longhorn ボリュームに多数のファイル/ディレクトリがあり、ワークロード ポッドで securityContext.fsGroup が次のように設定されている場合にのみ発生します。

  1. 仕様:
  2. セキュリティコンテキスト:
  3. 実行ユーザー: 1000
  4. 実行グループ: 3000
  5. fsグループ: 2000

理由

デフォルトでは、fsGroup フィールドが検出されると、Kubernetes はボリュームがマウントされるたびに、ボリューム内のすべてのファイルとディレクトリに対して chown() と chmod() を再帰的に呼び出します。これは、ボリュームのグループ所有権が要求された fsGroup とすでに一致している場合でも発生し、多数の小さなファイルを含む大規模なボリュームでは非常にコストが高くなり、ポッドの起動に長い時間がかかる原因になります。

解決

Kubernetes v1.19.x 以前ではこの問題を回避する方法はありません。

バージョン 1.20.x 以降、Kubernetes では新しいベータ機能である fsGroupChangePolicy フィールドが導入されました。今すぐ、

  1. 仕様:
  2. セキュリティコンテキスト:
  3. 実行ユーザー: 1000
  4. 実行グループ: 3000
  5. fsグループ: 2000
  6. fsGroupChangePolicy: "OnRootMismatch"  

fsGroupChangePolicy が OnRootMismatch に設定されている場合、ボリュームのルートに既に正しいアクセス許可がある場合は、再帰的なアクセス許可と所有権の変更はスキップされます。つまり、ユーザーがポッドの起動間で pod.spec.securityContext.fsGroup を変更しない場合、K8s はルート ディレクトリの権限と所有権を確認するだけで済み、ボリュームの所有権と権限を常に再帰的に変更するよりもマウント プロセスがはるかに高速になります。

関連情報

  • 関連する Longhorn の問題:
    • https://github.com/longhorn/longhorn/issues/2131
  • 関連する Kubernetes ドキュメント:
    • https://kubernetes.io/blog/2020/12/14/kubernetes-release-1.20-fsgroupchangepolicy-fsgrouppolicy/#allow-users-to-skip-recursive-permission-changes-on-mount

11. ボリューム読み取り専用またはI/Oエラー

適用可能なバージョン

すべての Longhorn バージョン。

症状

アプリケーションが既存のファイルにデータを書き込むか、Longhorn ボリュームのマウント ポイントにファイルを作成すると、次のメッセージが表示されます。

  1. / # CDデータ
  2. /data # エコーテスト > テスト
  3. sh: テストを作成できません: I/O エラー

関連するポッドまたはノード ホストで dmesg を実行すると、次のメッセージが表示されます。

  1. [1586907.286218] EXT4-fs (sdc):順序付きデータ モードマウントされたファイル システム。オプション: ( null )
  2. [1587396.152106] EXT4-fs 警告 (デバイス sdc): ext4_end_bio:323: I/O エラー 10 、inode 12への書き込み (オフセット 0、サイズ4096、開始ブロック 33026)
  3. [1587403.789877] EXT4-fs エラー (デバイス sdc): ext4_find_entry:1455: inode #2: comm sh: ディレクトリ lblock 0 を読み取り中
  4. [1587404.353594] EXT4-fs 警告 (デバイス sdc): htree_dirblock_to_tree:994: inode #2: lblock 0: comm ls: エラー -5 ディレクトリ ブロックの読み取り
  5. [1587404.353598] EXT4-fs エラー (デバイス sdc): ext4_journal_check_start:61: 中止されたジャーナルが検出されました
  6. [1587404.355087] EXT4-fs (sdc): ファイルシステムを読み取り専用マウントしています 
  7. ......

`kubectl -n longhorn-system get event | を使用してイベントを確認する場合grep を実行すると、次のイベントが表示されます。

kubectl -n longhorn-system get event を使用します |グレップイベントを確認すると、次のイベントが表示されます。

  1. 2 分 26 秒 警告 デタッチド 予期せず volume/pvc-342edde0-d3f4-47c6-abf6-bf8eeda3c32cボリューム pvc-342edde0-d3f4-47c6-abf6-bf8eeda3c32cエンジンが予期せず停止しました。ボリュームを再接続してください

kubectl -n longhorn-system logsを実行すると|グレップワークロードが実行されているノード上の Longhorn マネージャー ポッドのログを確認すると、次のメッセージが表示されます。

  1. 時刻= "2021-01-05T11:20:46Z"  レベル=debug msg= "インスタンス ハンドラーがインスタンス pvc-342edde0-d3f4-47c6-abf6-bf8eeda3c32c-e-0fe2dac3 状態を更新しました。古い状態は実行中、新しい状態はエラーです"  
  2. 時刻= "2021-01-05T11:20:46Z"  レベル=警告メッセージ= 「インスタンス pvc-342edde0-d3f4-47c6-abf6-bf8eeda3c32c-e-0fe2dac3 がインスタンス マネージャー instance-manager-e-a1fd54e4 の shuo-cluster-0-worker-3 でクラッシュしました。ログを取得してください」  
  3. ......
  4. 時刻= "2021-01-05T11:20:46Z"  レベル=警告 メッセージ= 「ボリュームのエンジンが予期せず停止しました。ボリュームを再接続してください」 accessMode=rwo コントローラー=longhorn-volume フロントエンド=blockdev ノード=shuo-cluster-0-worker-3 所有者=shuo-cluster-0-worker-3 状態=接続済み ボリューム=pvc-342edde0-d3f4-47c6-abf6-bf8eeda3c32c
  5. ......
  6. 時刻= "2021-01-05T11:20:46Z"   level =info msg= "Event(v1.ObjectReference{Kind:\"Volume\", Namespace:\"longhorn-system\", Name:\"pvc-342edde0-d3f4-47c6-abf6-bf8eeda3c32c\", UID:\"69bb0f94-da48-4d15-b861-add435f25d00\", APIVersion:\"longhorn.io/v1beta1\", ResourceVersion:\"7466467\", FieldPath:\"\"}): type: 'Warning' reason: 'DetachedUnexpectly' ボリューム pvc-342edde0-d3f4-47c6-abf6-bf8eeda3c32c のエンジンが予期せず停止しました。ボリュームを再接続してください"  

失敗の原因

Longhorn ボリュームが予期せずクラッシュすると、Longhorn ボリュームのマウント ポイントが無効になります。そうすると、Longhorn ボリューム内のデータはマウント ポイント経由で読み書きできなくなります。

根本的な原因

エンジンのクラッシュは通常、各レプリカへの接続が失われることによって発生します。これが起こる理由としては、次のようなことが考えられます。

1. ノード上の CPU 使用率が高すぎます。 Longhorn エンジンに要求を処理するのに十分な CPU リソースがない場合、要求がタイムアウトし、レプリカへの接続が失われる可能性があります。 Longhorn インスタンス マネージャー Pod に適切な量の CPU リソースを予約する方法については、次のドキュメントを参照してください。

https://longhorn.io/docs/1.1.0/best-practices/#guaranteed-engine-cpu

2. ネットワーク帯域幅が不十分です。通常、1Gbps ネットワークでは、すべてのボリュームで負荷の高いワークロードが実行されている場合、3 つのボリュームしか処理できません。

3. ネットワークの遅延が比較的大きい。ノード上で同時に複数のボリュームの読み取り/書き込みが行われる場合、レイテンシが 20 ミリ秒未満になるようにするのが最適です。

4. ネットワークの中断。すべてのレプリカが切断され、エンジンがクラッシュする可能性があります。

5. ディスクのパフォーマンスが低すぎるため、要求を時間内に完了できません。 Longhorn システムでは、IOPS の低いディスク (回転ディスクなど) の使用はお勧めしません。

自動回復

v1.1.0 より前の Longhorn バージョンでは、Longhorn はボリュームを自動的に再マウントしようとしますが、処理できるシナリオには制限があります。

Longhorn v1.1.0 以降では、新しい設定「ボリュームが予期せず切断された場合にワークロード ポッドを自動的に削除する」が導入され、Longhorn はコントローラー (デプロイメント、ステートフル セット、デーモン セットなど) によって管理されるワークロード ポッドを自動的に削除するようになりました。

手動回復

ワークロードが単純なポッドの場合は、ポッドを削除して再デプロイできます。再利用ポリシーが「保持」でない場合は、関連する PVC または PV が削除されていないことを確認してください。そうでない場合、関連付けられている PVC/PV が消えると Longhorn ボリュームは削除されます。

ワークロード ポッドが Deployment/StatefulSet に属している場合は、ワークロード レプリカをスケールダウンしてからスケールアップすることで、ポッドを再起動できます。

Longhorn v1.1.0 以降では、ボリュームが予期せず切断された場合にワークロード ポッドを自動的に削除する設定を有効にすることができます。

その他の原因

関連するワークロードがまだボリュームを使用しているときに、ユーザーが誤ってまたは手動で Longhorn ボリュームを切断しました。

関連情報

  • 最低リソース要件調査と結果:
    • https://github.com/longhorn/longhorn/issues/1691
  • ボリュームが予期せず分離されたときに、ワークロードポッドを自動的に削除するセットアップに関する議論
    • https://github.com/longhorn/longhorn/issues/1719

12。ボリュームPVC-XXXスケジュールされていません

該当するバージョン

すべてのロングホーンバージョン。

症状

PVCとしてLonghornボリュームでポッドを作成する場合、ポッドを開始できません。

kubectlの使用を使用しますエラーメッセージをチェックするとき、次のメッセージが表示されます。

  1. 警告FALEEDATTACHVOLUME 4M29S(5M33を超えるx3)actitiondetach-controller attachvolume.attachはボリューム「pvc-xxx」 :rpcエラー:code = internal desc = bad response statuscode [500]失敗しました。ステータス[500内部サーバーエラー]。ボディ:[メッセージ=ボリュームPVC-XXXをnode-xxx添付することができない:ボリュームPVC-xxxスケジュールされていない、code = serverエラー、詳細=]から[http:// longhorn-backend:9500/v1/volumes/pvc-xxx?アクション=添付]

上記のエラーでは、ロングホーンによって返されたメッセージに気付きました。

  1. ボリュームPVC-XXXnode-xxx添付することができない:ボリュームPVC-xxxスケジュールされていない

詳細

これは、ロングホーンがボリュームのデータを保存するのに十分なスペースをさまざまなノードに見つけることができず、ボリュームスケジューリングの障害をもたらすためです。

最も一般的な理由

Longhorn V1.0.xの場合、デフォルトのLonghornのインストールには次の設定があります。

  1. ノードレベルソフトアンチアフィニティ:false
  2. StorageClass Longhornのデフォルトのコピー数は3に設定されています。

これは、ロングホーンが常に3つの異なるノードに3つのレプリカに十分なスペースを割り当てようとすることを意味します。

たとえば、この要件を満たすことができない場合、クラスターに3つのノードがあるため、ボリュームスケジューリングは失敗します。

解決

この場合は、次のことができます。

  1. または、ノードレベルのソフトアンチアフィニティをtrueに設定します。
  2. または、レプリカの数を1または2に設定して、新しいStorageClassを作成します。
  3. または、クラスターにノードを追加します。

その他の原因

スケジューリングポリシーの詳細な説明については、Longhornドキュメントのスケジューリングセクションを参照してください。

https://longhorn.io/docs/1.0.2/volumes-nnodes/scheduling/

関連情報

Longhorn v1.1.0から始めて、新しい設定を導入し、劣化した可用性(デフォルトTrue)のボリューム作成を可能にして、より小さなクラスターのユースケースを支援します。

  • https://github.com/longhorn/longhorn/issues/1701

<<:  テクノハブテクノロジーツアー成都ステーションがオープン、文化・クリエイティブ産業のフルスタックテクノロジー応用の実践を探る

>>:  さまざまなエッジ クラスタ管理ソリューションの比較と選択

推薦する

3か月でウェブサイトのトラフィックを10倍に増やす方法を共有

3か月でウェブサイトのトラフィックを10倍に増加このタイトルを見ると、みんな私が自慢していると思うで...

伝統的なビジネスとインターネットの融合:海鮮屋台によるO2Oの試み

ビジネスの究極の目的は取引です。しかし、現実の世界では、多くの実際的な要因の制約により、「プロセス」...

NiuBo.comの創設者羅永浩氏がHiChinaに公式謝罪

南都ニュースの記者張淑州とインターンの楊鋒は、Niubo.comの創設者羅永浩氏が昨日、自身のWei...

SEMの医療SEOキーワード戦略はユーザーの検索体験に応えます

2 月 16 日に、「SEM の医療 PPC の、少ない労力で機能する高コンバージョン ランディング...

Weibo コンテンツマーケティングでは何をする必要がありますか?

ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービス微博マーケティングとは、...

ウェブサイトKの重要な要素を分析する

最近の観察によると、特に先月20日頃から、Baidu は大規模なアップデートを開始し、かなりの数のサ...

iOS プロモーションおよび運用のマスターから、iOS チャネルの活用方法など、突然の啓蒙をいただきました。

質問1:iOSチャネルをどこで利用すればよいかわかりません。Androidユーザーはオンラインになっ...

#乾物おすすめ# BandwagonHost: 11.11の特別プロモーション商品、在庫限り

BandwagonHostは、熱狂的なオンラインショッピングフェスティバルでもある中国の独身の日(1...

簡単な議論:インターネット時代の資源協力をいかに実現するか

最近のインターネット経済の熱気は、小米の成功により、誰もがインターネットマーケティングを追求するきっ...

A5 フォーラム署名の消失について、ウェブマスターはどう考えていますか?

4月25日、百度のウェブマスターLeeが外部リンクの不正行為を判定する方法を発表した後、ウェブマスタ...

クラウド コンピューティングの複雑さの中での可観測性を成功させるための 5 つのヒント

クラウド コンピューティングと急速なデジタル化によって増大した複雑さを制御するための新しい方法を I...

#著作権なし: hostsolutions-6 ユーロ/kvm/1g メモリ/60g ハードディスク/10T トラフィック/G ポート

Hostsolutions は 2009 年 9 月に設立されました。仮想ホスティング、再販業者、V...

新しいウェブサイトを計画するための 7 つのステップ: 公開したその日にインデックス登録とランキング付けを行う

何をするにも計画を立てる必要があります。そうしないと、時間と労力を無駄にし、2 倍の労力で半分の結果...

セルフメディアパーソンになるには、ストーリーを語ることができなければならない

今日、こんな文章を見ました。「コンテンツ マーケティングを行う人は、優れたストーリーテラーでなければ...