找回密码
 注册
查看: 37|回复: 7

containerd 作为容器kubernets后端容器 相关操作

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2025-1-16 17:19:41 | 显示全部楼层 |阅读模式
配置Containerd: s! B$ q4 X1 w( ~6 p5 j
在配置文件/etc/containerd/config.toml中添加以下内容:
8 M$ f+ F7 Z% d! E" E% N" c
" b) }5 i8 m) M5 P4 y: X! s% ^6 l[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]5 B' Z" ]5 k' p* E' y* ]' D
...: ?4 K/ ]4 V8 j) `. o* n/ f2 y3 `
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
) p: R1 [* }8 i3 u   SystemdCgroup = true
9 a% C2 L1 J" C# \, t
: @, J8 L" T  h* r( \8 p+ r6 r$ s重新加载Containerd配置并启动服务
6 w/ `6 v* D/ p使用以下命令重新加载配置文件并启动Containerd服务:; K5 Z9 D" Z: B3 m

4 q' ~- _$ T% l$ p: @
+ e1 ^4 K& m/ Q; g  e4 c/ T" osudo systemctl daemon-reload# o, C* b/ U% e
sudo systemctl restart containerd.service+ e0 J- }- a0 e0 R# u) j) A+ k9 o# S
验证Containerd安装是否成功4 m1 k, _( O7 s
运行以下命令验证Containerd是否已成功安装:
1 ^7 c. T% n3 ^, [
) K9 @8 u* S9 o! d$ e3 Z
/ y8 s3 s0 ?; L  n7 H8 q8 `, L- e) _( N. ^* a8 v: z
sudo ctr version$ B* T8 u0 M& M: z
输出应为:
2 X, V% E3 S, _6 b7 Q, a& b/ E8 ?1 t( o- u$ b; l
1 E" }$ f* X; h6 o& N. G  V: Y" b* h% D
codeClient:( ^4 V1 w1 ]# ?' t2 d2 j
Version:  1.5.57 q8 P3 Y+ d  Y) L
Revision: 09a19cb71a40ac5ab8686245e5a5fb5e5d25c144
& _% `" Y# _2 U2 s; L1 F; g2 n ...
: }' O2 J9 d' o* D: b
, r  D0 I# t4 {  T( G; MServer:' d" t& q2 c# F3 }
Version:  1.5.5( P' V" s8 l0 v
Revision: 09a19cb71a40ac5ab8686245e5a5fb5e5d25c144" t2 D( G1 a- q
...5 s2 c. {8 c0 O
以上就是在Linux系统中安装和部署Containerd的步骤,在安装和部署完成后,可以使用CLI命令或者API接口来管理容器和镜像,例如:" O& o5 G. O6 ^* _( t0 S& E

# B/ e6 Q2 b5 X/ ?
% i, ~2 f. T3 z4 L0 b, _6 o& t8 N8 m+ X/ G
# 拉取一个镜像
  J( d5 o/ P  x% v4 Y. i' Tcontainerd ctr image pull docker.io/library/nginx:latest
% }- c) A: b# z: Y& Q2 {% X2 w" @! A. w1 O& O% `7 }; a5 _; i: X
# 创建并启动一个容器
9 u, @# \/ B5 L9 x- c5 |containerd ctr run --rm docker.io/library/nginx:latest mynginx
( B# @$ K: W/ i( t1 l; o+ s. H" y4 C  ^9 l
# 停止并删除一个容器! X5 w/ b2 v! N, r3 P  `% i
containerd ctr stop mynginx
* Z1 O  ]0 w3 J' ]% x; _containerd ctr container rm mynginx; D6 X3 n+ [- }6 h, Q1 Z0 d6 k
Containerd还提供了CRI插件,可以用于Kubernetes集群中的容器运行时
8 o8 L. ^& ]* z0 y6 g* @  [0 m4 M. {% k3 z1 {" v2 m! D

% c( Q% V% g, P3 {$ _9 b+ z6 C) d3 t' G+ @7 B+ U$ B9 b* @5 f

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-1-16 17:27:10 | 显示全部楼层
#查看镜像:; ]3 \! G! `' `& h% P7 k" E% ?
ctr images ls
) q! x+ ]8 p: s--------* c7 {' l4 L) b% f7 h* v- j  n& }
& b8 O' p" p; M( S6 b  i

# |2 b2 i0 k0 @- J##下载镜像
% y* @- m- y4 p+ Q, Bcontainerd 支持oci标准镜像 所以可以直接使用docker官方或dockerfile构建的镜像
1 F) F, r0 A* k8 ]/ g
8 }" r& q- ~8 n& W) Y: ^ctr images pull  --platfrom linux/amd64  docker.io/library/nginx:alpine
5 O4 b5 Z/ s: p. f6 Y3 |* \3 Y* r. N* f
ctr images ls: |& o. @3 u& A+ U$ V

