[クラウドネイティブ] Containerd ctr と crictl クライアントコマンドの紹介と実践的な操作 (nerdctl)

[クラウドネイティブ] Containerd ctr と crictl クライアントコマンドの紹介と実践的な操作 (nerdctl)

1. 概要

Docker ランタイムの後継である Containerd は、Kubernetes 1.7 の時点で Kubelet と直接統合されました。ただし、ほとんどの場合、私たちは Docker に精通しているため、クラスターをデプロイするときにデフォルトの dockershim を使用します。 kubelet バージョン 1.24 以降では、dockershim は完全に削除され、Containerd がデフォルトで使用されます。もちろん、cri-dockerd アダプターを使用して Docker Engine を Kubernetes と統合することもできます。公式ドキュメントを参照してください。

2. Containerdの共通コマンド操作

Containerd に切り替えた後、以前使用していた docker コマンドは使用されなくなりました。代わりに、crictl​ と ctr という 2 つのコマンド クライアントに置き換えられました。

  • crictl​ は、CRI インターフェース仕様に準拠したコマンドライン ツールであり、kubelet ノード上のコンテナ ランタイムとイメージを検査および管理するためによく使用されます。
  • ctr​ は containerd のクライアント ツールです。
  • ctr -v​ は containerd のバージョンを出力し、crictl -v は k8s の現在のバージョンを出力します。結果から、明らかに crictl が k8s に使用されていることがわかります。
  • 一般的に、crictl コマンドは、ホストに k8s をインストールした後にのみコマンド ラインに表示されます。 CTR は k8s とは関係ありません。ホストに containerd サービスをインストールした後、CTR コマンドを使用できます。

crictl コマンドを使用する前に、/etc/crictl.yaml を次のように設定する必要があります。

ランタイム-エンドポイント: unix : /// run / containerd / containerd .sock
イメージ-エンドポイント: unix : /// run / containerd / containerd .sock
タイムアウト: 10
デバッグ: false

次のコマンドで設定することもできます:

 crictl config ランタイム-エンドポイント unix : /// run / containerd / containerd .sock
crictl config image -エンドポイント unix : /// run / containerd / containerd .sock

注文

ドッカー

ctr (コンテナ)

crictl (Kubernetes)

実行中のコンテナを表示する

ドッカーps

ctr タスク ls/ctr コンテナ ls

クリクトルps

ミラーを見る

Docker イメージ

ctr イメージ ls

crictl画像

コンテナログを表示する

docker ログ

なし

crictl ログ

コンテナデータ情報を表示する

ドッカー検査

ctr コンテナ情報

crictl 検査

コンテナリソースの表示

docker 統計

なし

crictl 統計

既存のコンテナを起動/停止する

docker の開始/停止

ctr タスクの開始/終了

crictl 開始/停止

新しいコンテナを実行する

ドッカー実行

ctr 実行

なし(最小単位はポッド)

タグ付け

docker タグ

ctr 画像タグ

なし

新しいコンテナを作成する

ドッカー作成

ctr コンテナ作成

crictl 作成

画像のインポート

ドッカーロード

ctr 画像のインポート

なし

画像のエクスポート

ドッカー保存

ctr イメージエクスポート

なし

コンテナの削除

ドッカーrm

ctr コンテナ rm

crictl rm

画像の削除

ドッカー

ctr 画像 rm

crictl rmi

画像をプルする

docker プル

ctr イメージ プル

ctictl プル

プッシュ画像

ドッカープッシュ

ctr画像プッシュ

なし

コンテナ内でログインまたはコマンドを実行する

ドッカー実行

なし

crictl 実行

使用していない容器を空にする

docker イメージのプルーニング

なし

crictl rmi --prune

より多くのコマンド操作については、コマンド ラインにコマンドを直接入力してヘルプを表示できます。

 docker --ヘルプ
ctr --ヘルプ
crictl --help

Containerd にも名前空間の概念があるため、上位層のオーケストレーション システムをサポートするために、ctr クライアントは主に k8s.io、moby、default の 3 つの名前空間を区別します。 crictl​ を使用して行った上記の操作はすべて k8s.io​ 名前空間内にあります。 ctr​ を使用して画像リストを表示する場合は、-n パラメータを追加する必要があります。 crictl には k8s.io 名前空間が 1 つしかありませんが、 -n パラメータはありません。

[ヒント] ctr images pull によってプルされたイメージはデフォルトで default に配置されますが、crictl pull と kubelet によってプルされたイメージはどちらもデフォルトで k8s.io 名前空間に配置されます。したがって、ctr を介して画像をインポートするときは、名前空間の指定に特に注意してください。

 # 注意- n はコマンドの最後に配置できません。次の行に表示される画像は同じです。
ctr -n = k8s.ioイメージ ls
ctr -n k8s .ioイメージ ls

