先ほど、containerd の開発履歴と基本的な使用方法について学習しました。このセクションでは、Kubernetes クラスターのコンテナ ランタイムとして containerd を使用します。 先ほどインストールしたクラスターは、デフォルトでコンテナ ランタイムとして Docker を使用します。では、コンテナ ランタイムを Docker から containerd に切り替えるにはどうすればよいでしょうか? メンテナンスノードまず、切り替えるノードをメンテナンス モードとしてマークし、ノード上で実行されている Pod を強制的に削除します。これにより、切り替えプロセス中のアプリケーションの通常の動作への影響を最小限に抑えることができます。たとえば、最初にノード 1 を containerd に切り替えます。 まず、kubectl cordon コマンドを使用して、node1 ノードをスケジュール不可としてマークします。
上記のコマンドを実行すると、node1 は SchedulingDisabled 状態に変わり、スケジュールできないことが示されます。この方法では、新しく作成された Pod は現在のノードにスケジュールされません。 次に、node1 ノードをメンテナンスし、kubectl のdrain コマンドを使用してノードをメンテナンスし、ノード上の Pod を削除します。
上記のコマンドは、node1 上の Pod を強制的に削除します。 DaemonSet コントローラーによって管理される Pod を他のノードに追い出す必要がないため、これらの Pod を無視するためのパラメーター --ignore-daemonsets を追加しました。ノードが削除された後、ノードに対してメンテナンス操作を実行できます。コンテナランタイムの切り替えに加えて、これも実行できます。たとえば、ノード構成の変更やカーネルのアップグレードなどを行う必要がある場合は、まずノードを削除してからメンテナンスを実行できます。 containerdへの切り替え次に、docker、containerd、kubelet を停止します。
インストールした Docker はデフォルトでバックエンド コンテナ ランタイムとして containerd を使用するため、containerd を別途インストールする必要はありません。もちろん、Docker と containerd を完全にアンインストールしてから再インストールすることもできます。ここでは、以前にインストールした containerd を直接使用することを選択します。 CRI は containerd にデフォルトで実装されていますが、プラグインとして構成されているためです。以前は、Docker に付属する containerd はデフォルトで CRI プラグインを無効にしていました (構成 disabled_plugins = ["cri"] を使用)。そのため、ここではデフォルトの構成ファイルを再生成して上書きします。
上記の設定ファイルについてはすでに紹介しました。まず、デフォルトの一時停止イメージを国内アドレスに変更し、[plugins."io.containerd.grpc.v1.cri"] の下の sandbox_image を置き換えます。
イメージ ウェアハウスのアクセラレータ アドレスも構成します。
次に、kubelet 設定を変更し、コンテナ ランタイムを containerd に構成します。 /etc/sysconfig/kubelet ファイルを開き、いくつかの追加の kubelet 起動パラメータを追加できます。構成は次のとおりです。
上記の構成では、2 つのパラメータを追加しました。 --container-runtime パラメータは、使用するコンテナ ランタイムを指定するために使用されます。オプションの値はdockerまたはremoteです。デフォルトはdockerです。ここでは containerd などのコンテナ ランタイムを使用しているため、リモート値として構成されます (つまり、docker 以外のコンテナ ランタイムはリモートとして指定する必要があります)。次に、2 番目のパラメータ --container-runtime-endpoint を使用して、リモート ランタイム サービスのエンドポイント アドレスを指定します。 Linux システムでは、通常、UNIX ソケットが使用されます。たとえば、ここでは containerd に接続するためのソケット アドレス unix:///run/containerd/containerd.sock を指定します。
設定が完了したら、containerd と kubelet を再起動します。
再起動が完了したら、ノードのステータスが正常かどうかを確認します。
ノードを取得するときに、-o wide を追加して、ノードの詳細情報を表示します。上記の比較から、node1 のコンテナ ランタイムが containerd://1.4.4 に切り替わったことがわかります。 最後に、Pod リソースをスケジュールできるように、node1 をクラスターに再度追加します。
同じ方法を使用して他のノードを処理し、クラスター全体をコンテナ ランタイム containerd に切り替えます。 クリクトルこれで、node1 で ctr コマンドを使用して containerd を管理し、k8s.io という追加の名前空間があることを確認できます。
前述のように、Kubernetes クラスターのすべての containerd リソースは k8s.io 名前空間にありますが、docker リソースはデフォルトで moby にあります。もちろん、現在 moby にはデータはありませんが、k8s.io 名前空間には多くのイメージとコンテナ リソースがあります。
もちろん、ctr コマンドを使用してイメージやコンテナ リソースを直接管理することもできますが、使用中にこのツールが docker CLI ほど便利ではないことがはっきりとわかります。使いやすさと機能性を考慮すると、管理ツールとして crictl を使用することをお勧めします。 crictl は CRI 互換のコンテナ ランタイム用の CLI を提供します。これにより、CRI ランタイム開発者は Kubernetes コンポーネントを設定せずにランタイムをデバッグできます。 次に、crictl ツールを使用してコンテナ ランタイムの管理効率を向上させる方法について簡単に紹介します。 インストールまず、crictl ツールをインストールする必要があります。 cri-tools のリリース ページから対応するバイナリ パッケージを直接ダウンロードし、解凍して PATH パスに配置します。
これは、crictl ツールが正常にインストールされたことを証明します。 使用法crictl をインストールしたら、このツールの一般的な使用方法をいくつか学びましょう。 まず、デフォルトの設定ファイル(デフォルトでは /etc/crictl.yaml)を変更する必要があります。ファイル内のコンテナ ランタイムとイメージのエンドポイント アドレスを指定します。内容は以下のとおりです。
設定が完了したら、crictl コマンドを使用できます。 ポッドリストを取得crictl pods コマンドを使用すると、以下に示すように、現在のノードで実行されている Pod のリストを取得できます。
--name パラメータを使用して特定の Pod を取得することもできます。
ラベル別にポッド リストをフィルタリングすることもできます。
ミラーリストを取得すべてのイメージを取得するには、crictl images コマンドを使用します。
コマンドの後に -v パラメータを追加して、イメージの詳細情報を表示することもできます。
コンテナのリストを取得する実行中のコンテナのリストを取得するには、crictl ps コマンドを使用します。
crictl ps -h を通じて取得できる他のオプション パラメーターは多数あり、たとえば、最近作成された 2 つのコンテナーを表示するなどです。
ステータスでフィルタリングするには -s オプションを使用します。
コンテナ内でコマンドを実行するcrictl は exec に似たコマンドもサポートします。たとえば、コンテナ ID が c8474738e4587 のコンテナで date コマンドを実行するには、次のようにします。
コンテナログを出力するコンテナのログ情報も取得できます。
kubectl logs と同様に、-f オプションを使用してログ出力を追跡することもできます。また、--tail N を使用して、最新の N 行のログの出力を指定することもできます。 リソース統計コンテナ リソースの使用状況を一覧表示するには、crictl stats コマンドを使用します。
さらに、次のようなイメージやコンテナに関連するいくつかの操作もサポートされています。
詳細については、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/のようなディレクトリに保存されます。
containerdをKubernetesコンテナランタイムとして使用すると、コンテナログはkubeletによってディスクに書き込まれ、/var/log/pods/に直接保存されます。
したがって、ログを収集する場合、理論的には両方のソリューションに互換性があり、基本的に変更は必要ありません。 もちろん、これらの違いに加えて、イメージ構築プロセスは私たちが最も注意を払う必要があるものかもしれません。 containerd に切り替えた後は、docker.sock が使用できなくなるため、コンテナ内で docker コマンドを実行してイメージをビルドできなくなることに注意してください。そこで次に、docker.sock を使用せずにイメージをビルドするいくつかの方法を紹介する必要があります。 |
<<: クラウド ネイティブに関する 3 つの質問: 避けられない過去と現在は何ですか?
>>: SaaS が適切に実行されているかどうかを知りたいですか?これら3種類の分析指標を理解しなければなりません!
今年7月18日にウェブサイトの登録に成功しました。当時、ウェブサイトの世界ランキングは150万を超え...
中国ビジネスニュースの記者、習大偉が成都から報告する。 「電子商取引プラットフォームの販売モデルの大...
interserver.net は 16 年の歴史を持つホスティング会社です。現在、ブラック フライ...
企業の市場収益を決定する最も重要な位置はどこでしょうか?テレビやラジオの広告の時間ではありません。シ...
仮想メモリがオペレーティング システムにおける最も重要な概念の 1 つであることは間違いありません。...
クラウドコンピューティングの分野では、近年、Amazon、Microsoft、Google などのテ...
サービスメッシュとは何ですか? 2010年以降、SOAアーキテクチャは中規模および大規模インターネッ...
ウェブサイトのコンテンツは、あらゆるサイトが長期的に存在し発展していくための基盤であり、特に均質化が...
独立系ブログは皆さんもよくご存知だと思います。Lu Songsong 氏や Mou Changqin...
【はじめに】Pi Zirui の SEO に関する詳細な分析を読んで、いくつか考えました。SEO の...
[[267639]]目次:分散アーキテクチャとは何ですか?分散アーキテクチャの進化分散型サービスが...
外部リンク: 外部リンクとは、他の人の Web サイト上にあり、あなたの Web サイトへのリンクが...
クラウド コンピューティング テクノロジーは、従来の ERP アプローチと比較して、セキュリティと可...
財経記者 宋偉アリババは、同社のエコシステムの再構築を主な目標として、大きな変革を遂げている。まず約...
6月29日から7月2日まで、2018年ソフトウェア博覧会が北京で開催されました。 200社を超える著...