[クラウドネイティブ] 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 テクノロジー トレンドの展望

推薦する

偽造貿易産業の悲喜劇:徐々に衰退し、消滅へ

偽造品貿易産業は福建省莆田市で始まったようで、偽造品貿易を行っている人がたくさんいます。海外の電子商...

Docker の代替品: SaaS アプリケーション向けの 10 の Docker 代替品

Docker テクノロジーはインフラストラクチャ管理の分野に革命をもたらし、現在では Docker ...

SEOマスターは、主流の検索エンジンのペナルティメカニズムと対応戦略を包括的に分析します

少し経験のあるSEO担当者は、SEOにはブラックハットとホワイトハットの間に明確な境界がないことを知...

バイトダンスの成長コード

達人とは、たとえ誰かが知っていることをあなたに伝えたとしても、あなたがそれを学ぶことができない人です...

Baidu Videoはすべての海賊版コンテンツを削除し、エンターテイメントプラットフォームに生まれ変わります

テンセントテクノロジーの羅宋は12月30日に報告した。最近、中国オンラインビデオ著作権侵害対策連盟か...

WeChatパブリックアカウントに接続するSogou WeChat検索が正式にリリースされました!

Sogou は WeChat と提携し、WeChat パブリック プラットフォームと記事検索 (we...

キンディー・インターナショナル(00268)の年間成長率はハンセン指数の10倍であり、人気のあるQDIIファンドとなっている。

改革開放以来の企業の成長の軌跡を注意深く見てみると、「偉大」の称号を与えられる企業はすべて「長期主義...

Kubernetes ログ収集の一般的なルーチン。これを使えば間違いはありません。

1. 準備1. コンテナログについてDocker ログは、Docker エンジン ログとコンテナ ロ...

簡潔な分析: 地方タレント局が窮地を乗り切る方法

私がこの記事を書いた主な理由は、私自身が人材ネットワークの構築に取り組んでいるのですが、実際にそれを...

江島クラウド:企業のデジタル革新を促進する普遍的な開発

デジタル時代においては、すべての人による「開発」が新たな働き方となるでしょう。ガートナーの分析による...

SEO の基本: 内部リンクとポジションウェイト

少し前に、真命題、偽命題、ベイジアンアルゴリズム、疑似命題についての記事を書きました。一度にたくさん...

インターネットを再構築するために新しいオープングリッドアライアンスが設立されました

VMware (NYSE: VMW) と Vapor IO は最近、オープン グリッドを定義および加...

クラウドエッジハイブリッド戦略が IoT 導入の成功に及ぼす影響

COVID-19 の世界的パンデミックを受けて、データのアクセシビリティ、可視性、相互接続性は、不安...

moecloud: 月額25元、ロサンゼルスCN2 GIA VPS、KVM仮想化、「netflix」を視聴可能

中国の販売業者であるmoecloudは、ロサンゼルスデータセンターのCN2 GIA回線で主にVPSを...

APPのプロモーションチャネルを選択するにはどうすればいいですか?

アプリがリリースされた後、さまざまなアプリプロモーションチャネルを通じて製品を宣伝することは、重要な...