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

推薦する

リバプール・フットボールクラブはクラウド技術とデータ分析技術を大いに活用している

リバプールが最近シュツットガルトから日本人ミッドフィールダーの遠藤航を獲得したことで、日本での同サッ...

中小企業のデジタルトランスフォーメーション成功の鍵は、エンタープライズデジタルプラットフォームをうまく活用できるかどうかにある

企業のデジタル化のペースは長年にわたり止まることなく続いていますが、期待通りの成果を達成するのは困難...

Webmaster.com の毎日のレポート: 共同購入ウェブサイトが生死の分かれ目に直面している; Xiaomi が監査に合格

1. 年末に資本チェーンは大きな試練に直面する。春節は共同購入サイトの生き残りを左右する分岐点となる...

ウェブマスターネットワークニュース:インターネットカンファレンスが開幕、アリババとテンセントが狭い道で出会う

1. ジャック・マーの秘密の「制限付き株式ユニットプラン」ローリングインセンティブ「オプションを行使...

SEO実践テクニック - フレンドリーリンクの作り方

ウェブサイトにフレンドリーリンクを作成するにはどうすればいいですか?検索エンジンでのサイトのランキン...

App Store アップデート: AR ゲームが Apple のプロモーションの焦点に、独立系ゲームの露出が増加

AppleはiOS 11アップデートをリリースしました。システム UI 要素がより丸みを帯びるという...

旅行ウェブサイトのバナー広告のROIを最適化する方法

これは、TravelSpike の CEO 兼共同創設者である Ryan Bifulco によるゲス...

vaicdn: 防御力の高い CDN、帯域幅が大きく、防御力が高く、攻撃によるレイテンシへの影響がなく、申告や実名登録の必要がない

CDN マーチャントである vaicdn は、広い帯域幅、高い防御力、低いレイテンシ、大規模なアジア...

ウェブページの価値がページのランキングを決定する

少し前に、BSGフォーラムでBaidu Search R&D部門の「インターネットページの価...

クラウドプロバイダーがデジタル変革を推進する方法

クラウドプロバイダーがデジタル変革を推進する方法エッジ、5G、IoT、AI/機械学習、データと分析を...

#レビュー: conoha - 1ヶ月ぶりに日本のデータセンターVPSを再度テスト

1か月前、conohaの新しいSSD VPSを見た後、すぐに日本のVPSのレビューを書きました。こち...

Weiboも有効活用しましょう。TaobaoセラーがWeChatマーケティングを効果的に運用する方法!

TaobaoとWeChatは互換性がないことは誰もがよく知っています。タオバオには独自の「王来」があ...

dediserve-$5/kvm/香港/シンガポール/16 コンピュータ ルーム/1g メモリ/20g SSD/1T トラフィック/500M ポート

dediserve.com は、当初の 9 室から現在の 16 室まで、いくつかの新しいコンピュータ...

エッジコンピューティングをコアシステムと統合する方法

エッジ コンピューティング デバイスを企業の中核 IT システムと連携させるには、5 つの主要な課題...

ハイブリッドクラウドアプリケーションの導入を数秒でサポートするInspurの最新Yunhai OSの分析

世界の進歩を推進するのは「怠惰な思考」だと言う人もいます。確かに、利便性を追求したIT技術革新はある...