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 はハーバーのユーザー名とパスワードを指定します |