# crictl には-nパラメータがなく、すべての操作は ` k8s.io`名前空間で実行されます。
crictl イメージ ls
crictl画像
# crictl イメージリスト= ctr - n = k8s .ioイメージリスト
# crictl イメージ ls = ctr - n = k8s .ioイメージ ls
# crictl images = ctr - n = k8s .ioイメージリスト
# crictl images = ctr - n = k8s .ioイメージ ls

# ctrコマンドを使用して、イメージをインポートする名前空間を指定します
ctr - n = k8s .ioイメージインポートダッシュボード.tar

#画像を表示すると、クエリできることがわかります
crictl画像

3. コンテナクライアントツール nerdctl

docker コマンドと同じ構文を持つ nerdctl を使用することをお勧めします。 GitHub ダウンロード リンク: https://github.com/containerd/nerdctl/releases

  • 簡略版 (nerdctl--linux-amd64.tar.gz): nerdctl のみを含む
  • フル (nerdctl-full--linux-amd64.tar.gz): containerd、runc、CNI などの依存関係が含まれています

nerdctl の目的は、docker の機能を単純にコピーすることではありません。また、lazy-pulling や imgcrypt など、docker にはない多くの機能も実装しています。詳細についてはnerdctlを参照してください。

遅延イメージプル機能については、こちらの記事を参照してください: Containerd は Stargz Snapshotter を使用してイメージプルを遅延します

1) nerdctl (ライト版) をインストールする

 https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-0.22.2-linux-amd64.tar.gzをダウンロードしてください
# 解凍
tar - xf nerdctl - 0.22 .2 - linux - amd64 .tar .gz

ln -s / opt / k8s / nerdctl / nerdctl / usr /ローカル/ bin / nerdctl

2) nerdctl をインストールします (フルバージョン、ここではインストールされません)

 https://github.com/containerd/nerdctl/releases/download/v0.22.2/nerdctl-full-0.22.2-linux-amd64.tar.gzをダウンロードしてください。
tar - xf nerdctl - full - 0.16 .0 - linux - amd64 .tar .gz - C / usr / local /

