TektonとArgo CDを組み合わせてGitOpsを実装する

TektonとArgo CDを組み合わせてGitOpsを実装する

以前は、アプリケーションの CI/CD プロセスを完了するために Tekton を使用していましたが、CD は Tekton タスク内で完了していました。ここで、GitOps アプローチを使用してパイプラインを変換し、Argo CD を使用して CD 部分を完了します。

ここで、前回の Tekton 実践部分の内容を復習する必要があります。パイプライン全体には、クローン、テスト、ビルド、Docker、デプロイ、ロールバックなどのタスクが含まれます。最終的なデプロイとロールバックは CD 部分に属します。この部分を構築するには、Argo CD を使用するだけです。

まず、プロジェクトの http://git.k8s.local/course/devops-demo.git リポジトリから Helm Chart テンプレートを抽出し、Argo CD とのドッキングに便利な別のリポジトリ http://git.k8s.local/course/devops-demo-deploy に配置します。プロジェクト全体には、アプリケーション展開用の Helm Chart テンプレートのみが含まれます。

まず、Argo CD にリポジトリを追加します。

次に、新しいアプリケーションを作成します。まず、プロジェクトを作成します。 Argo CD には、アプリケーションの論理グループを表す AppProject CRD があります。次の主要なプロパティで構成されます。

  • sourceRepos: プロジェクト内のアプリケーションがマニフェストを取得できるリポジトリ参照
  • 宛先: プロジェクト内のアプリケーションをデプロイできるクラスターと名前空間
  • ロール: プロジェクト内のリソースアクセス用に定義されたロール
  1. apiバージョン: argoproj.io/v1alpha1
  2. 種類: AppProject
  3. メタデータ:
  4. # プロジェクト名
  5. 名前: デモ
  6. 名前空間: argocd
  7. 仕様:
  8. # ターゲット
  9. 目的地:
  10. # このプロジェクト内のサービスがデプロイできる名前空間。ここにすべての名前空間があります。
  11. - 名前空間: '*'  
  12. # このプロジェクトでは、クラスターの展開が可能です。これは、Argo CDによって現在展開されているデフォルトのクラスターです。
  13. サーバー: https: //kubernetes.default.svc
  14. # 許可されたデータソース
  15. ソースリポジトリ:
  16. - http://git.k8s.ローカル/course/devops-demo-deploy.git

詳細な構成情報については、ドキュメント https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/ を参照してください。プロジェクトが作成されたら、環境にデプロイされたアプリケーション インスタンスを表すアプリケーションをプロジェクトの下に作成します。

  1. apiバージョン: argoproj.io/v1alpha1
  2. 種類: アプリケーション
  3. メタデータ:
  4. 名前: devops-demo
  5. 名前空間: argocd
  6. 仕様:
  7. 行き先:
  8. 名前空間:デフォルト 
  9. サーバー: 'https://kubernetes.default.svc'  
  10. プロジェクト: デモ
  11. ソース:
  12. path: helm # Helmリポジトリからアプリケーションを作成する場合、チャートはパスを指定する必要があります
  13. リポジトリ URL: 'http://git.k8s.local/course/devops-demo-deploy.git'  
  14. ターゲットリビジョン: HEAD
  15. 舵:
  16. パラメータ:
  17. -名前: レプリカ数
  18. 値: '2'  
  19. 値ファイル:
  20. - 私の- values.yaml

ここでは、devops-demo という名前のアプリケーションを定義します。アプリケーション ソースは helm パスから取得され、my-values.yaml ファイルを使用します。さらに、source.helm.parameters を通じてパラメータを構成することもできます。私たちは依然として手動同期戦略を使用することを選択します。 Tekton タスクで同期を手動でトリガーできます。上記のリソース オブジェクトが作成された後、アプリケーションはクラスターにデプロイされていないため、OutOfSync 状態になります。

