【containerd】进入容器网络空间

容器隔离性

容器的隔离性是其相对于传统虚拟机的一大优势,主要体现在以下几个方面:

  • 文件系统隔离:每个容器都有自己的文件系统,这意味着容器之间不会直接影响彼此的文件和目录。通过使用镜像和分层文件系统,容器可以共享相同的基础镜像,同时在其上层进行独立的读写操作。

  • 进程隔离:容器内部运行的进程在容器外部是不可见的。每个容器都有自己的进程空间,这使得容器之间的进程不会互相干扰。

  • 网络隔离:每个容器都有自己的网络栈,包括IP地址、网络接口等。容器之间的网络通信通常需要通过端口映射或使用容器编排工具(如Kubernetes)配置网络策略。

  • 资源隔离与限制:通过使用cgroups(控制组),可以限制容器使用的CPU、内存、磁盘I/O等资源。这防止了某个容器消耗过多的主机资源,从而影响其他容器或主机本身的性能。

  • 命名空间隔离:Linux命名空间技术允许容器拥有自己的PID、网络、用户ID、挂载、IPC(进程间通信)等命名空间。这些命名空间的隔离确保了容器之间的环境是独立的。

  • 安全隔离:容器通过使用安全模块(如AppArmor、SELinux)和内核特性(如Seccomp)来增强安全性,限制容器内的进程对系统的访问。

这些隔离特性使得容器能够在同一台主机上同时运行多个应用程序,而不会相互干扰,从而提高了资源利用率和应用的部署灵活性。

进入容器的网络命名空间

nsenter是一个强大的工具,它允许您进入Linux的不同命名空间。这里--net选项表示您想要进入网络命名空间 ,通过查询容器的PID号即可进入对应容器的网络命名空间。

nsenter --target <containerd_pid> --net
  • Docker PID查询

    #docker inspect -f '{{ .State.Pid }}' <container_name_or_id>
    或者
    #docker inspect <container_name_or_id> |grep -i pid
    

    注意*有时候查询出来的容器PID等于0,说明容器运行有问题,需要检查容器运行的程序日志

  • containerd PID查询

1、ctr -n k8s.io c ls     #查询你需要的容器,记录容器ID
2、ctr -n k8s.io task ls |grep containerd_pid
或者
ctr -n k8s.io task ls |grep containerd_pid |awk '{print$2}'
#回显PID信息
### containerd 入门教程 #### 基本概念 Containerd 是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性。Containerd 可以管理整个容器生命周期,包括图像传输和存储、容器执行和监督、网络附加以及文件系统快照等功能[^1]。 - **命名空间 (Namespaces)**:用于隔离不同租户之间的资源访问。 - **沙盒 (Sandbox)**:提供独立环境来运行多个应用实例而互不干扰。 - **CRI (Container Runtime Interface)**:Kubernetes 中使用的接口协议之一,允许其与不同的容器运行时交互。 - **插件架构**:支持灵活扩展功能模块,如日志记录、监控等服务集成。 #### 使用方法 ##### 安装 Containerd 对于 Linux 系统来说,可以通过下载官方发布的二进制文件来进行安装: ```bash sudo mkdir -p /usr/local/bin/ wget https://github.com/containerd/containerd/releases/download/v1.4.3/cri-containerd-cni-1.4.3-linux-amd64.tar.gz sudo tar Cxzvf / cri-containerd-cni-1.4.3-linux-amd64.tar.gz . ``` 上述命令会把 `containerd` 解压至 `/usr/local/bin/` 下并完成基本设置[^3]。 ##### 创建和管理容器 要创建一个新的容器对象而不立即启动它,可以使用如下命令: ```bash ctr containers create <image> <name> ``` 这一步骤仅准备好了必要的资源配置但是并没有真正开始执行任何程序;此时已经准备好了一个静态容器等待进一步的操作[^2]。 为了查看当前存在的所有容器列表及其状态信息,可以用下面这条命令实现: ```bash ctr containers list ``` 如果想要让之前创建好的某个特定名称下的容器正式进入工作模式,则需调用 start 方法: ```bash ctr containers start <name> ``` 当不再需要该容器的时候可以选择停止它的活动或是彻底删除掉这个实体: ```bash # Stop a running container gracefully. ctr containers stop <name> # Remove the specified container and its resources. ctr containers delete <name> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值