cp /usr/local/lib/systemd/system/*.service / etc /systemd/システム/

サービスビルドキットを起動する

 systemctl ビルドキットのコンテナを有効にする --now
systemctl ステータス ビルドキット コンテナ

3) イメージ構築をサポートするビルドキットをインストールする

Buildkit GitHub アドレス: https://github.com/moby/buildkit

nerdctl の簡易バージョンは、containerd を介して直接イメージを構築するために使用することはできません。イメージ構築を実現するには、buildkit グループと一緒に使用する必要があります。もちろん、上記の完全な nerdctl をインストールすることもできます。 Buildkit プロジェクトは、OCI 標準イメージ構築をサポートする Docker のオープンソース ビルド ツールキットです。主に以下の部分が含まれます。

  • サーバー buildkitd は現在、runc と containerd をワーカーとしてサポートしており、runc がデフォルトです。
  • クライアント buildctl は、Dockerfile を解析し、サーバー buildkitd にビルド要求を送信する役割を担います。

Buildkit は典型的な C/S アーキテクチャであり、クライアントとサーバーは同じサーバー上に存在しない場合があります。また、nerdctl は、イメージの構築に関しては buildkitd のクライアントとしても使用できます。

 # https://github.com/moby/buildkit/releases
https://github.com/moby/buildkit/releases/download/v0.10.4/buildkit-v0.10.4.linux-amd64.tar.gzをダウンロードしてください

tar - xf ビルドキット- v0 .10 .4 .linux - amd64 .tar .gz - C / usr / local /

ここからダウンロードできるビルドキットの起動ファイルを設定します: https://github.com/moby/buildkit/tree/master/examples/systemdbuildkitでは2つのファイルを設定する必要があります

  • /usr/lib/systemd/system/buildkit.socket
 cat > /usr/lib/systemd/system/buildkit.socket <<EOF
[ユニット]
説明notallow=BuildKit
ドキュメントはhttps://github.com/moby/buildkitから入手できます
[ソケット]
リッスンストリーム=%t/buildkit/buildkitd.sock
ソケットモード=0660
[インストール]
WantedBy=ソケット.ターゲット
終了
  • /usr/lib/systemd/system/buildkit.service
 cat > /usr/lib/systemd/system/buildkit.service << EOF
[ユニット]
説明者= BuildKit
必要条件= buildkit.socket
= buildkit.socket
ドキュメントhttps://github.com/moby/buildkit​ から入手できます
[サービス]
# runc ビルドを containerd ビルドに置き換える
ExecStart =/ usr / local / bin / buildkitd --addr fd://
[インストール]
WantedBy =マルチユーザー.target
終了

ビルドキットを開始

 systemctlデーモン-reload
systemctl ビルドキットを有効にする--now

4. 実際の操作

1) containerd設定ファイルを変更する

前回の記事[Cloud Native]も参考にしてください。ビッグデータ] ミラーウェアハウスハーバーをMinIOオブジェクトストレージに接続

 containerd設定のデフォルト> /etc/containerd/config.toml

構成は次のとおりです。

 [プラグイン。 "io.containerd.grpc.v1.cri" .レジストリ]
config_path = ""

[プラグイン。 "io.containerd.grpc.v1.cri" .registry .auths ]

[プラグイン。 [ "io.containerd.grpc.v1.cri" .registry .configs ]
[プラグイン。 "io.containerd.grpc.v1.cri" .registry .configs["myharbor-minio.com" .tls ]
insecure_skip_verify = true #検証をスキップする
ca_file = "/etc/containerd/myharbor-minio.com/ca.crt"
[プラグイン。 "io.containerd.grpc.v1.cri" .registry .configs[ "myharbor-minio.com" .auth ]
ユーザー名= "admin"
パスワード= "Harbor12345"

[プラグイン。 [ "io.containerd.grpc.v1.cri" .レジストリ.ヘッダー]

[プラグイン。 "io.containerd.grpc.v1.cri" .registry .mirrors ]
[プラグイン。 "io.containerd.grpc.v1.cri" .registry .mirrors . [[myharbor-minio.com] ]
エンドポイント= [ "https://myharbor-minio.com" ]

containerdを再起動する

 #設定を再読み込み
systemctlデーモン-reload
#containerdを再起動
systemctl コンテナを再起動します

注: この設定ファイルは crictl および kubelet 用です。 ctr はこの構成ファイルを使用できません。 ctr は CRI を使用しないため、プラグインの "io.containerd.grpc.v1.cri" 構成を読み取りません。

2) ctrは画像を引っ張ったり押したりする

 # イメージを港にプッシュする
ctr --namespace=k8s.io イメージをプッシュ myharbor-minio.com/bigdata/minio:2022.8.22-debian-11-r0 ​​--skip-verify --user admin:Harbor12345

# --namespace=k8s.io は名前空間を指定しますが、これは必須ではなく、環境に依存します。
# --skip-verify 検証をスキップする
# --user はハーバーのユーザー名とパスワードを指定します

CTR イメージのプル--user admin:Harbor12345 --tlscacert=/etc/containerd/myharbor-minio.com/ca.crt myharbor-minio.com/bigdata/minio:2022.8.22-debian-11-r0

-u user:password で毎回 ctr pull/ctr push を使用したくない場合は、nerdctl を使用できます。

3) イメージ構築

 cat > Dockerfile << EOF
nginxから: alpine
実行echo ' Hello Nerdctl From Containerd ' > /usr/share/nginx/html/index.html
終了

次に、ファイルが配置されているディレクトリでイメージ構築コマンドを実行します。

 # - n で名前空間を指定しないと、crictl はそれを認識できず、kubelet はそれを使用できません。デフォルトでは、デフォルトの名前空間にあります。
nerdctl -n k8s .io build -t nginx : nerctl -f ./Dockerfile .
### パラメータの説明
# - t: 画像名を指定する
# . : 現在のディレクトリ Dockerfile
# - f: Dockerfileのパスを指定する
# --no-cache: キャッシュなし

4) タグ

 # crictl には tag コマンドがないため、nerdctl と ctr のみを使用できます。名前空間を指定する必要があります。指定しないと、kubelet は使用できません。
ctr - n k8s .io i タグ
nerdctl - n k8s .ioタグ nginx : nerctl myharbor - minio .com / bigdata / nginx : nerctl
# ctr - n k8s .ioタグ nginx : nerctl myharbor - minio .com / bigdata / nginx : nerctl
# 画像を見る
nerdctl - n k8s .ioイメージ myharbor - minio .com / bigdata / nginx : nerctl

5) 画像をHarborにプッシュする

最初のケース: http モードの場合、構成は次のようになります。

 # 次の2つのいずれかが機能します
# mkdir -p /etc/docker/certs.d/myharbor-minio.com : 443
mkdir -p /etc/containerd/certs.d/myharbor-minio.com : 443

cat > /etc/containerd/certs.d/myharbor-minio.com\:443/hosts.toml << EOF
サーバー= "https://docker.io"

[ホスト。 「http://myharbor-minio.com:80」 ]
機能= [ "プル" "解決" "プッシュ" ]
#skip_verify =
#ca = "ca.crt" #相対パス
#ca = "/opt/auth/ca.crt" #絶対パス
#ca = [ "/opt/auth/ca.crt" ]
#ca = [ "ca.crt" ]
#client = [ [ "/opt/auth/nginx.cclinux.cn.crt" , "/opt/auth/nginx.cclinux.cn.key" ] ]

終了

最初のケース: https モードの場合、構成は次のようになります。

 # 次の2つのいずれかが機能します
# mkdir -p /etc/docker/certs.d/myharbor-minio.com : 443
mkdir -p /etc/containerd/certs.d/myharbor-minio.com : 443

cat > /etc/containerd/certs.d/myharbor-minio.com\:443/hosts.toml << EOF
サーバー= "https://docker.io"

[ホスト。 「https://myharbor-minio.com:443」 ]
機能= [ "プル" "解決" "プッシュ" ]
スキップ検証= true
#ca = "ca.crt" #相対パス
#ca = "/opt/auth/ca.crt" #絶対パス
#ca = [ "/opt/auth/ca.crt" ]
ca = [ "/etc/containerd/myharbor-minio.com/ca.crt" ]
#client = [ [ "/opt/auth/nginx.cclinux.cn.crt" , "/opt/auth/nginx.cclinux.cn.key" ] ]
終了

nerdctl経由でハーバーにログイン

エコー Harbor12345 | nerdctl ログイン--username "admin" --password-stdin myharbor-minio.com:443

# nerdctlログイン--username "admin" --password Harbor12345 myharbor-minio.com:443

# サインアウト
# nerdctl ログアウト

港にイメージを押し始める

 ### 港へのプッシュ
# --insecure-registry は HTTPS 証明書の検証をスキップし、プレーン HTTP にフォールバックできるようにします
nerdctl --insecure-registry --namespace=k8s.io をプッシュします。myharbor-minio.com/bigdata/nginx:nerctl
# ctr --namespace=k8s.io イメージをプッシュ myharbor-minio.com/bigdata/nginx:nerctl --skip-verify --user admin:Harbor12345

# --namespace=k8s.io は -n と同様に名前空間を指定しますが、必須ではなく、環境に依存します
# --skip-verify 検証をスキップする
# --user はハーバーのユーザー名とパスワードを指定します

<<:  クラウドを超えた持続可能なコンピューティング

>>:  VMware: 2023 年の IT テクノロジー トレンドの展望

推薦する

何度も K-ed されたウェブサイトを持つ 6 歳のウェブマスターから学んだ教訓

私は 2006 年の終わりに Web サイトの構築を開始しました。そして、あっという間に 6 年間 ...

レガシーアプリケーションを最新化するための Docker ツール

[51CTO.com クイック翻訳] 過去 2 年間、Docker は顧客と緊密に連携し、Docke...

ウェブサイトマーケティングのための鋭い剣を作る:ブログマーケティング

ウェブサイトマーケティングのための鋭い剣を作る:ブログマーケティング今日では、ブログ マーケティング...

2013 年に医療業界のネットワーク マーケティングが直面する 5 つの大きな困難!

世界の終わりは予想通りには来ず、2012 年も終わりに近づいています。2013 年が近づいています。...

クラウドテクノロジー|ハイブリッドクラウド管理プラットフォームのマルチリージョンアーキテクチャ

日本の矢口史明監督はかつて、世界中で突然停電が発生し、すべての電気機器が機能しなくなったときに生き残...

ウェブサイトマーケティングトーク: Tencent プロダクトマーケティング

ほとんどのウェブマスターは、Baidu の Tieba、Baidu Knows、Baidu Ency...

クラウドコンピューティング市場規模は2022年に4,740億ドルに達する可能性がある

12月30日のニュースによると、2022年までに世界のクラウドコンピューティング市場は2021年の4...

外国貿易ウェブサイトで競合ブランドのキーワードを追跡する方法

まず、競合他社が設定しているキーワードや、製品の説明に使用している用語など、競合他社のキーワードを理...

この記事では、スレッド共有からネイティブメソッドスタック、Javaヒープまで、JVMメモリモデルについて詳しく説明します。

序文JVM メモリ モデルを正式に学習する前に、次の点に注意してください。 JVM メモリ モデルと...

Webfactionはホスティングに100ドルを提供します

webfaction は創立 10 周年を記念して、現在、仮想ホスティング料金 100 ドルを全員に...

ライブショッピングレポート

のダブルイレブン流行の第一波は、明らかにこれまで以上に激しいものとなっています。戦線が長引く中、企業...

仮想化について語る - カーネルとIO

[[211645]]序文時間は流れる水のように、あっという間に過ぎていきます。自分が仮想環境にいるの...

テンセントクラウドデータベースブランドが「エンタープライズレベル分散型データベースTDSQL」にアップグレードし、技術の最前線をリード

12月24日、テンセントクラウドはデータベースブランドTDSQLの新たな戦略的アップグレード計画と今...

Sinovation Ventures の Wang Hua: インターネットでトラフィックを生成する方法に関する 3 つの「相対的な真実」

トラフィックとユーザーの生成は一度きりのことではなく、モバイルで持続的かつ長期的な運用が必要です。な...