ここで、以前の Tekton パイプラインを変更してみましょう。以前の Pipeline パイプラインは次のとおりです。

  1. # パイプライン.yaml
  2. apiバージョン: tekton.dev/v1beta1
  3. 種類: パイプライン
  4. メタデータ:
  5. 名前: パイプライン
  6. 仕様:
  7. ワークスペース: # ワークスペースを宣言する
  8. -名前: go-repo-pvc
  9. パラメータ:
  10. # コードリポジトリを定義する
  11. -名前: git_url
  12. -名前: リビジョン
  13. タイプ: 文字列
  14. デフォルト: "master"  
  15. # 画像パラメータを定義する
  16. -名前:画像
  17. -名前: レジストリURL
  18. タイプ: 文字列
  19. デフォルト: "harbor.k8s.local"  
  20. -名前: registry_mirror
  21. タイプ: 文字列
  22. デフォルト: "https://ot2k4d59.mirror.aliyuncs.com/"  
  23. # Helmチャートパラメータを定義する
  24. -名前:charts_dir
  25. -名前:リリース名
  26. -名前: リリース名前空間
  27. デフォルト: "デフォルト"  
  28. -名前: 上書き値
  29. デフォルト ""  
  30. -名前: values_file
  31. デフォルト: "values.yaml"  
  32. タスク: #パイプラインにタスクを追加する
  33. -名前:クローン
  34. タスク参照:
  35. 名前: git-clone
  36. ワークスペース:
  37. -名前:出力 
  38. ワークスペース: go-repo-pvc
  39. パラメータ:
  40. -名前: URL
  41. 値: $(params.git_url)
  42. -名前: リビジョン
  43. 値: $(params.revision)
  44. -名前: テスト
  45. タスク参照:
  46. 名前: テスト
  47. - name : build # バイナリプログラムをコンパイルする
  48. タスク参照:
  49. 名前: ビルド
  50. runAfter: # テストタスクの実行後にビルドタスクを実行する
  51. - テスト
  52. - クローン
  53. ワークスペース: # ワークスペースを渡す
  54. -名前: go-repo
  55. ワークスペース: go-repo-pvc
  56. - name : docker # Dockerイメージをビルドしてプッシュする
  57. タスク参照:
  58. 名前: docker
  59. 実行後:
  60. - 建てる
  61. ワークスペース: # ワークスペースを渡す
  62. -名前: go-repo
  63. ワークスペース: go-repo-pvc
  64. params: # パラメータを渡す
  65. -名前:画像
  66. 値: $(params.image)
  67. -名前: レジストリURL
  68. 値: $(params.registry_url)
  69. -名前: registry_mirror
  70. 値: $(params.registry_mirror)
  71. - name : deploy # アプリケーションをデプロイする
  72. タスク参照:
  73. 名前: デプロイ
  74. 実行後:
  75. - ドッカー
  76. ワークスペース:
  77. -名前: ソース
  78. ワークスペース: go-repo-pvc
  79. パラメータ:
  80. -名前: charts_dir
  81. 値: $(params.charts_dir)
  82. -名前:リリース名
  83. 値: $(params.release_name)
  84. -名前: リリース名前空間
  85. 値: $(params.release_namespace)
  86. -名前: 上書き値
  87. 値: $(params.overwrite_values)
  88. -名前: values_file
  89. 値: $(params.values_file)
  90. -名前:ロールバック# ロールバック
  91. タスク参照:
  92. 名前:ロールバック 
  93. いつ
  94. - 入力: "$(tasks.deploy.results.helm-status)"  
  95. 演算子: in  
  96. : [ "失敗" ]
  97. パラメータ:
  98. -名前:リリース名
  99. 値: $(params.release_name)
  100. -名前: リリース名前空間
  101. 値: $(params.release_namespace)