. A2 z! i/ B4 e0 M! z& g5 h4 p5 Z镜像挂载8 V" ]% O% j$ n
把已经下载的容器镜像挂载至当前文件系统
( K; ^( E9 v4 b, S, h9 Dctr images mount  docker.io/library/nginx:alpine /mnt2 |9 h. v' m1 b# z& x7 i. v/ a

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-1-16 17:29:46 | 显示全部楼层
1、Containerd镜像管理
9 j  D: j7 V# M1.1 Containerd容器镜像管理命令& Z* Q* _# Y: p" ~% _1 n7 ~; D
docker使用docker images命令管理镜像
/ a/ J. R: F7 O7 C( X- u, n单机containerd使用ctr images命令管理镜像,containerd本身的CLI$ F+ G: T6 {+ t5 @( W
k8s中containerd使用crictl images命令管理镜像,Kubernetes社区的专用CLI工具
& J/ n  i" o/ F9 b3 A7 I代码语言:text& S( A/ v, G$ @5 p# C3 m% T
复制
) u1 E) L. Q+ F7 S获取命令帮助
# j9 _0 k  ]/ r# ctr --help
1 G  c1 N7 i5 UNAME:
( |' W' C3 F# b" J# g# C   ctr -
7 [  a# n2 I  a  P        __3 R* a& r% t! X' k
  _____/ /______! y0 m" P4 e% X4 e/ b
/ ___/ __/ ___/
1 A: ^8 N1 o/ Z" e5 O/ /__/ /_/ /
( \& h9 {! A& K1 h\___/\__/_/
9 H; ~8 z2 o; w1 u; R/ A
9 Z  y8 @* z9 I! @4 ~9 x5 x( ?......
. a  F6 T1 t( ?代码语言:text
+ T" Q$ h0 ]3 W" ?1 O复制* I! Z8 `0 c& ~2 C& T! v/ o9 j0 ~- s" P
获取命令帮助
  N8 I+ `  W8 N" n* e$ B0 V* T# ctr images1 g1 Q! Z+ N3 G4 C3 k6 m
NAME:: [* r! G4 k/ B( B. l  H$ q
   ctr images - manage images
( G. M  f8 }1 b9 g) m# k2 m
! W- r. p3 o% |USAGE:
4 S+ t% k+ H$ w2 s  \; ?   ctr images command [command options] [arguments...]2 P6 O/ Q' k' C2 v0 }5 H
% O! e. n6 m' T8 V
COMMANDS:2 L5 ~1 N" m# ?4 `
   check                    check existing images to ensure all content is available locally  B; R' _% t! S3 b
   export                   export images
" ^, U* S4 S6 R9 f" p   import                   import images
1 V0 u: }1 y, Q   list, ls                 list images known to containerd
3 W- a2 Y# W$ i( n, U# k   mount                    mount an image to a target path
4 L' }/ }4 ?& k6 P3 X* ]# p/ O   unmount                  unmount the image from the target- b) ~4 V' |: s. f
   pull                     pull an image from a remote
3 \8 u9 h" N% r/ V. J! I* w   push                     push an image to a remote7 W) p( m( L, p$ K* ^
   delete, del, remove, rm  remove one or more images by reference
( H* N( K3 C, I4 _7 I" W9 X   tag                      tag an image& j7 x- P5 _) }% N7 P/ q
   label                    set and clear labels for an image4 R4 g/ i% {. ]/ E& a+ B; y  F
   convert                  convert an image
0 e' H+ e/ z& D( A' I. {* S2 D
OPTIONS:  r5 D3 t  g' f& B1 A
   --help, -h  show help
7 c% w' Q5 w2 B. {1.2 查看镜像" _, O0 @) O* @
代码语言:text
5 d6 g3 m- o- E  q复制' g! @4 F9 @- t, O5 @2 Z' N! f
# ctr images ls
& L+ c- M4 F9 k; V4 z% ~9 AREF TYPE DIGEST SIZE PLATFORMS LABELS
" B( x' B3 i: b9 S. E) k  @8 ?1.3 下载镜像
* P0 {9 y% a" p% S; w9 i. Fcontainerd支持oci标准的镜像,所以可以直接使用docker官方或dockerfile构建的镜像: ~. i: J+ [  f. K: `

; r. ~+ z% [  ^3 a! g* e  ^+ m代码语言:text
& Z1 ?0 ?- p* H复制- |4 x. ?/ d9 S3 f& A9 w% m6 }
# 镜像名不能简写,--all-platforms:所有平台,不加的话下载当前平台架构
$ l2 _6 G: x- G8 X5 L0 j* Q" G# ctr images pull --all-platforms docker.io/library/nginx:alpine% H9 w2 E/ ]6 _* L7 a9 E. x' X
# ctr images pull docker.io/library/nginx:latest+ O" `2 L3 J; [- p, k

% Y3 o- @0 X0 x& ^% }  k, x/ Z* X# uname -a8 m7 C8 S! B9 b: i( j
代码语言:text6 u# n& }* j" a  J; @
复制
. M# u1 M1 h/ @7 c5 X* n说明:6 E$ b: ~$ O  b3 b- J! o7 U
这里ctr命令pull镜像时,不能直接把镜像名字写成`nginx:alpine`* ~( M% @* d* [
代码语言:text
4 G5 R3 h$ C( R复制; S0 T9 u/ O1 G7 J7 g3 @4 Q" q) G6 M
查看已下载容器镜像: U" {) g; e+ Q! X' V
# ctr images ls
6 J! E  q/ T6 n& YREF                           + A( A9 i+ O# n& D

2 f& j8 t0 v1 k# ]# I  ~0 {TYPE                                                     + |7 l2 g4 C  k4 r  @9 K

* O# j- W9 i! U; h2 }' G1 T# u; EDIGEST                                                      # Z, m$ c7 V8 i9 ]3 f* y

: a  W2 j5 O+ Hdocker.io/library/nginx:alpine& c2 d' c  ]3 s4 ~* B

2 T" w8 \6 E" `application/vnd.docker.distribution.manifest.list.v2+json
0 }7 \. |: K& G8 v# ~- R6 b- c  @0 i, n
sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d39 M0 I" `' t5 U% m& o, Z- Z+ |

- D. d  s: ?2 M6 ~: p( X- ^SIZE   ; l  C: n; {: K% F; A* t+ Z% `6 m

5 S, t  y$ A% E1 tPLATFORMS                                                   
. A6 m! s! u# h7 M0 {# N% p
! l) m* V) r5 R8 [LABELS
7 s/ `( B# `: z& p# s" M2 A) D; H6 z% h/ c! e
9.7 MiB  X  ~$ ?5 y. ]
- O9 B7 G* @7 Z9 r3 C" j. c; B, s
linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x* `6 C6 P0 |# d8 a) C  U- V9 q
" {& c) @7 E8 a8 x5 [
代码语言:text; A4 E8 u* s* D  W% U3 D! h
复制
: H/ X- V7 l" y6 k指定平台下载容器镜像
5 p2 M2 Q* q# h9 a9 ~# ctr images pull --platform linux/amd64 docker.io/library/nginx:alpine& Y3 J1 O& W7 k+ W
没有镜像是无法运行容器的。0 J$ N& `4 Y4 }* b+ g, J

  C- @  m7 w# r5 I2 K$ W1.4 镜像挂载; V' r" r6 O! T/ J, H
方便查看镜像中包含的内容。7 g' @1 f  x) \' {" N6 ^" b
( i. J3 a8 v# w' i0 {: u
代码语言:text: L" }& D% y; L3 K: C, A
复制
: m$ M) i' A( _. L$ \把已下载的容器镜像挂载至当前文件系统+ q& t5 i) w% S" E9 j1 i, R
# ctr images mount docker.io/library/nginx:alpine /mnt
+ E: z  t+ E+ x+ i1 ~sha256:af2fcce448e2e4451a5f4796a9bf9cb5c9b5f88e0d6d10029cada42fb9d268ac4 H- |( m- Y7 n$ y6 ^
/mnt
/ K& M2 N6 M1 n3 t9 F4 I3 O$ v[root@localhost ~]# ls /mnt3 p: Y; D: G1 Y/ g0 Q) {# G
bin  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
! ]! W$ X4 `  ?! ?1 f代码语言:text9 w8 O* R/ r, Y! [' _3 a9 X1 I
复制1 |" w. H( N0 ]& I# J
卸载# X  ~2 A4 L3 k5 t- F/ V* i) J
# umount /mnt4 j1 k$ `0 `5 x% O! {9 \: N
1.5 镜像导出1 E: y" R9 [: t& h; N0 w
代码语言:text
9 ^3 r9 U3 S8 ]8 A1 q复制
: P- `( |% N% T; f' `* d把容器镜像导出. Y+ q1 \  W1 c" {
# ctr i export --all-platforms nginx.img docker.io/library/nginx:alpine% O- L; r9 z, j
代码语言:text
9 ~( f+ X/ A9 i3 o复制/ X9 T+ n  N- q9 i9 g! }/ m: }! O  e
说明
* g, w3 n3 i  u  h0 {--all-platforms,导出所有平台镜像,本版本为1.6版本,1.4版本不需要添加此选项。
+ H6 z8 j/ _/ u4 S; E0 r代码语言:text; N! E5 V6 @; }# e1 r1 q
复制
; T1 l' t' X# ?+ Z查看已导出容器镜像- y! w1 _7 f5 h: f
# ls
. I) b& T9 l# jnginx.img
9 x: \; n: n( m9 k
% P0 T, X- T. D* k+ Z8 y# ls -lh2 T2 j8 s' k; x0 S: b$ X
总用量 196M
6 p5 M7 E% L7 B) h- v# G2 f) ?' }* w. T
-rw-r--r--  1 root root  73M 2月  18 14:48 nginx.img
5 x. n* l, K: a2 }8 ^2 o8 ~3 ]1.6 镜像删除
$ L! Q0 Z0 @; ^* j7 e代码语言:text& q+ \" p5 \. s6 T) G
复制
! K/ e2 h5 a) I$ T. Q- n+ I# {2 ]. z- V删除指定容器镜像# C6 E" V  }! E+ F/ Z
# ctr image rm docker.io/library/nginx:alpine
9 d$ W2 h& c2 @docker.io/library/nginx:alpine
/ }, w; [/ @5 {6 g8 }. g3 ]% Q- _3 f( R% S# t: I2 i
再次查看容器镜像
3 i0 Y/ d% z% o* s[root@192 ~]# ctr images ls# C! S5 a8 _# t7 O0 z; @( k
REF TYPE DIGEST SIZE PLATFORMS LABELS
2 G+ A$ J9 g  t, s! c) n6 m1.7 镜像导入
1 |9 I$ F7 k  B, L- P代码语言:text
- y/ N* m/ f( ~复制
5 }4 }$ ?4 f, k4 \6 F; N导入容器镜像" |  g  m+ t- |3 }* F/ H7 X* |
# ctr images import nginx.img  A# ]! N2 N# e% M( G
unpacking docker.io/library/nginx:alpine (sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3)...done
7 }2 e' t+ c3 V1.8 修改镜像tag
' |! s* T$ {% m# Y  O4 k8 r. l代码语言:text8 F! X" M/ g( R8 [# s
复制
# i* `: A' m% a  V1 p. ^# ctr images tag docker.io/library/nginx:alpine nginx:alpine: I/ \4 W8 @: R& p1 t: `
nginx:alpine8 C6 S2 U' g$ E8 F2 Z$ G3 A( D5 \

7 [; [' x* ~  p; O, B  L; V1 s# 建议修改tag的名称为:镜像仓库地址/目录/镜像名) k% o& {8 ]2 L0 }! t+ e5 N
代码语言:text* @  f) F, c6 e% R
复制
: E$ a% ]) L# A! b6 ]. C说明:
8 j! y1 V' ~! @9 q9 |; m5 T把docker.io/library/nginx:alpine 修改为 nginx:alpine7 n1 z$ \) w: ~
代码语言:text+ j$ c7 ]* u6 I& E+ L6 @, D
复制
" d8 [3 M( n& k5 i3 r9 e查看修改后的容器镜像
, b$ q) k8 j7 R3 O1 }8 |# ctr images ls
; x" W6 N1 [# V4 EREF                            TYPE                                                      DIGEST                                                                  SIZE    PLATFORMS                                                                                LABELS
! B  A$ |1 {9 W  x: y7 n. \2 |docker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 9.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -! h( v8 z& E! W
nginx:alpine                   application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 9.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -
5 l2 T1 h+ A% m代码语言:text& A/ L) V+ D. O2 X% F8 F9 G
复制
- z: T* C. S, [3 B& e& n修改后对容器镜像做检查比对
, O2 g0 z5 c* G6 ?' w( M. ], V# ctr images check
! R; {8 F% o# j/ M8 E, u; H0 SREF                            TYPE                                                      DIGEST                                                                  STATUS         SIZE            UNPACKED
" K+ i; [) |2 i  m8 pdocker.io/library/nginx:alpine application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 complete (7/7) 9.7 MiB/9.7 MiB true
5 H( l7 S4 \4 M! |- G4 G$ U0 m, U1 [$ H2 \& o( R. A* A7 `
nginx:alpine                   application/vnd.docker.distribution.manifest.list.v2+json sha256:da9c94bec1da829ebd52431a84502ec471c8e548ffb2cedbf36260fd9bd1d4d3 complete (7/7) 9.7 MiB/9.7 MiB true
# m. L9 y. }. l& Q4 T2、Containerd容器管理
8 S5 K3 H* O9 x4 K" D# w2.1 获取命令帮助
: ^; J1 _% n0 `, f2.1.1 获取ctr命令帮助+ O( {. j3 l/ M  z$ S3 l! N1 B
代码语言:text
- k5 U& \6 g1 P复制
. h$ B( H  x; p- t4 b# a4 L[root@localhost ~]# ctr --help
) I6 M# [" [; C: h! V5 TNAME:
) E$ d( E$ F( r  p   ctr -
8 p3 x# x) P. _        __7 s1 T1 e5 @( `, ?7 ], B
  _____/ /______9 H* C! v; `% i
/ ___/ __/ ___/
8 @/ |& m- N8 Z6 o: l3 {2 k4 }/ /__/ /_/ /
) ^6 h1 X: x  d0 ?3 Y5 I; e\___/\__/_/9 }" h& X2 u$ z  i" C( m

$ \8 `+ H8 ]5 M, u# x6 \containerd CLI1 i: l( V& Q' d8 F6 k
3 z' U9 J/ I  ?  K, q+ q( I$ I

" v( \0 N; y, D& ?/ _......8 {" @- |  w1 J7 q1 P' y5 {- |
2.1.2 获取创建静态容器命令帮助0 x2 B+ b: A2 p4 n
代码语言:text
9 R3 V. H9 v5 p' x5 x复制
+ o2 A: m6 w% M2 n$ P! [, v# ctr container --help* Y# o: b% H) p. d/ \& q* L
NAME:
2 t% H5 @( A  J, G   ctr containers - manage containers
% z; Q; j6 p1 _! M6 R  n# a) B! f
  f; A) l* N. _) a: v  yUSAGE:
4 u7 W) p& q8 E6 V2 T8 Y% I   ctr containers command [command options] [arguments...]
: y" ]& {- s5 D: u
+ ~) W/ Q2 G2 |  P# iCOMMANDS:
/ x; `* n3 a5 d1 l, F. Z) U( x   create                   create container* r; Z6 d  J, y" B; i& c2 _
   delete, del, remove, rm  delete one or more existing containers
' R. k( O% A7 T8 ]% ]% Q4 j   info                     get info about a container) d/ Q$ p9 C+ k# R- W' J
   list, ls                 list containers# p( ~3 |  Y( w6 x& c
   label                    set and clear labels for a container
7 C3 ^: h. q; K- k   checkpoint               checkpoint a container
! L9 ?) O0 ~6 M, ?% O2 w8 J) @   restore                  restore a container from checkpoint
# i9 Z; x# E$ f5 m/ X- a0 b; [( V0 z6 e- |* `# k
OPTIONS:
* u3 e  ?* d9 e   --help, -h  show help
% [: b% \: q$ O' r代码语言:text" l+ Y: H% e2 `1 Y) b( Q% o$ g
复制
6 W3 r% }4 p" c- H0 k' L: J说明:( F1 C7 Z% q5 ^' Q, v

9 M- {, Z: M2 K使用`ctr container create `命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。这个 container 对象只是包含了运行一个容器所需的资源及配置的数据结构,例如: namespaces、rootfs 和容器的配置都已经初始化成功了,只是用户进程(本案例为nginx)还没有启动。需要使用`ctr tasks`命令才能获取一个动态容器。+ _% R' p( P0 M# ~% r
2.1.3 获取动态容器命令帮助
& K+ X' u* o  B  A代码语言:text
  b$ o" c# V  u2 [- v& Z, u复制5 J' O% r4 O. D* O8 ~" ^3 n( \* d
# ctr run --help9 ^; I0 u& @; W# W
NAME:9 y5 c4 U: @( t
   ctr run - run a container
) Y& e4 ^: N5 A/ E/ |% v9 C; a) [6 N: Y  o- J1 N" ?. D# c; F* }1 ~
......2 ^, i7 A- K  E  I( E& ?
代码语言:text" L, d2 X. K$ R/ q2 c4 w/ {: ?+ F
复制
& P( B# J8 ^" d3 \' {2 P2 q说明:
  {) E+ x2 c2 c- ?3 r使用`ctr run`命令可以创建一个静态容器并使其运行。一步到位运行容器。
4 R7 X, k$ _- z6 n& S) z) }2.2 查看容器
. Q+ N/ Y& s3 u. f# d; D" _container表示静态容器,可用c缩写代表container& l7 A/ Q" c" E0 h

; O+ |+ E0 b% r) x代码语言:text
: \( w8 v2 _5 l5 Z$ O" E复制
8 A7 J0 G6 ?. l8 F4 e5 q9 Y# ctr container ls5 K7 i4 R$ q- K7 z/ [. A
CONTAINER    IMAGE    RUNTIME
( K5 l& m; z5 O" ^* y3 I
: }- ^2 s& g% r9 D- t8 b* v5 e% R5 O% S8 [( Z, r& S
代码语言:text
0 b; u& Z; Z; ~0 l复制
0 I* X' n, s' Z0 b# ctr c ls* U# F6 |7 x) Y  x9 L$ Z3 D- h
CONTAINER    IMAGE    RUNTIME
" M# x, H% j6 n& `- w- h以上命令无法查看出来容器的静态的还是动态的
) ?& }1 {1 H( U; m9 I/ [4 l+ b  B" {
2.3 查看任务5 x- H0 ^4 @( X9 }3 U, K
task表示容器里跑的进程, 可用t缩写代表task
3 A; H/ Y1 L, Z- h/ ?5 s" h3 j
6 X, C- f5 c) `% ?4 x代码语言:text9 a7 {8 S1 Y) F6 J  s
复制
, x8 e+ ]5 X* g& m1 ^: E# ctr task ls8 ~) r$ d$ ]0 }: D. {/ m  X
TASK    PID    STATUS
. @. f! X6 |* w1 ]3 L
% |+ R! |: d2 t: k! @# p
3 h* y6 A) @1 q( e1 N代码语言:text# d% i6 {/ D* q, D7 o
复制
( v4 _# F. d* Y! q! i# ctr t ls0 E3 ~0 n  P8 M9 @
TASK    PID    STATUS1 R0 ?, d9 V& _: ~! m# u; b8 B
2.4 创建静态容器+ d9 z7 C0 E9 Y5 Y. I7 x% q
代码语言:text0 a, p3 y5 [% k8 ~3 \4 i
复制: w8 ~, G) w6 P/ c! \5 b% t/ K
# ctr c create docker.io/library/nginx:alpine nginx13 Q/ l# c5 W, m# E" A+ g9 d
代码语言:text; Q$ W6 }( m# G) T3 g
复制+ J4 L6 v% f' j* E+ T7 W4 }
# ctr container ls
1 z/ b7 n# J1 i- _CONTAINER    IMAGE                             RUNTIME. k5 \" R) s# K/ d  J, ?1 O6 K2 f1 b, B
nginx1       docker.io/library/nginx:alpine    io.containerd.runc.v2$ F' A' Q2 F0 ~- d/ I- ~8 j
代码语言:text0 V  P4 S' q" T' I. p& ?9 {
复制
% X1 X: x' u- T- e查看容器详细信息
9 W7 h7 ~( g6 Z1 z# ctr container info nginx13 o" w( d  T+ J! X8 _* d
2.5 静态容器启动为动态容器5 y5 F6 s+ C$ ^; r; e5 t9 Q. e! g
代码语言:text# A, h9 j; g9 m) v$ H2 E' f$ P
复制& Z" w8 I+ [7 F5 X  _! |& X! p
复制containerd连接runC垫片工具至系统8 o0 z& A7 z- P' V3 n/ @
# ls usr/local/bin/
6 L- o/ U0 H* O4 lcontainerd  containerd-shim  containerd-shim-runc-v1  containerd-shim-runc-v2  containerd-stress  crictl  critest  ctd-decoder  ctr' V+ R4 N# {6 ^( v3 i! G3 k% B
[root@localhost ~]# cp usr/local/bin/containerd-shim-runc-v2 /usr/bin/
! Y; X) u" ?0 F代码语言:text: M( @- x7 L) e$ @. w5 [. r
复制5 N% d8 F7 u( j+ R$ i
启动task,即表时在容器中运行了进程,即为动态容器。
) w" C. d" @, b. K# ctr task start -d nginx1
, p* t1 c& |; U7 |9 B/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration/ T# c7 B+ y$ S
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
( ]# M( w" s$ j8 F代码语言:text9 C5 [; V2 D. A3 V
复制
+ G0 n7 ?8 T2 a% o# q" q0 p说明:
* l9 B9 D; Y- Z4 y, V& s" h-d表示daemon或者后台的意思,否则会卡住终端% d' y: e% \# Y! A, ]
代码语言:text! f: q0 G# n" B' P5 d; {1 {
复制( i5 ]* x1 r6 {" @7 T
查看容器所在宿主机进程,是以宿主机进程的方式存在的。
5 I, ^" _# g; J7 s3 D# ctr task ls% E# G+ t% z4 Q( h
TASK      PID     STATUS6 z6 y5 @" s# |
nginx1    3395    RUNNING
7 Q& }: ?" Y& f$ I( h  c1 K2 }: Z代码语言:text
; ~$ w" P# U; |复制
8 _& n7 A$ ]; v' ?8 |9 O8 e查看容器的进程(都是物理机的进程)
+ p- R# J" L9 ?* N# {/ s3 ?# ctr task ps nginx1
9 f, }! u8 ?8 P* P5 M4 l% a- kPID     INFO3 B+ Q9 n, {5 V) b/ d
3395    -
# D4 @0 [* i: Y3434    -$ y( A% d$ z/ F- a
代码语言:text; C3 _3 |9 x+ @$ u9 i2 N* t
复制
$ M/ V# x- s$ t# |- i% _/ U% v物理机查看到相应的进程
& K' d) }5 V/ D: l! E# ps -ef | grep 3395! v+ c9 G4 I' Z( y' D
root       3395   3375  0 19:16 ?        00:00:00 nginx: master process nginx -g daemon off;4 ~7 E9 i& E0 J3 E8 R1 T
101        3434   3395  0 19:16 ?        00:00:00 nginx: worker process1 z( X% C& @+ U, E% U
2.6 进入容器操作
2 T7 d/ i9 f) {! J代码语言:text
0 T; Y! b& I! h: N复制
+ Y% Q5 e# S9 S0 V6 Y  N# ctr task exec --exec-id 1 nginx1 /bin/sh
" l$ T/ U1 A) d2 k+ e7 O6 [: \
3 j) ~$ K4 H4 L, I# ifconfig 查看网卡信息; F+ `: |) z. q6 e2 V
; x) h1 e. S- F: c+ E  C
.../ {5 d+ ]6 N% ?, r& C. O
! J( i/ d- ?* d) F& X  V* I9 T6 r
# curl 127.0.0.1 访问本地提供的web服务0 E7 j3 b; Z2 ]) U; w" p
...; B7 B$ O7 f$ L: U+ O3 y
代码语言:text6 q* |# b/ P/ U! O
复制2 f# q* g9 q9 _* y& w+ W
说明:! J. Y0 p3 Q, B
为exec进程设定一个id,可以随意输入,只要保证唯一即可,也可使用$RANDOM变量。
( W) K$ H! ]" P5 |4 k0 j1 V% ]/ K2.7 直接运行一个动态容器5 j- N( z0 k( j# {. d+ W
代码语言:text
9 N/ q3 [" d1 Q$ J; i复制
: q4 G5 g( c. v- Q! D( j; j7 ]6 e+ |# ctr run -d --net-host docker.io/library/nginx:alpine nginx2
% j0 _& b8 W) |# i  c5 S( f/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration- [- w4 N5 Z4 ]: V4 M" V
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/5 P' L! a8 ]8 |* g: z
代码语言:text  ~# h* G) L9 j; K  A3 u3 }
复制
: M  I; p! w0 N0 c/ e7 x2 M# e说明:
9 x& V6 E* P7 c5 x5 u8 O; d2 e* -d 代表dameon,后台运行
! F: h' K6 i' r( B3 K) T+ }* --net-host 代表容器的IP就是宿主机的IP(相当于docker里的host类型网络)
/ K: Q1 ~( _, a! A代码语言:text
1 W* z6 X1 S! [8 F, N0 K) ?2 a复制
# L% z! h3 a! @) e( K查看已运行容器+ a5 B, ^' v- ?9 d/ M" N
# ctr container ls/ g  b( Q' H) F8 {
CONTAINER    IMAGE                             RUNTIME
/ e; `( K# z0 x; U9 N8 |! B' }nginx2       docker.io/library/nginx:alpine    io.containerd.runc.v2- w3 g, Y" h0 P
代码语言:text
' p+ S' }* s5 h: W$ w, I1 c复制. v. X% Q8 s2 T1 O
查看已运行容器中运行的进程,既tasks- g  {2 z" q8 ?1 a- }
# ctr tasks ls
0 E4 E0 x" ^' U* g5 ^- QTASK      PID     STATUS
5 g% p( o+ _/ Q' A" j! P8 Mnginx2    4061    RUNNING
' r5 |0 Z/ @4 D' Q$ b, j% ]3 p代码语言:text
$ z' H$ d" _! g复制* C- [5 Q3 Z+ A; H1 J* L
进入容器
8 D* }* A5 g  j/ c3 P# ctr task exec --exec-id 1 -t nginx2 /bin/sh
" o2 E1 o1 ?% |) ~2 J代码语言:text
, N1 K# W, Y2 x! k复制
6 a& p( c7 l% d9 N) c- Q/ # ifconfig * B, U; j4 k$ j: M% ~
ens33     Link encap:Ethernet  HWaddr 00:0C:29:B1:B6:1D
- W- S+ J7 W5 `8 z: L2 I- e( t9 A          inet addr:192.168.10.164  Bcast:192.168.10.255  Mask:255.255.255.0. E! A! g# V1 `7 J, e/ D5 v
          inet6 addr: fe80::2b33:40ed:9311:8812/64 Scope:Link
% N4 J# D) K0 O& ~6 \2 _# a          inet6 addr: fe80::adf4:a8bc:a1c:a9f7/64 Scope:Link
& ]! H( N. f8 ?; t          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
) `4 o5 W: W6 v( R# p. I. m: d          RX packets:55360 errors:0 dropped:0 overruns:0 frame:0
1 l3 U$ i: s: L, x4 t/ }8 c          TX packets:30526 errors:0 dropped:0 overruns:0 carrier:0
% j5 a( G+ G: [- a          collisions:0 txqueuelen:1000
3 I% X7 a! ^, l          RX bytes:53511295 (51.0 MiB)  TX bytes:2735050 (2.6 MiB)0 R/ i1 g; i/ X( i+ o# S: u

& i& g/ |7 d! _. t( jlo        Link encap:Local Loopback
8 f2 m+ x5 n( N. |0 w          inet addr:127.0.0.1  Mask:255.0.0.07 `  E/ v$ [# X* U: t  b
          inet6 addr: ::1/128 Scope:Host
$ \# \+ ]* H8 c! F          UP LOOPBACK RUNNING  MTU:65536  Metric:1
& ^' |+ x  u1 C% r* C& O/ ?          RX packets:68 errors:0 dropped:0 overruns:0 frame:0
( [9 H- O1 T5 E          TX packets:68 errors:0 dropped:0 overruns:0 carrier:0
$ f. r4 }$ q1 B; @9 A& @  F          collisions:0 txqueuelen:1000
  H/ N/ m3 f& O, t. _: b+ F          RX bytes:5916 (5.7 KiB)  TX bytes:5916 (5.7 KiB)
) K; ]" y# u, a- N# r) ]' O; G. `, F$ D" G) c' ^& R
virbr0    Link encap:Ethernet  HWaddr 52:54:00:E9:51:82: n3 J# F! f4 l3 p4 i5 r
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
8 B. J/ k! [5 G* I9 P2 [! _          UP BROADCAST MULTICAST  MTU:1500  Metric:1( \( X( ~' s' U( U
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
6 I5 S/ w8 v8 f3 Z- l& J          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0- I( g; f3 H) j& d! B, p% B$ L
          collisions:0 txqueuelen:1000- l& ^; s4 `8 d6 }2 G3 U3 Y
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
$ u* T/ O. b0 W5 ~! B% z2 E代码语言:text' K6 j, e7 w7 ^( E# v0 @* U1 j
复制
& r' w2 |, F& r) w, C2 n9 J7 n为容器中运行的网站添加网站文件
! w+ z% p( p5 `/ # echo "nginx2" > /usr/share/nginx/html/index.html, L& W8 K/ O* V# i! V2 H
/ # exit, O- Q, k7 P; p# K0 J3 G
代码语言:text/ N( [4 m) |4 i6 J9 B
复制8 B9 }) a0 l6 h- Q7 r
在宿主机上访问网站0 }% h. F# V  j- M. A/ [7 |+ b
[root@localhost ~]# curl 192.168.10.1646 z3 P# U8 P6 \! N  `
nginx2
6 J  M& ?2 n2 K  `/ h5 `7 m) Q2.8 暂停容器
! W% V: D8 o* @& L- j代码语言:text. w, Z2 C4 w6 n, I! @6 X
复制0 W# X( H# i/ K& `8 T7 w4 q1 T
查看容器状态
& M6 T( N# F+ x# c; ~' r# ctr tasks ls
* h4 W! R4 E/ r4 b! `TASK      PID     STATUS
, j+ E' K, L+ M% P9 {6 Snginx2    4061    RUNNING
' q% i8 x" g8 a: r代码语言:text6 i3 M) Z! [' Z1 o! M) H
复制
/ ?' z9 B9 L. Q) ]& [1 l- F! Q暂停容器4 w$ m( T, w( U: u0 I! `
# ctr tasks pause nginx29 R$ h" B+ j% k
代码语言:text& ]- `- E' D2 b& w# I5 x
复制) l) F8 w3 o. b* ?. Q3 _, k. F6 V
再次查看容器状态,看到其状态为PAUSED,表示停止。& t7 l3 G" o6 Y7 F# x1 t. R: n, @
# ctr tasks ls6 o+ W/ b/ Y- B) P7 U# y! x
TASK      PID     STATUS4 _+ I+ J4 @: n! H2 a( p7 r* p  l
nginx2    4061    PAUSED  u6 Z6 X- g1 Q0 r- q0 U' k
代码语言:text0 [' s% ^& Z) c9 g1 ^" q
复制
/ i" u; @4 x. q" S  ?4 ~[root@localhost ~]# curl http://192.168.10.164
! @7 f% @  H  P: l$ c8 H: x3 B在宿主机访问,发现不可以访问到网站/ x( j" \0 c& k2 E* }. {1 g$ [. ^
2.9 恢复容器
; {9 D# I4 Z! I$ o4 e$ Q$ H, Q, Q代码语言:text
3 l. u7 t6 Q0 L1 p复制+ i  L, \) S- E) o' {4 X
使用resume命令恢复容器
9 U& J$ I8 A. m4 e9 A0 |. Q# ctr tasks resume nginx2
6 o1 l' e# e% \% P! `  G# v0 Q代码语言:text* i5 h, W3 g& z
复制/ G3 q+ N) F8 {$ I* E
查看恢复后状态$ j  ~6 H6 s/ K, p
# ctr tasks ls
) ~! O* w3 o- X+ [2 A, Q. ~TASK      PID     STATUS3 B4 J3 q$ v& R- ~  |
nginx2    4061    RUNNING
; y% `) K4 `6 s' k代码语言:text3 T, i9 f" P1 v2 ~
复制1 J/ }( f& J7 s- m. ?
在宿主机上访问容器中提供的服务. W8 w6 L' C; Y" A* O1 t( X
# curl http://192.168.10.164
6 y  C- r3 X( e- O. i6 Z5 y1 M+ {! znginx2
& d1 C( S( I5 [$ d# p2.10 停止容器
' f! V! g1 J0 H: {' A代码语言:text
  ]3 ~1 k0 X, D& |9 `2 G复制
  P2 E- X' H6 Y$ `8 W0 E, g, ?# ctr tasks --help
* I0 d9 Q+ }. m! x* n( g! O......
  J) `/ x8 Z9 ?. \1 R代码语言:text( {2 J+ }( Q8 M$ q
复制  ?8 ^/ ~7 x. u' j
使用kill命令停止容器中运行的进程,既为停止容器
+ M; G8 U* q0 n, V# ctr tasks kill nginx2& ]2 u/ a% m6 h
代码语言:text
& W) `$ [) Q$ B4 r4 d复制
  D8 _$ u' z3 W. n- S查看容器停止后状态,STATUS为STOPPED
& F) M+ A. G, c3 I1 k# ctr tasks ls
& V1 C& _& o4 }2 cTASK      PID     STATUS
9 i) j0 P! `  E" |! Qnginx1    3395    RUNNING( }& _! l$ F- I3 t* P
nginx2    4061    STOPPED1 m$ n& G9 X  a
2.11 删除容器
3 \2 Y. o' ^$ D6 e! z代码语言:text5 E' Y8 o7 s' ]0 I9 E1 D
复制- X) V( `) l$ W  @% `& b3 A6 L
# ctr tasks delete nginx2
$ V5 x/ r2 R7 s; U* r3 j必须先删除task,再删除容器; e2 E. b* G6 Z1 A
代码语言:text( W6 I% S& f* g& M% J$ n) Y
复制
+ g' o& z4 {# c查看静态容器,确认其还存在于系统中
9 `* F3 t3 f( l! t" y& ?# ctr container ls) G2 I  y2 s7 m9 [: H/ n
CONTAINER    IMAGE                             RUNTIME  j0 G; h9 I9 `" }9 j3 q
nginx2       docker.io/library/nginx:alpine    io.containerd.runc.v2
. j# S( C2 W: ^5 W% u代码语言:text4 R+ o) F8 A0 G! q
复制4 T& e( |% z7 I3 ]9 P* d& G
删除容器" z% [; j2 k% ]; F, ?. @) L' B. o
# ctr container delete nginx24 ?* W" Y% h) z) ^7 V6 v$ |
3、Containerd使用私有容器镜像仓库 Harbor
. {2 q( ]: W+ T8 L, B5 ~  j3.1 Harbor准备
% @+ F7 r; `( R0 G/ V, o: s' _- I
5 {3 w# |! V( F7 F: r  K" h
3.2 配置Containerd使用Harbor仓库
; v3 G+ F/ c1 ?/ @) G3 W7 L. D3.2.1 Harbor主机名解析$ j3 J2 j5 u3 W6 ^* ^5 L
在所有安装containerd宿主机上添加此配置信息。4 W) @" z$ A' p! W7 e! u
1 i) P* G1 {4 r' |6 k
代码语言:text, `: E. J) X4 J7 P  u9 m, C+ T, |4 E
复制
* Q: N/ c3 ^  ]3 |& D, O# vim /etc/hosts
# U% X# G& G+ B) R2 I; t8 `9 t6 L# cat /etc/hosts$ o3 N2 }0 `' f) [" R, M$ C
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
. a3 |8 h# K' J9 F  I" W::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
% w2 x7 I. @* [: {, b192.168.10.165 harbor.kubemsb.com
, [, V2 j4 V! h4 W2 E: M- _+ W2 n$ A代码语言:text! `3 o6 R7 U) K% e" K
复制
; \: r$ o# {. V' @- K$ P2 `8 h5 B说明
! q' p% X8 z7 B6 F, d* 192.168.10.165是harbor的IP0 V1 v& p' l3 M! P$ f' r
6 g: X) h  k" z; U+ \' j
* harbor.kubemsb.com建议用FQDN形式,如果用类似harbor这种短名,后面下载镜像会出问题
3 y5 l) m  B) U" m/ L7 i7 |3.2.2 修改Containerd配置文件1 w* O7 d' s  V) a
代码语言:text( b& u- g, B5 G' I3 }
复制
$ H& Z$ U* h7 e此配置文件已提前替换过,仅修改本地容器镜像仓库地址即可。& K: T  U0 S5 L# e
# vim /etc/containerd/config.toml
/ l! E* P/ {/ l# cat /etc/containerd/config.toml5 \) m" }8 R; z/ M5 \7 i1 q( `
root = "/var/lib/containerd"
; c* S; `( ?: E: W+ l2 pstate = "/run/containerd"/ _/ S0 \7 B5 k6 Z7 T* L" e3 y
oom_score = -999
9 l* T; `# ^: ?( f' \4 [3 E$ @
* o" I9 y% V. e! y9 k: v[grpc]' ^( A, I1 |7 Z% |
  address = "/run/containerd/containerd.sock"
& }- r  W" Z1 R& v  uid = 0
' l6 m( l0 @1 o) @) ?% K# \# `# x  gid = 0
- ], V" E; W; C0 q  max_recv_message_size = 167772168 H( A; R7 \# F0 ]  K* O* ?" U
  max_send_message_size = 16777216, h1 V: U% \! c9 b. x5 n

9 T2 m( x! H5 ^) @/ n! C[debug]
. c. F. z" J6 d, w  address = ""
, m  W$ L- f. W$ k* Z% {  uid = 0
& _! l1 O+ ~2 N* r6 ~7 t, R8 a4 |  gid = 06 Q) N: _! G% J# G# k4 l
  level = ""5 d+ D2 m% J1 g$ L

8 t! |6 j8 ~1 F[metrics]
: D2 H2 h! H4 |! f; C5 |! C  address = ""# l# ~* L5 P: \; u
  grpc_histogram = false
7 a5 `, k: K- y
% ?. z% n9 C' f! z$ f. }[cgroup]
. ~' B; X* v3 D6 P6 k; l, n  path = ""
7 l6 l. a8 b+ h# I( B9 ?1 y* d, }" x  m9 W& f& J: h. `; R$ z
[plugins]" P' j$ Q# Z0 l9 g2 K
  [plugins.cgroups]9 i% [2 C+ |: ^
    no_prometheus = false% ]" [* i: Z% i) ~/ ]% Y! |
  [plugins.cri]4 P( A; |& i7 O/ h7 \' y' L2 z1 r
    stream_server_address = "127.0.0.1"
: a# F9 N# @3 G! p+ w% G7 w5 ?    stream_server_port = "0"
; z& u/ v1 D5 p# j1 O    enable_selinux = false
' L6 H5 ~8 A8 A9 C- Y5 y    sandbox_image = "easzlab/pause-amd64:3.2"
( H9 s- }8 B5 T2 v" R3 _% n* ?! Q    stats_collect_period = 102 M- D! P3 y+ ~& s/ K2 ?
    systemd_cgroup = false
: K  ^" Q. t: D    enable_tls_streaming = false. ^# ?! T2 F" v. W! z5 [5 F% u
    max_container_log_line_size = 16384( ^, R. n/ F" }5 {3 {/ E
    [plugins.cri.containerd]
1 b9 A! @- x& n: K* u      snapshotter = "overlayfs") j8 g# m. X- y0 D/ d" R
      no_pivot = false2 I/ H+ D, W$ t% H" F$ t
      [plugins.cri.containerd.default_runtime]
5 y& v: i' }4 b5 ^        runtime_type = "io.containerd.runtime.v1.linux"
. g! k7 q5 B7 j0 U0 V9 v/ [- |        runtime_engine = ""
  j' g: R7 E% h. b# j7 A        runtime_root = ""/ h. ^( X* N  D: K, k  O1 r
      [plugins.cri.containerd.untrusted_workload_runtime]
2 a% D, j* w) j5 r        runtime_type = ""
9 o) u# N" ]  V        runtime_engine = ""+ x5 O) ~; p2 j8 k' h( _
        runtime_root = ""
* y4 S* Z) l! }, t& r    [plugins.cri.cni]( \+ }* t! v3 ~
      bin_dir = "/opt/kube/bin"1 M* C% {- u! j" ~% E
      conf_dir = "/etc/cni/net.d"1 v4 h0 L: j4 F  ?
      conf_template = "/etc/cni/net.d/10-default.conf"
# S% @- T: ]! u5 X+ C    [plugins.cri.registry]
! Z. A7 ~$ H1 p8 C! u2 Y      [plugins.cri.registry.mirrors]1 s3 G+ `7 I' u- e* |+ }: O2 r7 g# M
        [plugins.cri.registry.mirrors."docker.io"]0 K4 O# c9 H1 [! q4 t# N$ z) e
          endpoint = [6 O' N! M* ^7 |+ y+ G& E
            "https://docker.mirrors.ustc.edu.cn",
7 ]2 J$ u6 M# H, [0 x' M' z            "http://hub-mirror.c.163.com"; z# N) i6 ?/ q; @
          ]
; \: N) z/ S: Y( `        [plugins.cri.registry.mirrors."gcr.io"]; C5 t8 v' s* k% c7 ]5 q( |6 d
          endpoint = [7 X- j  D5 a. Y/ O% v% h/ D6 y
            "https://gcr.mirrors.ustc.edu.cn"
7 ]) s. ^- o7 \' }: F" F$ s2 I+ z+ D          ]( H, S1 S. J. a
        [plugins.cri.registry.mirrors."k8s.gcr.io"]
. [+ [- T6 S$ V          endpoint = [1 |9 H( ]! x' b1 N8 A0 v$ P
            "https://gcr.mirrors.ustc.edu.cn/google-containers/": R1 A) ]5 }! b; ~/ c) i0 h
          ]
6 U& `* X+ u/ W2 ^        [plugins.cri.registry.mirrors."quay.io"]
. r9 J' d/ h4 p7 t% F          endpoint = [) i$ F4 T3 R9 }  M* V$ ?
            "https://quay.mirrors.ustc.edu.cn"9 b/ @( |3 Z( P( K
          ]1 Q! X. G( q2 f& {2 c) x. M
        [plugins.cri.registry.mirrors."harbor.kubemsb.com"]   在此处添加,在镜像加速器下面添加这一段
) E- n! Z- Q  A, E  E& C. z( [( Q          endpoint = [
' f% S6 m6 V6 `) n0 ^: f            "http://harbor.kubemsb.com"  z( j) J, P% e6 d& Z) W
          ]7 E) h# T$ G5 @3 w: C* `
    [plugins.cri.x509_key_pair_streaming]
5 o* M  S, S5 z9 k5 O5 N/ w6 q      tls_cert_file = ""/ h, `, ^, x4 d% U8 O
      tls_key_file = ""
( b9 W0 ^! q+ B8 F4 o+ W  [plugins.diff-service]; S- M! X( r# h2 t' w# ^/ D+ r
    default = ["walking"]
" E8 r) t! v3 R8 }  [plugins.linux]: J; y9 O* {7 _8 H! L1 p  O
    shim = "containerd-shim"9 n# ^* q! D  ]& i8 o  E, [
    runtime = "runc"
* O: H: {+ G- }* n8 g+ I8 {8 Q* Z& S2 s# m    runtime_root = "") N5 D' _9 g+ h- G5 C' M6 V# @, X
    no_shim = false9 b* O6 f3 N3 c& Y" p
    shim_debug = false
- B  [2 a# c5 ?+ g  [plugins.opt]
8 W7 I+ P6 V( t4 p+ X8 A    path = "/opt/containerd"' P" h0 H$ K( s* f
  [plugins.restart]
9 N/ q( W  @, R) U( b    interval = "10s"
0 z0 X2 a8 l( h( a# ?: P  [plugins.scheduler]0 z( l0 d; `2 @9 D" O
    pause_threshold = 0.02/ p1 m2 \1 B  y# v) s/ x( g
    deletion_threshold = 0! u- `1 L+ v) T! Z. }/ q
    mutation_threshold = 100
' l) q. w; O7 g% l% h) z# v    schedule_delay = "0s". n6 w- b( d0 T$ k* J* Z; J
    startup_delay = "100ms"
8 L& ^, b4 n4 d2 }0 h. p5 R代码语言:text
# L9 d! \7 H9 J; l复制3 O3 k6 e3 B) B4 F8 ?, z; U
重启containerd,以便于重新加载配置文件。, n$ |( ?  `+ e: l
# systemctl daemon-reload
! \) d0 c/ f3 e. \: k& T2 p# systemctl restart containerd9 ~8 s7 O: Q0 m0 N3 J
3.2.3  ctr下载镜像
6 i1 X: ]; q9 m2 k代码语言:text! _2 s- n0 v# E* ?% O9 _; G" Y
复制
6 e1 g8 j/ M3 j下载容器镜像+ q) z/ ~  }7 _! p4 Q) q- V) R
# ctr images pull --platform linux/amd64 docker.io/library/nginx:latest1 j; Y; M! ~) {8 \% z/ K
代码语言:text. @8 @3 l$ S+ b, N% S, p2 J8 h
复制
0 W* e" R3 j& w: }# T说明:& S+ G7 M; H4 A# q
* --platform linux/amd64 指定系统平台,也可以使用--all-platforms指定所有平台镜像。
( R+ m$ ~! Z8 V代码语言:text
) O& }  R0 f" {复制
2 l" P# L- [: o" X7 M  }: }查看已下载容器镜像3 X( ]4 ]' L6 z+ d' {6 D
# ctr images ls
7 v. j# B/ p7 p% b3 QREF                              TYPE                                                      DIGEST                                                                  SIZE      PLATFORMS                                                                                                                          LABELS
7 r% c: X4 L: j, s+ j1 T4 R, c8 |2 [# [; d! Y% H% N/ B
docker.io/library/nginx:latest   application/vnd.docker.distribution.manifest.list.v2+json sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 54.1 MiB  linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x                            -& t, J1 @- t' ]
3.2.4 ctr上传镜像
% p% f6 Q9 {% K0 ?% Y9 X上传到Harbor library公有项目
8 Q% e) O9 |+ d. ^" P6 ^9 j0 y  s, ?) a* h* N& h0 I; F. g
代码语言:text' ?2 Y6 t( \, X- b8 z
复制0 S4 o% ?+ t9 a: U" \, a! T4 a
重新生成新的tag/ x0 P& B7 F: b' K( J- x7 K
# ctr images tag docker.io/library/nginx:latest harbor.kubemsb.com/library/nginx:latest" D) }( n! v1 b( w
harbor.kubemsb.com/library/nginx:latest
) }$ x' m6 e/ K- l+ n0 g. i) j代码语言:text
% J& k1 Z! ~' z; j( e4 V9 e& I! f, ^复制
$ `2 d4 z0 q- _# E3 S: }查看已生成容器镜像$ T) n9 n- r7 g4 m! @! _% ~) k
# ctr images ls
$ y' L% R! w: IREF                                     TYPE                                                      DIGEST                                                                  SIZE      PLATFORMS                                                                                                                          LABELS/ Z0 y& X% I% |0 f
docker.io/library/nginx:latest          application/vnd.docker.distribution.manifest.list.v2+json sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 54.1 MiB  linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x                            -
+ b7 |0 D1 A% f9 P% k+ V6 xharbor.kubemsb.com/library/nginx:latest application/vnd.docker.distribution.manifest.list.v2+json sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767 54.1 MiB  linux/386,linux/amd64,linux/arm/v5,linux/arm/v7,linux/arm64/v8,linux/mips64le,linux/ppc64le,linux/s390x                            -4 T" p9 X9 F1 Z
代码语言:text
& h. F% B: H' S. }复制
; L, p2 Y* R1 ?8 G* V, m推送容器镜像至Harbor, E: u$ E: j, S) w4 }: F. H8 U  L
# ctr images push --platform linux/amd64 --plain-http -u admin:密码 harbor.kubemsb.com/library/nginx:latest
; ]- n) a) }# n* M" t% J代码语言:text
3 c$ s* S) U  K6 K' C6 B1 D复制) M" k) Z6 \0 w3 m3 h& T+ ?2 |
说明:
2 V. j. n% @$ s" ?7 M# @# f5 Z# H( |2 y
* 先tag再push
7 n; E4 s6 h+ Y, ?% I* 因为我们harbor是http协议,不是https协议,所以需要加上`--plain-http`* z! |" H% \+ J" t
* `--user admin:Harbor12345`指定harbor的用户名与密码
2 ?, p* q. n; U, Y8 |/ b* ?代码语言:text
6 }2 g; y( ^- x; n复制
$ A' S; D5 E* r  ~输出:/ F( k1 e9 b$ R
manifest-sha256:0fd68ec4b64b8dbb2bef1f1a5de9d47b658afd3635dc9c45bf0cbeac46e72101: done           |++++++++++++++++++++++++++++++++++++++|% t- _8 P( m: B+ \! }- G5 ?
config-sha256:dd025cdfe837e1c6395365870a491cf16bae668218edb07d85c626928a60e478:   done           |++++++++++++++++++++++++++++++++++++++|: v( n# E7 ?6 m: n- h
elapsed: 0.5 s                                                                    total:  9.3 Ki (18.1 KiB/s)
- D- Y, P5 c% ?2 z
6 s5 X7 j; h: ]+ c代码语言:text" O" V& ~/ Y  d! Z# b2 b5 g
复制
- b3 v; {2 q2 U9 i1 i下载已上传容器镜像$ J+ v' r2 j! w0 l# `+ k
# ctr images pull --plain-http harbor.kubemsb.com/library/nginx:latest
  c, \7 ^9 V5 Y( d' T7 `# O$ |; j/ G) }) ]9 ~9 S: f9 _

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-1-23 13:50:42 | 显示全部楼层
Containerd 常用命令0 }+ y) R/ U: o7 H" `6 [

