Kubernetes コンテナ ランタイムを Docker から Containerd にスムーズに切り替える方法

Kubernetes コンテナ ランタイムを Docker から Containerd にスムーズに切り替える方法

[[418144]]

先ほど、containerd の開発履歴と基本的な使用方法について学習しました。このセクションでは、Kubernetes クラスターのコンテナ ランタイムとして containerd を使用します。

先ほどインストールしたクラスターは、デフォルトでコンテナ ランタイムとして Docker を使用します。では、コンテナ ランタイムを Docker から containerd に切り替えるにはどうすればよいでしょうか?

メンテナンスノード

まず、切り替えるノードをメンテナンス モードとしてマークし、ノード上で実行されている Pod を強制的に削除します。これにより、切り替えプロセス中のアプリケーションの通常の動作への影響を最小限に抑えることができます。たとえば、最初にノード 1 を containerd に切り替えます。

まず、kubectl cordon コマンドを使用して、node1 ノードをスケジュール不可としてマークします。

  1. # ノード1をスケジュール不可としてマークする
  2. ➜ ~ kubectl コルドン ノード1
  3. ノード/ノード1が封鎖されました
  4. ➜ ~ kubectl ノードを取得する
  5. 名前ステータス 役割 年齢 バージョン
  6. マスター 準備完了マスター 85d v1.19.11
  7. node1 準備完了、スケジュール無効 <なし> 85d v1.19.11
  8. node2 準備完了 <なし> 85d v1.19.11

上記のコマンドを実行すると、node1 は SchedulingDisabled 状態に変わり、スケジュールできないことが示されます。この方法では、新しく作成された Pod は現在のノードにスケジュールされません。

次に、node1 ノードをメンテナンスし、kubectl のdrain コマンドを使用してノードをメンテナンスし、ノード上の Pod を削除します。

  1. # ノード1を維持し、ポッドを排除する
  2. ➜ ~ kubectl ドレイン node1 --ignore-daemonsets  
  3. ノード/ノード1はすでに封鎖されています
  4. 警告: DaemonSet 管理の Pod を無視します: kube-system/kube-flannel-ds-mzdgl、kube-system/kube-proxy-vddh9、lens-metrics/node-exporter-2g4hr
  5. ポッド「kiali-85c8cdd5b5-27cwv」を退去中 
  6. ポッド「jenkins-587b78f5cd-9gvn8」を退去しています 
  7. ポッド「argocd-application-controller-0」を削除しています 
  8. pod/argocd-application-controller-0 が削除されました
  9. pod/kiali-85c8cdd5b5-27cwv が削除されました
  10. pod/jenkins-587b78f5cd-9gvn8 が削除されました
  11. ノード/ノード1が削除されました

上記のコマンドは、node1 上の Pod を強制的に削除します。 DaemonSet コントローラーによって管理される Pod を他のノードに追い出す必要がないため、これらの Pod を無視するためのパラメーター --ignore-daemonsets を追加しました。ノードが削除された後、ノードに対してメンテナンス操作を実行できます。コンテナランタイムの切り替えに加えて、これも実行できます。たとえば、ノード構成の変更やカーネルのアップグレードなどを行う必要がある場合は、まずノードを削除してからメンテナンスを実行できます。

containerdへの切り替え

次に、docker、containerd、kubelet を停止します。

  1. ➜ ~ systemctl kubelet を停止します
  2. ➜ ~ systemctl で docker を停止する
  3. ➜ ~ systemctl コンテナを停止します

インストールした Docker はデフォルトでバックエンド コンテナ ランタイムとして containerd を使用するため、containerd を別途インストールする必要はありません。もちろん、Docker と containerd を完全にアンインストールしてから再インストールすることもできます。ここでは、以前にインストールした containerd を直接使用することを選択します。

CRI は containerd にデフォルトで実装されていますが、プラグインとして構成されているためです。以前は、Docker に付属する containerd はデフォルトで CRI プラグインを無効にしていました (構成 disabled_plugins = ["cri"] を使用)。そのため、ここではデフォルトの構成ファイルを再生成して上書きします。

  1. ➜ ~ containerd 設定デフォルト> /etc/containerd/config.toml