ここで、最後の 2 つのタスク (デプロイとロールバック) を削除する必要があります。 Docker イメージがビルドされてプッシュされたら、デプロイメント コード リポジトリ内の values ファイルを変更し、Argo CD 同期ステータスを手動でトリガーするだけです (自動同期が有効になっている場合は、この手順は省略できます)。ロールバック操作は、別のタスクを定義せずに Argo CD で直接実行できます。

以下のように Taks タスクを定義します。

  1. apiバージョン: tekton.dev/v1alpha1
  2. 種類: タスク
  3. メタデータ:
  4. 名前: 同期
  5. 仕様:
  6. ボリューム:
  7. -名前: argocd-secret
  8. 秘密:
  9. シークレット名: $(inputs.params.argocd_secret)
  10. パラメータ:
  11. -名前: argocd_url
  12. 説明: 「ArgoCD サーバーの URL」  
  13. -名前: argocd_secret
  14. 説明: 「Tekton タスクが argo に接続するためのユーザー名とパスワードを含むシークレット」  
  15. -名前:コミットID
  16. 説明: 「更新するコミット ID」  
  17. -名前: アプリ名
  18. 説明: 「更新する argo アプリの名前」  
  19. -名前: app_revision
  20. デフォルト: "HEAD"  
  21. 説明: 「アップデートする argo アプリのリビジョン」  
  22. 手順:
  23. -名前: デプロイ
  24. 画像: argoproj/argocd
  25. ボリュームマウント:
  26. -名前: argocd-secret
  27. マウントパス: /var/secret
  28. 指示:
  29. -sh
  30. 引数:
  31. - -ce
  32. - |
  33. セット-e
  34. echo "コミットIDを更新"  
  35. argocd ログイン--insecure $(params.argocd_url) --username $(/bin/cat /var/secret/username) --password $(/bin/cat /var/secret/password)  
  36. argocd アプリ同期 $(params.app_name) --revision $(params.app_revision)  
  37. argocd アプリは $(params.app_name) を待機します--health  

Helm Chart の Values ファイル内の image.tag パラメータを変更するだけでよいので、もちろん、タスク内の values.yaml ファイルを変更し、それを Repo リポジトリにコミットするのが最善の方法です。もちろん、簡単にするために、Argo CD のアプリケーション側でパラメータを直接構成することもできます。たとえば、argocd app set コマンドを使用してアプリケーションのパラメータを設定し、argocd app sync コマンドを使用して同期操作を手動でトリガーできます。実際にはここには多くの操作があります。たとえば、特定の条件に基づいてデプロイメントが必要かどうかを判断し、条件が満たされたときに同期操作を実行できます。最後に、wait コマンドを使用して、アプリケーションのデプロイが完了するまで待機します。