- I; o7 }/ g) ]7 V% J在 Containerd 作为容器运行时的情况下,可以通过 ctr 工具或 crictl 工具来与之进行交互:) P3 Q  x% G8 h
ctr 是 Containerd 自带的客户端工具4 K! z3 l& U$ ~5 J

1 r: n1 J$ M( X) k+ N3 Y: v7 l7 W2 @crictl 是 CRI 客户端工具,比较接近 docker 命令
- m: }% A2 A3 r8 {- i- o$ Q0 S
6 s. z3 L. `+ ?+ P2 R3 |此外还有 nerdctl 等类似工具,以后找机会给大家详细介绍。$ ]) n8 v# K8 e- h( f  E5 z5 k

* O1 t! I2 v5 V  d6 a9 o8 p 8 H  x& t" E6 s
/ U# D- H9 f& v# X
1、ctr 命令
1 e5 L% z! V2 W  o) Q- L  M! v, t! C1 T- t& d/ h
# 镜像操作命令
, n4 [2 ^& F2 ?( c0 Q" C6 ]' Fctr -n <ns> i xx                         # 镜像操作命令格式,默认 ns 为 k8s.io
4 [+ P7 O# v- n$ ^* yctr i ls                                 # 查看本地镜像列表,同 docker images1 z5 y, r# u: ?- K4 y
ctr i rm <镜像ID或镜像名>                  # 删除本地镜像,同 docker rmi -f <镜像ID或镜像名>* W( h* l8 H/ ~( N$ g1 d4 S( ^4 j
ctr i pull <镜像名>                       # 拉取远程镜像,同 docker pull <镜像名>- \7 ^- b& I% v
ctr i tag <旧镜像名> <新镜像名>             # 修改镜像名称,同 docker tag <旧镜像名> <新镜像名>. t: N2 o2 Z* e
ctr i import xxx.tar                     # 从本地文件导入镜像,同 docker load -i xxx.tar. u  }$ t; y  L/ a! \# @2 k! |: l; a- O
ctr i export xxx.tar <镜像名>             # 导出镜像为本地文件,同 docker save <镜像名> -o xxx.tar
+ M% t" ^9 v0 v/ B/ ^
# a' ~0 ?% c3 i: P! g: |4 ]7 J# 容器操作命令
7 C+ m* o) ^! w+ w" Z# Ectr -n <ns> c xx                         # 容器操作命令格式,默认 ns 为 k8s.io7 a" H2 l, o$ e, D7 ]
ctr c ls                                 # 查看容器列表,同 docker ps -a,查看所有容器1 j* |9 k0 V6 H. G. B
ctr c rm <容器ID或容器名>                  # 删除容器,同 docker rm -f <容器ID或容器名>- D% ]& ^( L: E  K0 {  L( A) U
ctr c info <容器ID或容器名>                # 查看容器信息,同 docker inspect <容器ID或容器名>
3 T& W; G9 @: W' t4 J9 n* vctr c create <镜像ID或镜像名> <容器名>      # 创建容器,同 docker create,仅创建容器(容器并未运行)
+ u) E- w( y, X8 r- h$ ~5 i  h/ Y3 Q: K- H& w: W
2、crictl 命令5 H/ V$ ?" |5 r# R
# 镜像操作命令6 I% {( ~; {# u8 v& o
crictl img                               # 查看本地镜像列表
5 V5 z  k# b* g- b$ C6 zcrictl pull <镜像ID或镜像名>               # 拉取远程镜像- p: ^. `1 v- }- H+ P
crictl rmi <镜像ID或镜像名>                # 删除本地镜像
8 ]  G0 l3 E/ @
8 R0 J! a2 i( b. V( }5 X# 容器操作命令$ S) s6 \  i) G% j/ i
crictl ps -a                             # 查看容器列表
' e& w& ^  K. mcrictl rm <容器ID或容器名>                 # 删除容器
$ ?$ f+ a" _8 |crictl logs <容器ID或容器名>               # 查看容器日志
1 U, ~0 o2 I) U5 q( R! o* b9 Wcrictl stats / statsp                    # 查看容器 / Pod 资源使用情况

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-1-23 13:51:15 | 显示全部楼层
# AMD架构
- v) a8 Y9 r, y) r% I, m% {wget https://github.com/containerd/co ... -linux-amd64.tar.gz
3 }& A5 f8 ~# s8 k, ?2 ^tar -xzvf containerd-1.7.21-linux-amd64.tar.gz -C /usr/
4 V1 @/ q' }1 E $ a# f( b! \! w" R4 R7 Z
systemctl daemon-reload; c7 E0 T% D8 x- A3 C! H0 k
systemctl enable --now containerd
0 ]3 ^2 j3 w% Z7 W/ G4 h0 z ( q) {  L, \" |6 A% {" o
===================================================================================
. }( A. _( |1 M- R8 d# ARM架构& B* J2 U1 Z- f; a7 _3 K; h; w
wget https://github.com/containerd/co ... -linux-arm64.tar.gz- ]' @* {- Z" u
tar -xzvf containerd-1.7.21-linux-amd64.tar.gz -C /usr/
( {( i7 V3 m+ x) G# d! m
6 H, T# f- {- n5 d5 ~! H  @systemctl daemon-reload  P- @) b: V8 `
systemctl enable --now containerd

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-1-23 13:51:29 | 显示全部楼层
# 拉取一个镜像
& q# Q; x+ @/ K0 e+ A. B! A. hcontainerd ctr image pull docker.io/library/nginx:latest; u, b& z& h0 g4 g- u" a
% F" O! W- n+ D! Z; b8 y
# 创建并启动一个容器3 B6 r( i" C  v! N$ E) u; q. P4 J
containerd ctr run --rm docker.io/library/nginx:latest mynginx
- ^8 K$ D) a9 U8 G1 {. `
4 I: c. }9 q+ h# 停止并删除一个容器
# C3 ]. }% V7 Ncontainerd ctr stop mynginx* y6 _( b1 v7 s- m8 P  O& \2 o
containerd ctr container rm mynginx

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-1-23 13:52:38 | 显示全部楼层
配置Containerd# }7 r+ [4 V, V% t; X$ e
在配置文件/etc/containerd/config.toml中添加以下内容:$ Q  J- X; C3 @  o4 f

- o( O- g7 z8 Y8 \! t: W- V[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]$ r: h0 s) ^2 m
...
+ @$ R2 N7 m2 U! w [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
+ e& l) ^; f  s1 v   SystemdCgroup = true

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2025-1-23 14:01:01 | 显示全部楼层
containerd config default | \
- H( {8 d7 T( u, e  sed 's@/var/lib/containerd@/data/containerd@g' | \$ G: a- x% U+ ~
  sed 's@k8s\.gcr\.io@google_containers@g' | \# F9 v9 L+ C' y: B! b/ `
  sed '/SystemdCgroup/c \
( @" ]# ^. o' z            SystemdCgroup = true' |' d7 E, F. U, i
  sed '/registry\.mirrors/a \" Z7 Q' z" p0 s0 ^8 ?$ w% \
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.1.10:8082"]\
* A7 i7 ^7 M, P! j7 }" }          endpoint = ["http://192.168.1.10:8082"]\) P3 P: G& ^4 C
        [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\
! S8 ~5 n% x3 E* R! i9 K; k1 R          endpoint = ["http://192.168.1.10:8082"]'> /etc/containerd/config.toml+ Z" f) K4 d3 u9 V( ~

0 r, t/ a/ P% \5 B0 l+ C2 c  t
7 D* c! O/ Y6 u2 N
4 ^- G2 @. i/ l3 _- v/ {3 a4 J0 O# g; L! X  I, Z( ~: {
helm upgrade -i --create-namespace ingress-nginx ingress-nginx/ingress-nginx --version=4.0.19 \3 h6 q" n3 h6 ^9 C0 D

0 V% C% {# A' n) ?) p    --namespace ingress-nginx \- I/ A3 Q* @4 s9 |! h; t  D
    --set controller.image.repository=ingress-nginx/controller \8 p0 w0 n3 k) Y7 x: _
    --set controller.image.digest=null \  H) o( v' C4 N: T% b
    --set controller.dnsPolicy=ClusterFirstWithHostNet \. a8 K- @" `. r# S5 R
    --set controller.hostNetwork=true \
2 j1 I+ i# v: P/ `7 i6 X" A    --set controller.kind=DaemonSet \
* v2 r: R5 ]3 `" D* c9 k  w    --set controller.service.enabled=false \8 W3 o) k3 O) H9 @: D/ I! Y3 O- Z) @  J
    --set controller.reportNodeInternalIp=true \, C9 t7 V+ P5 W4 D
    --set controller.admissionWebhooks.enabled=false \
( [, _1 w0 g1 |- ]+ M& ~    --set controller.ingressClassResource.default=true \. }% x# h# Y7 E4 x. q5 V
    --set 'controller.tolerations[0].operator=Exists' \, X. x  ]* @  w2 K1 W1 U
    --set 'controller.tolerations[0].effect=NoExecute' \- @& g7 ^( x. r" m4 i
    --set 'controller.tolerations[1].operator=Exists' \
3 N7 p# c/ z4 Z: t    --set 'controller.tolerations[1].effect=NoSchedule' \
$ h; G' }# a7 V$ }  C# v    --set controller.config.compute-full-forwarded-for=true \
* Z4 }' C( M# ?$ |    --set controller.config.hsts=false \* `! r6 L- S5 u8 u9 J; B( R( _% G2 O
    --set controller.config.use-forwarded-headers=true# U4 R% Q9 z" A% J% G+ a

5 d9 z& u- [# f+ m4 O4 Y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:10 , Processed in 0.019030 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表