上記の設定ファイルについてはすでに紹介しました。まず、デフォルトの一時停止イメージを国内アドレスに変更し、[plugins."io.containerd.grpc.v1.cri"] の下の sandbox_image を置き換えます。

  1. [プラグイン。 [[io.containerd.grpc.v1.cri] ]
  2. サンドボックスイメージ = "registry.aliyuncs.com/k8sxio/pause:3.2"  
  3. ......

イメージ ウェアハウスのアクセラレータ アドレスも構成します。

  1. [プラグイン。 ["io.containerd.grpc.v1.cri" .レジストリ]
  2. [プラグイン。 ["io.containerd.grpc.v1.cri" .registry.mirrors]
  3. [プラグイン。 "io.containerd.grpc.v1.cri" .registry.mirrors. [[docker.io] ]
  4. エンドポイント = [ "https://bqr1dr1n.mirror.aliyuncs.com" ]
  5. [プラグイン。 "io.containerd.grpc.v1.cri" .registry.mirrors. [[ ... [
  6. エンドポイント = [ "https://registry.aliyuncs.com/k8sxio" ]

次に、kubelet 設定を変更し、コンテナ ランタイムを containerd に構成します。 /etc/sysconfig/kubelet ファイルを開き、いくつかの追加の kubelet 起動パラメータを追加できます。構成は次のとおりです。

  1. KUBELET_EXTRA_ARGS = "--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"  

上記の構成では、2 つのパラメータを追加しました。 --container-runtime パラメータは、使用するコンテナ ランタイムを指定するために使用されます。オプションの値はdockerまたはremoteです。デフォルトはdockerです。ここでは containerd などのコンテナ ランタイムを使用しているため、リモート値として構成されます (つまり、docker 以外のコンテナ ランタイムはリモートとして指定する必要があります)。次に、2 番目のパラメータ --container-runtime-endpoint を使用して、リモート ランタイム サービスのエンドポイント アドレスを指定します。 Linux システムでは、通常、UNIX ソケットが使用されます。たとえば、ここでは containerd に接続するためのソケット アドレス unix:///run/containerd/containerd.sock を指定します。

  • 実際には、リモート CRI のイメージ サービス アドレスを指定するには、--image-service-endpoint パラメータも構成する必要があります。指定されていない場合は、CRI がコンテナ サービスとイメージ サービスの両方を実装するため、--container-runtime-endpoint の値がデフォルトで使用されます。

設定が完了したら、containerd と kubelet を再起動します。

  1. ➜ ~ systemctlデーモンリロード
  2. ➜ ~ systemctl コンテナを再起動します
  3. ➜ ~ systemctl kubeletを再起動します

再起動が完了したら、ノードのステータスが正常かどうかを確認します。

  1. ➜ ~ kubectl ノードを取得 -o ワイド
  2. 名前ステータス 役割 年齢 バージョン 内部 IP 外部 IP OS イメージ カーネル バージョン コンテナ ランタイム
  3. マスター準備完了マスター 85d v1.19.11 192.168.31.30 <なし> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://19.3.9
  4. node1 Ready、SchedulingDisabled <なし> 85d v1.19.11 192.168.31.95 <なし> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 containerd://1.4.4
  5. node2 準備完了 <なし> 85d v1.19.11 192.168.31.215 <なし> CentOS Linux 7 (Core) 3.10.0-1160.25.1.el7.x86_64 docker://19.3.9

ノードを取得するときに、-o wide を追加して、ノードの詳細情報を表示します。上記の比較から、node1 のコンテナ ランタイムが containerd://1.4.4 に切り替わったことがわかります。

最後に、Pod リソースをスケジュールできるように、node1 をクラスターに再度追加します。

  1. ➜ ~ kubectl uncordon ノード1
  2. ノード/ノード1が封鎖解除されました
  3. ➜ ~ kubectl ノードを取得する
  4. 名前ステータス 役割 年齢 バージョン
  5. マスター 準備完了マスター 85d v1.19.11
  6. node1 準備完了 <なし> 85d v1.19.11
  7. node2 準備完了 <なし> 85d v1.19.11

同じ方法を使用して他のノードを処理し、クラスター全体をコンテナ ランタイム containerd に切り替えます。

クリクトル

これで、node1 で ctr コマンドを使用して containerd を管理し、k8s.io という追加の名前空間があることを確認できます。

  1. ➜ ~ クリック ns ls
  2. 名前ラベル
  3. 翻訳元
  4. モビー

前述のように、Kubernetes クラスターのすべての containerd リソースは k8s.io 名前空間にありますが、docker リソースはデフォルトで moby にあります。もちろん、現在 moby にはデータはありませんが、k8s.io 名前空間には多くのイメージとコンテナ リソースがあります。

  1. ➜ ~ ctr -n moby cls
  2. コンテナイメージランタイム
  3. ➜ ~ ctr -n moby i ls
  4. 参照タイプ ダイジェストサイズプラットフォーム ラベル
  5. ➜ ~ ctr -n moby t ls
  6. タスク PID ステータス
  7. ctr -n k8s.io i ls -q
  8. docker.io/library/busybox:最新
  9. docker.io/library/busybox@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
  10. quay.io/coreos/flannel:v0.14.0
  11. quay.io/coreos/flannel@sha256:4a330b2f2e74046e493b2edc30d61fdebbdddaaedcb32d62736f25be8d3c64d5
  12. registry.aliyuncs.com/k8sxio/pause:3.2
  13. ......

もちろん、ctr コマンドを使用してイメージやコンテナ リソースを直接管理することもできますが、使用中にこのツールが docker CLI ほど便利ではないことがはっきりとわかります。使いやすさと機能性を考慮すると、管理ツールとして crictl を使用することをお勧めします。 crictl は CRI 互換のコンテナ ランタイム用の CLI を提供します。これにより、CRI ランタイム開発者は Kubernetes コンポーネントを設定せずにランタイムをデバッグできます。

次に、crictl ツールを使用してコンテナ ランタイムの管理効率を向上させる方法について簡単に紹介します。

インストール

まず、crictl ツールをインストールする必要があります。 cri-tools のリリース ページから対応するバイナリ パッケージを直接ダウンロードし、解凍して PATH パスに配置します。

  1. ➜ ~ バージョン = "v1.22.0"  
  2. ➜ ~ wget https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
  3. # 制限がある場合は、ダウンロードを高速化するために次のURLに置き換えることもできます
  4. # wget https://download.fastgit.org/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-$VERSION-linux-amd64.tar.gz
  5. ➜ ~ tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/ local /bin
  6. ➜ ~ rm -f crictl-$VERSION-linux-amd64.tar.gz
  7. ➜ ~ crictl -v
  8. crictl バージョン v1.22.0

これは、crictl ツールが正常にインストールされたことを証明します。

使用法

crictl をインストールしたら、このツールの一般的な使用方法をいくつか学びましょう。

まず、デフォルトの設定ファイル(デフォルトでは /etc/crictl.yaml)を変更する必要があります。ファイル内のコンテナ ランタイムとイメージのエンドポイント アドレスを指定します。内容は以下のとおりです。

  1. ランタイムエンドポイント: unix:///var/run/containerd/containerd.sock
  2. イメージエンドポイント: unix:///var/run/containerd/containerd.sock
  3. デバッグ: false  
  4. プルイメージオン作成: false  
  5. 実行時プルを無効にする: false  

設定が完了したら、crictl コマンドを使用できます。

ポッドリストを取得

crictl pods コマンドを使用すると、以下に示すように、現在のノードで実行されている Pod のリストを取得できます。

  1. ➜ ~ crictlポッド
  2. POD ID 作成 状態 名前名前空間 試行 実行時間
  3. cb18081b33933 39 分前 準備完了 kube-flannel-ds-mzdgl kube-system 1 (デフォルト)
  4. 95d6004c55902 40 分前 node-exporter-2g4hr lens-metrics 1 (デフォルト)が準備完了
  5. cfae80b3209db 40 分前 kube-proxy-vddh9 kube-system 1 (デフォルト)が準備完了
  6. 99ac2583da87f 40 分前 準備完了 jenkins-587b78f5cd-dfzns kube-ops 0 (デフォルト)
  7. 07ebdc51f1def 45 分前 NotReady node-exporter-2g4hr lens-metrics 0 (デフォルト)
  8. bec027b98f194 45 分前 NotReady kube-proxy-vddh9 kube-system 0 (デフォルト)
  9. b44b5ec385053 45 分前 NotReady kube-flannel-ds-mzdgl kube-system 0 (デフォルト)

--name パラメータを使用して特定の Pod を取得することもできます。

  1. ➜ ~crictl ポッド--name kube-flannel-ds-mzdgl  
  2. POD ID 作成 状態 名前名前空間 試行 実行時間
  3. cb18081b33933 約 1時間前 準備完了 kube-flannel-ds-mzdgl kube-system 1 (デフォルト)

ラベル別にポッド リストをフィルタリングすることもできます。

  1. ➜ ~crictl pods --label app=flannel  
  2. POD ID 作成 状態 名前名前空間 試行 実行時間
  3. cb18081b33933 約 1時間前 準備完了 kube-flannel-ds-mzdgl kube-system 1 (デフォルト)

ミラーリストを取得

すべてのイメージを取得するには、crictl images コマンドを使用します。

  1. ➜ ~ crictl 画像
  2. 画像タグ 画像IDサイズ 
  3. docker.io/jenkins/jenkins lts 3b4ec91827f28 303MB
  4. docker.io/library/busybox 最新 69593048aa3ac 771kB
  5. quay.io/coreos/flannel v0.14.0 8522d622299ca 21.1MB
  6. quay.io/prometheus/node-exporter v1.0.1 0e0218889c33b 13MB
  7. registry.aliyuncs.com/k8sxio/kube-proxy v1.19.11 732e0635ac9e0 49.3MB
  8. registry.aliyuncs.com/k8sxio/pause 3.2 80d28bedfe5de 300kB

コマンドの後に -v パラメータを追加して、イメージの詳細情報を表示することもできます。

  1. ➜ ~ crictl イメージ -v
  2. ID: sha256:3b4ec91827f28ed482b08f6e379c56ea2308967d10aa4f458442c922e0771f87
  3. リポジトリタグ: docker.io/jenkins/jenkins:lts
  4. リポジトリダイジェスト: docker.io/jenkins/jenkins@sha256:abcd55c9f19c85808124a4d82e3412719cd5c511c03ebd7d4210e9fa9e8f1029
  5. サイズ: 302984002
  6. ユーザー名: jenkins
  7.  
  8. ID: sha256:69593048aa3acfee0f75f20b77acb549de2472063053f6730c4091b53f2dfb02
  9. リポジトリタグ: docker.io/library/busybox:latest
  10. リポジトリダイジェスト: docker.io/library/busybox@sha256:0f354ec1728d9ff32edcd7d1b8bbdfc798277ad36120dc3dc683be44524c8b60
  11. サイズ: 770886
  12.  
  13. ......

コンテナのリストを取得する

実行中のコンテナのリストを取得するには、crictl ps コマンドを使用します。

  1. ➜ ~ クリクトル ps
  2. コンテナイメージ作成状態試行ポッドID
  3. c8474738e4587 3b4ec91827f28 約1時間前 jenkins 0 を実行中 99ac2583da87f
  4. 0f9c826f87ef8 8522d622299ca 約1時間前 kube-flannel 1 を実行中 cb18081b33933
  5. da444f718d37b 0e0218889c33b 約1時間前 node-exporter 1 95d6004c55902 を実行中
  6. a484a8a69ea59 732e0635ac9e0 約1時間前 kube-proxy 1 を実行中 cfae80b3209db

crictl ps -h を通じて取得できる他のオプション パラメーターは多数あり、たとえば、最近作成された 2 つのコンテナーを表示するなどです。

  1. ➜ ~ crictl ps -n 2
  2. コンテナイメージ作成状態試行ポッドID
  3. c8474738e4587 3b4ec91827f28 約1時間前 jenkins 0 を実行中 99ac2583da87f
  4. 0f9c826f87ef8 8522d622299ca 約1時間前 kube-flannel 1 を実行中 cb18081b33933

ステータスでフィルタリングするには -s オプションを使用します。

  1. ➜ ~ crictl ps -s 実行中
  2. コンテナイメージ作成状態試行ポッドID
  3. c8474738e4587 3b4ec91827f28 約1時間前 jenkins 0 を実行中 99ac2583da87f
  4. 0f9c826f87ef8 8522d622299ca 約1時間前 kube-flannel 1 を実行中 cb18081b33933
  5. da444f718d37b 0e0218889c33b 約1時間前 node-exporter 1 95d6004c55902 を実行中
  6. a484a8a69ea59 732e0635ac9e0 約1時間前 kube-proxy 1 を実行中 cfae80b3209db

コンテナ内でコマンドを実行する

crictl は exec に似たコマンドもサポートします。たとえば、コンテナ ID が c8474738e4587 のコンテナで date コマンドを実行するには、次のようにします。

  1. ➜~crictl exec -it c8474738e4587日付 
  2. 2021年8月17日(火)08:23:02 AM UTC

コンテナログを出力する

コンテナのログ情報も取得できます。

  1. ➜ ~crictl ログ c8474738e4587
  2. ......
  3. 2021-08-17 07:19:51.846+0000 [id=155] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: 定期的なバックグラウンドビルド破棄を開始しました
  4. 2021-08-17 07:19:51.854+0000 [id=155] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: 定期的なバックグラウンド ビルド ディスカーダーが終了しました。 6ミリ秒
  5. 2021-08-17 08:19:51.846+0000 [id=404] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: 定期的なバックグラウンドビルド破棄を開始しました
  6. 2021-08-17 08:19:51.848+0000 [id=404] INFO hudson.model.AsyncPeriodicWork#lambda$doRun$0: 定期的なバックグラウンド ビルド ディスカーダーが終了しました。 1ミリ秒

kubectl logs と同様に、-f オプションを使用してログ出力を追跡することもできます。また、--tail N を使用して、最新の N 行のログの出力を指定することもできます。

リソース統計

コンテナ リソースの使用状況を一覧表示するには、crictl stats コマンドを使用します。

  1. ➜ ~ crictl 統計
  2. コンテナ CPU % MEM ディスク INODES
  3. 0f9c826f87ef8 0.00 21.2MB 0B 17
  4. a484a8a69ea59 0.00 23.55MB 12.29kB 25
  5. c8474738e4587 0.08 413.2MB 3.338MB 12
  6. da444f718d37b 0.00 14.46MB 0B 16

さらに、次のようなイメージやコンテナに関連するいくつかの操作もサポートされています。

  • イメージをプルする: crictl pull
  • ポッドを実行: crictl runp
  • コンテナを実行します: crictl run
  • コンテナを起動します: crictl start
  • コンテナを削除します: crictl rm
  • イメージを削除します: crictl rmi
  • ポッドの削除: crictl rmp
  • コンテナを停止します: crictl stop
  • ポッドを停止する: crictl stoppod
  • ......

詳細については、https://github.com/kubernetes-sigs/cri-tools を参照してください。

CLI の比較

先ほど、イメージ、コンテナ、ポッドは docker、ctr、crictl などのコマンドライン ツールを使用して管理できることを学びました。次に、これらの一般的なコマンドの使用方法の違いを比較してみましょう。

ctr containers create コマンドで作成されたコンテナは静的コンテナのみであるため、ctr task start コマンドを使用してコンテナ プロセスを開始する必要もあることに注意してください。もちろん、ctr run コマンドを直接使用してコンテナを作成して実行することもできます。コンテナ操作を入力するときは、Docker とは異なり、ctr task exec コマンドの後に --exec-id パラメータを指定する必要があります。この ID は一意であれば何でも構いません。なお、ctr にはコンテナを停止する機能はありません。コンテナを一時停止 (ctr task pause) または終了 (ctr task kill) することしかできません。

さらに、crictl pods は、Pod が配置されている名前空間やステータスなど、Pod の情報を一覧表示することに注意してください。 crictl ps はアプリケーション コンテナの情報を一覧表示しますが、docker ps は初期化コンテナ (一時停止コンテナ) とアプリケーション コンテナの情報を一覧表示します。初期化コンテナは各 Pod の起動時に作成され、通常は注目されないため、crictl の方が簡潔でわかりやすく使用できます。

ログ構成

共通コマンドのいくつかの違いに加えて、docker と containerd にはコンテナ ログと関連するパラメータ構成にもいくつかの違いがあります。

DockerをKubernetesコンテナランタイムとして使用する場合、コンテナログはDockerによってディスクに書き込まれ、/var/lib/docker/containers/のようなディレクトリに保存されます。 kubelet は、コンテナ ログ ディレクトリ内のコンテナ ログ ファイルを指すソフト リンクを /var/log/pods および /var/log/containers の下に作成します。対応するログ関連の構成は、以下に示すように、構成ファイルを通じて指定できます。

  1. {
  2. 「ログドライバー」 : 「jsonファイル」
  3. 「ログオプション」 : {
  4. 「最大サイズ」 : 「100m」
  5. "最大ファイル数: " 10"
  6. }
  7. }

containerdをKubernetesコンテナランタイムとして使用すると、コンテナログはkubeletによってディスクに書き込まれ、/var/log/pods/に直接保存されます。ディレクトリを作成し、/var/log/containers ディレクトリ内のログ ファイルを指すソフト リンクを作成します。同様に、ログ構成は、以下に示すように、kubelet パラメータを通じて指定されます。

  1. --container-log-max-files=10 --container-log-max-size="100Mi"  

したがって、ログを収集する場合、理論的には両方のソリューションに互換性があり、基本的に変更は必要ありません。

もちろん、これらの違いに加えて、イメージ構築プロセスは私たちが最も注意を払う必要があるものかもしれません。 containerd に切り替えた後は、docker.sock が使用できなくなるため、コンテナ内で docker コマンドを実行してイメージをビルドできなくなることに注意してください。そこで次に、docker.sock を使用せずにイメージをビルドするいくつかの方法を紹介する必要があります。

<<:  クラウド ネイティブに関する 3 つの質問: 避けられない過去と現在は何ですか?

>>:  SaaS が適切に実行されているかどうかを知りたいですか?これら3種類の分析指標を理解しなければなりません!

推薦する

ウェブサイトは定期的に最適化および更新されており、世界ランキングは着実に向上しています。

今年7月18日にウェブサイトの登録に成功しました。当時、ウェブサイトの世界ランキングは150万を超え...

タオバオがキャッシュバックを禁止、リベートサイトに打撃:モグジエとメイリシュオは影響を受けない

中国ビジネスニュースの記者、習大偉が成都から報告する。 「電子商取引プラットフォームの販売モデルの大...

#ブラックウィーク5#: インターサーバー - 仮想ホスト50%オフ/SSサポート/登録ドメイン名1.99

interserver.net は 16 年の歴史を持つホスティング会社です。現在、ブラック フライ...

電子商取引マーケティングには競争力のある武器が必要であり、ソフト商品は必要な手段である

企業の市場収益を決定する最も重要な位置はどこでしょうか?テレビやラジオの広告の時間ではありません。シ...

Linux システムの仮想メモリはまさに落とし穴です。

仮想メモリがオペレーティング システムにおける最も重要な概念の 1 つであることは間違いありません。...

クラウドコンピューティングにおける寡占競争は続く

クラウドコンピューティングの分野では、近年、Amazon、Microsoft、Google などのテ...

Alibaba Cloud NativeにおけるDaprの実践

サービスメッシュとは何ですか? 2010年以降、SOAアーキテクチャは中規模および大規模インターネッ...

中小企業が新しいアイデアを生み出し、ウェブサイトで質の高い記事を見つけるにはどうすればいいのか

ウェブサイトのコンテンツは、あらゆるサイトが長期的に存在し発展していくための基盤であり、特に均質化が...

ブログキャリアを長くするための6つの文章

独立系ブログは皆さんもよくご存知だと思います。Lu Songsong 氏や Mou Changqin...

ステーショングループ操作は不正行為ですか?

【はじめに】Pi Zirui の SEO に関する詳細な分析を読んで、いくつか考えました。SEO の...

分散アーキテクチャの過去と現在を理解するために、1つの画像で段階的に説明します。

[[267639]]目次:分散アーキテクチャとは何ですか?分散アーキテクチャの進化分散型サービスが...

SEO外部リンク構築の今後の方向性について簡単に議論する

外部リンク: 外部リンクとは、他の人の Web サイト上にあり、あなたの Web サイトへのリンクが...

クラウド コンピューティング サービスが ERP を近代化する方法

クラウド コンピューティング テクノロジーは、従来の ERP アプローチと比較して、セキュリティと可...

ジャック・マー、アリババ再編:30社に分割し、上場に向けて3社を統合か

財経記者 宋偉アリババは、同社のエコシステムの再構築を主な目標として、大きな変革を遂げている。まず約...

ネットイースクラウドミュージック、中国国際ソフトウェア博覧会で教育や医療などの革新的なソリューションを発表

6月29日から7月2日まで、2018年ソフトウェア博覧会が北京で開催されました。 200社を超える著...