argocd アプリ セットを介してパラメータを手動で構成することに加えて、Repo リポジトリ内の値を直接変更する方がよい場合があります。このようにして、ソース コード リポジトリにバージョン レコードが存在します。値を変更するには、以下に示すようにタスクを作成します。

  1. apiバージョン: tekton.dev/v1beta1
  2. 種類: タスク
  3. メタデータ:
  4. 名前: 変更マニフェスト
  5. 仕様:
  6. パラメータ:
  7. -名前: git_url
  8. 説明: マニフェストファイル含むGitリポジトリ アップデート 
  9. -名前: git_email
  10. デフォルト: [email protected]  
  11. -名前: git_name
  12. デフォルト: Tekton パイプライン
  13. -名前: git_manifest_dir
  14. 説明: マニフェストファイルディレクトリ
  15. -名前: ツールイメージ
  16. デフォルト: cnych/helm-kubectl-curl-git-jq-yq
  17. -名前:画像タグ
  18. 説明: Dockerイメージタグをデプロイする
  19. 手順:
  20. -名前: git-push
  21. 画像: $(params.tool_image)
  22. 環境:
  23. -名前: GIT_USERNAME
  24. 値:
  25. シークレットキーリファレンス:
  26. 名前: gitlab-auth
  27. キー: ユーザー名
  28. オプション: true  
  29. -名前: GIT_PASSWORD
  30. 値:
  31. シークレットキーリファレンス:
  32. 名前: gitlab-auth
  33. キー:パスワード 
  34. オプション: true  
  35. コマンド: [ "/bin/bash" ]
  36. 引数:
  37. - -c
  38. - |
  39. セット-eu
  40. echo前のステップから環境変数をロードする
  41. ソース /workspace/env-config
  42. git config --global user.email "$(params.git_email)"  
  43. git config --global ユーザー名 "$(params.git_name)"  
  44. git clone --branch master --depth 1 http://${GIT_USERNAME}:${GIT_PASSWORD}@$(params.git_url) リポジトリ 
  45. cd "リポジトリ/$(params.git_manifest_dir)"  
  46. ls -l
  47. 古い値をエコーし​​ます:
  48. cat my- values ​​.yaml | yq r - '画像タグ'  
  49. 新しい値置き換えてエコーします:
  50. $(params.image_tag) をエコーし​​ます
  51. yq w --inplace my-values.yaml 'image.tag' "$(params.image_tag)"  
  52. 新しい値を検証するエコー
  53. yq r my- values ​​.yaml 'image.tag'  
  54. !git diff-インデックスの場合  --静かな頭--;それから 
  55. git ステータス
  56. gitを追加します
  57. git commit -m "change-manifests タスクで Tekton パイプラインによって更新された helm 値"  
  58. gitプッシュ
  59. それ以外 
  60. echo "変更なし、git リポジトリは最新です"  
  61. フィ

これで、パイプラインは次のリストになります。

  1. # パイプライン.yaml
  2. apiバージョン: tekton.dev/v1beta1
  3. 種類: パイプライン
  4. メタデータ:
  5. 名前: パイプライン
  6. 仕様:
  7. ワークスペース: # ワークスペースを宣言する
  8. -名前: go-repo-pvc
  9. パラメータ:
  10. # コードリポジトリを定義する
  11. -名前: git_url
  12. -名前: git_infra_url
  13. -名前: リビジョン
  14. タイプ: 文字列
  15. デフォルト: "master"  
  16. # 画像パラメータを定義する
  17. -名前:画像
  18. -名前:画像タグ
  19. -名前: レジストリURL
  20. タイプ: 文字列
  21. デフォルト: "harbor.k8s.local"  
  22. -名前: registry_mirror
  23. タイプ: 文字列
  24. デフォルト: "https://ot2k4d59.mirror.aliyuncs.com/"  
  25. -名前: git_manifest_dir
  26. デフォルト: "helm"  
  27. # argocdパラメータを定義する
  28. -名前: argocd_url
  29. -名前: argocd_secret
  30. -名前: アプリ名
  31. -名前: app_revision
  32. タイプ: 文字列
  33. デフォルト: "HEAD"  
  34. タスク: #パイプラインにタスクを追加する
  35. -名前:クローン
  36. タスク参照:
  37. 名前: git-clone
  38. ワークスペース:
  39. -名前:出力 
  40. ワークスペース: go-repo-pvc
  41. パラメータ:
  42. -名前: URL
  43. 値: $(params.git_url)
  44. -名前: リビジョン
  45. 値: $(params.revision)
  46. -名前: テスト
  47. タスク参照:
  48. 名前: テスト
  49. - name : build # バイナリプログラムをコンパイルする
  50. タスク参照:
  51. 名前: ビルド
  52. runAfter: # テストタスクの実行後にビルドタスクを実行する
  53. - テスト
  54. - クローン
  55. ワークスペース: # ワークスペースを渡す
  56. -名前: go-repo
  57. ワークスペース: go-repo-pvc
  58. - name : docker # Dockerイメージをビルドしてプッシュする
  59. タスク参照:
  60. 名前: docker
  61. 実行後:
  62. - 建てる
  63. ワークスペース: # ワークスペースを渡す
  64. -名前: go-repo
  65. ワークスペース: go-repo-pvc
  66. params: # パラメータを渡す
  67. -名前:画像
  68. 値: $(params.image):$(params.image_tag)
  69. -名前: レジストリURL
  70. 値: $(params.registry_url)
  71. -名前: registry_mirror
  72. 値: $(params.registry_mirror)
  73. -名前: マニフェスト
  74. タスク参照:
  75. 名前: 変更マニフェスト
  76. 実行後:
  77. - ドッカー
  78. パラメータ:
  79. -名前: git_url
  80. 値: $(params.git_infra_url)
  81. -名前: git_manifest_dir
  82. 値: $(params.git_manifest_dir)
  83. -名前:画像タグ
  84. 値: $(params.image_tag)
  85. -名前: 同期
  86. タスク参照:
  87. 名前: 同期
  88. 実行後:
  89. - 顕現する
  90. パラメータ:
  91. -名前: argocd_url
  92. 値: $(params.argocd_url)
  93. -名前: argocd_secret
  94. 値: $(params.argocd_secret)
  95. -名前: アプリ名
  96. 値: $(params.app_name)
  97. -名前: app_revision
  98. 値: $(params.app_revision)

最後に、Argo CD ログイン用の Secret オブジェクトを作成します。

  1. APIバージョン: v1
  2. 種類: 秘密
  3. メタデータ:
  4. 名前: argocd-auth
  5. タイプ: 不透明
  6. 文字列データ:
  7. ユーザー名: admin
  8. パスワード: admin321

最後に、Tekton Triggers のテンプレートを次のように変更します。

  1. # gitlab-テンプレート.yaml
  2. apiバージョン: triggers.tekton.dev/v1alpha1
  3. 種類: トリガーテンプレート
  4. メタデータ:
  5. 名前: gitlab-template
  6. 仕様:
  7. params: #TriggerBinding と一致するパラメータを定義します
  8. -名前: gitrevision
  9. -名前: gitリポジトリURL
  10. resourcetemplates: #リソーステンプレートを定義する
  11. - apiバージョン: tekton.dev/v1beta1
  12. kind: PipelineRun # パイプラインテンプレートを定義する
  13. メタデータ:
  14. generateName: gitlab-run- # TaskRun 名のプレフィックス
  15. 仕様:
  16. サービスアカウント名: tekton-build-sa
  17. パイプライン参照:
  18. 名前: パイプライン
  19. ワークスペース:
  20. -名前: go-repo-pvc
  21. 永続ボリュームクレーム:
  22. クレーム名: go-repo-pvc
  23. パラメータ:
  24. -名前: git_url
  25. 値: $(tt.params.gitrepositoryurl)
  26. -名前: git_infra_url
  27. 値: git.k8s。ローカル/course/devops-demo-deploy.git
  28. -名前:画像
  29. 値: "harbor.k8s.local/course/devops-demo"  
  30. -名前:画像タグ
  31. 値: "$(tt.params.gitrevision)"  
  32. -名前: argocd_url
  33. 値: argocd.k8s.local  
  34. -名前: argocd_secret
  35. 値: argocd-auth
  36. -名前: アプリ名
  37. 値: devops-demo

今ではパイプライン全体がさらに合理化されました。これで、アプリケーション リポジトリ内のソース コードを変更して送信することで、パイプラインをトリガーできるようになりました。

コードを送信すると、パイプライン ビルド全体が最後の同期タスクで停止することがわかります。これは、アプリケーションが正常になるまで待機してから終了する必要がある argocd app wait $(params.app_name) --health コマンドを実行したためです。

  1. $ curl devops- demo.k8s.localを実行します。  
  2. { "msg" : "GitLab 上の Hello Tekton + ArgoCD" }

しかし実際には、アプリケーションは正常にデプロイされましたが、Argo CD のヘルスチェックは合格しませんでした。 Argo CD は、いくつかの標準 Kubernetes リソースに対して組み込みのヘルス ポリシーを提供し、アプリケーションのヘルス ステータスにこれらのポリシー全体を提示します。たとえば、レプリカの数が正常かどうか、PVC がバインドされているかどうかなどをチェックします。Ingress リソースの場合、status.loadBalancer.ingress リストが空でないかどうかをチェックします。これには少なくとも 1 つのホスト名または IP 値が必要ですが、ここでデプロイした Ingress の値は空です。

  1. $ kubectl get ingress devops-demo -o yaml
  2. apiバージョン: extensions/v1beta1
  3. 種類: イングレス
  4. ......
  5. 仕様:
  6. ルール:
  7. - ホスト: devops-demo.k8s。地元 
  8. http:
  9. パス:
  10. - バックエンド:
  11. サービス名: devops-demo
  12. サービスポート: http
  13. パス: /
  14. パスタイプ: 実装固有
  15. 状態:
  16. ロードバランサー: {}

つまり、ヘルスチェックは合格しなかったということです。 Argo CD ページでも、Ingress が原因でヘルス チェックが失敗したことが確認されています。

このとき、Ingress リソースの監視および検査方法をカスタマイズする必要があります。 Argo CD は、Lua での検査ルールの記述と、Argo CD の Configmap 構成ファイルの変更をサポートしています。

  1. $ kubectl edit cm -n argocd argocd-cm
  2. # 以下のオブジェクトを編集してください。 ' #'始まる行は無視されます。
  3. # ファイル空の場合、編集は中止されます。このファイルの保存中にエラーが発生した場合は、
  4. #関連する失敗を伴って再開されました。
  5. #
  6. APIバージョン: v1
  7. データ:
  8. リソースのカスタマイズ: | # Ingressリソースのヘルスチェック方法をカスタマイズする
  9. 拡張機能/Ingress:
  10. 健康.lua: |
  11. s = {}
  12. hs.status = "健康"  
  13. 戻るhs
  14. ......

変更が完了すると、アプリケーションは正常になります。

ロールバックする必要がある場合は、Argo CD ページで [履歴とロールバック] を直接クリックして、展開履歴を表示し、ロールバックするバージョンを選択できます。

Tekton パイプライン全体のステータスを表示できます。

  1. $ tkn pr gitlab-run-vdlm6 を記述します
  2. 名前: gitlab-run-vdlm6
  3. 名前空間:デフォルト 
  4. パイプライン参照: パイプライン
  5. サービスアカウント: tekton-build-sa
  6. タイムアウト: 1時間0分0秒
  7. ラベル:
  8. tekton.dev/pipeline=パイプライン
  9. トリガー.tekton.dev/eventlistener=gitlab-listener
  10. triggers.tekton.dev/トリガー=gitlab-push-events-トリガー 
  11. triggers.tekton.dev/triggers-eventid=eeda9157-5eb3-4399-be4b-88955cb56764
  12.  
  13. 🌡️ ステータス
  14.  
  15. 開始期間ステータス
  16. 4分前 2分 成功
  17.  
  18. 📦 リソース
  19.  
  20. リソースなし
  21.  
  22. ⚓ パラメータ
  23.  
  24. 名前
  25. ∙ git_url http://git.k8s.ローカル/course/devops-demo.git
  26. ∙ git_infra_url git.k8s。ローカル/course/devops-demo-deploy.git
  27. ∙ 画像 harbor.k8s。ローカル/course/devops-demo
  28. ∙ 画像タグ 332798d9e28422341fd64704ab9b54b944d77084
  29. ∙ argocd_url argocd.k8s.local  
  30. ∙ argocd_secret argocd-auth
  31. ∙ アプリ名 devops-demo
  32.  
  33. 📝 結果
  34.  
  35. 結果なし
  36.  
  37. 📂 ワークスペース
  38.  
  39. 名前サブパス ワークスペース バインディング
  40. ∙ go-repo-pvc --- PersistentVolumeClaim (claimName=go-repo-pvc)  
  41.  
  42. 🗂 タスクラン
  43.  
  44. 名前タスク開始 所要時間 ステータス
  45. ∙ gitlab-run-vdlm6-sync-svmxl 同期 3 分前 42 秒 成功
  46. ∙ gitlab-run-vdlm6-manifests-d297d マニフェスト 3 分前 26 秒 成功
  47. ∙ gitlab-run-vdlm6-docker-g2tqx docker 4分前 48秒 成功
  48. ∙ gitlab-run-vdlm6-build-mkcrd ビルド 4 分前 9 秒 成功
  49. ∙ gitlab-run-vdlm6-test-gjr4c テスト 4 分前 4 秒 成功
  50. ∙ gitlab-run-vdlm6-clone-57vpw クローン 4 分前 8 秒 成功

最後に、Tekton と Argo CD を使用して GitOps ワークフローを実装する方法を図でまとめてみましょう。

<<:  クラウドコンピューティングIaaSをめぐる戦いは終わったが、完全に終わったわけではない

>>:  ZooKeeper 分散ロック キュレーター ソース コード 2: 再入可能ロックの繰り返しロックとロック解除

推薦する

Letbox-Storage VPS/5.75 USD/KVM/2 GB RAM/300 GB HDD/3 TB Flow/ロサンゼルス

Letbox は、特別オファー、数量限定、優れた価格性能比の 2 つのストレージ VPS を作成しま...

本末転倒は外部リンクの獲得を難しくする

外部リンクを構築する本質は、ウェブサイトの権威とキーワードランキングを向上させることだと考えているな...

cambohost: カンボジア VPS、カンボジア サーバー、ネイティブ IP

カンボジアのホスティングプロバイダー(AS137081)であるcambo.hostは、カンボジアのデ...

「1つのクラウド、複数のコア」、Kylin Securityがクラウドデスクトップを作成

2020年、情報化・イノベーション産業の爆発的な発展は産業変革の春を迎え、デジタル化・アップグレード...

nfphosting - ロサンゼルス QN データセンター VPS 年間支払いは 3.99 ドルから、独立した IP

nfphosting は 2006 年に設立された新しい会社です。現在は、仮想ホスティング、再販業者...

企業がハイブリッドクラウドコンピューティング環境の導入に熱心である理由

クラウド コンピューティングという用語は、最近のテクノロジー ニュースで頻繁に取り上げられています。...

SEO担当者は360度検索を過小評価してはいけません。360度検索に注目するべき理由

Senmao Technologyは最近、360度検索が大人気であることを発見しました。初心者として...

Baidu サーバーの問題: ウェブサイトのスナップショットは実際にはオンライン時間よりも早い

[はじめに] 「2012年8月21日、今日Baiduに何が起こったのか?」SEO検索エンジン最適化グ...

Dockerとは何ですか? K8s との関係は何ですか?

プログラマーとして、テキストを編集するために vim をインストールする場合、異なる環境で異なるコマ...

友好的なリンク交換の3つの要素:ウェブサイトをスムーズに運営する

友好的なリンクは、ウェブサイト全体の重みとキーワードのランキングを向上させる上で重要な役割を果たしま...

セキュリティの主流開発における主要な「クラウドセキュリティ」技術の詳細説明

現在、さまざまなウイルス対策ソフトウェアメーカーが「クラウドセキュリティ」という概念を推進しています...

深刻なサーバースペース切断に対処する方法の例

サーバースペースの安定性は非常に重要であり、深刻な切断はウェブサイトの掲載とランキングに直接影響しま...

百度が日本の百度検索エンジンを閉鎖

最近、一部のネットユーザーは、百度が7年間運営してきた日本のサイトが検索ボックスを削除し、日本語検索...