nerdctl的使用
nerdctl的使用什么是nerdctlnerdctl是containerd官方提供的兼容Docker命令行的工具,支持Docker Cli所有命令,并且支持dokcer-compose 设计初衷不是Docker Cli复制品,希望促进containerd创新实验的发展,Docker不支持这些实验特性如镜像延迟加载,镜像加密 安装nerdctl官方提供俩种安装包 精简安装包:nerdctl--linux-amd64.tar.gz 仅包含nerdctl的二进制文件,以及rootless模式下的辅助安装脚本,需要解压到/user/local/bin目录 完整安装包:nerdctl-full--linux-amd64-.tar.gz。包含containerd、CNI、runc、BUildKit、rootlesskit等完整组件,需要解压到/user/local目录 cat share/doc/nerdctl-full/README.md可以看见组件版本 下载nerdctl完整安装包 12wget ...
ctr的使用
ctr的使用 安装完containerd之后,ctr也安装好 ctr上containerd提供的客户端,内置在containerd中 查看支持命令 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455[root@iZbp1ebizftw2vpbpm737wZ ~]# ctr --help NAME: ...
crictl
crictl什么是crictlCRI的CLI工具-crictl 安装与配置安装12wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gztar -zxvf crictl-v1.32.0-linux-amd64.tar.gz -C /usr/local/bin 配置 crictl连接containerd 默认情况下(没有配置crictl配置文件),crictl在Linux节点下会通过几种sock连接运行时的endpoint docker:unix:///var/run/dockershim.sock containerd: unix:///run/contianerd/containerd.sock Ciro: unix:///run/crio/crio/so...
containerd-安装
containerd-安装官方提供三种类型安装包 containerd:仅包含containerd相关二进制精简安装包,格式为containerd-${VERSION}.${OS}-${ARCH}.tar.gz cri-containerd:包含containerd、cri与runc工具的安装包,格式为cri-containerd-${VERSION}.${OS}-${ARCH}.tar.gz cri-containerd-cni:包含containerd、cri、runc、cni工具的安装包,格式为cri-containerd-cni-${VERSION}.${OS}-${ARCH}.tar.gz 目前主流支持window和linux平台 大致流程安装 下载containerd release安装包 1wget https://github.com/containerd/containerd/releases/download/v1.7.24/cri-containerd-cni-1.7.24-linux-amd64.tar.gz 安装包解压 1tar -zxvf ...
containerd-CRI
containerd-CRIOverviewCRI定义了容器和镜像服务的接口,使用Protocol Buffer协议 定义了kubelet与不同容器运行时交互规范 接口包含客户端与服务端 123kubectl xx--containerd-runtime-endpoint=<CRI Server的Uninx Socket>--image-service-endpont=< CRI Serverdr的Uninx Socket> 如果Runtime Service和Image Service在一个gPRC Server中要配置container-runtime-endpoint,当image-service-endpoint为空,默认使用container-runtime-endpoint一致的地址 如果是K8s 1.24以前使用CRI Server需要设置container-runtime=remote(自从kubelet移除了dockershim,这个参数废弃,默认container-runtime=docker Runti...
K8s-kubelet(HTTP服务接口)
K8s-kubelet(HTTP服务接口) 基于1.25 kubelet通过HTTP Server对外暴露API,为了确保接口安全,kubelet按照安全等级从低到高顺序支持3种HTTP Server,分别是healthz server、readonly server和kubelet core server 一级类目 二级类目 Path路径 描述 Default Handlerers healthz /healthz 检查kubelet是否健康,重点检查syncLoop是否持续在规定时间内完成。检查syncLoop四因为其他组件故障会间接导致syncLoop不能执行成功 Default Handlerers pods /pods 读取当前节点运行的Pod列表(通过PodManager获取) Default Handlerers stats /stats/summary 读取资源使用状态 Default Handlerers metrics /metrics 读取kubelet监控指标数据 Defaul...
K8s-kubelet(PLEG核心原理)
K8s-kubelet(PLEG核心原理) 基于1.25 PLEG是kubelet的一个重要组件,负责监控kubelet管理的节点运行的Pod的生命周期,并生成于生命周期相关的事件 PLEG产生原因在K8s中,kubelet负责维护和管理每个节点上的Pod,不断的调谐Pod的状态以使得符合Spec。 为了实现这个目标,kubelet同时需要支持对Pod Spec和Container Status 的事件监听。对于前者kubelet通过watch不同源的对PodSpec事件实现,对于后者,PLEG之前,不断需要Pod处理协程不断的周期性拉取最新状态,尝试了大量轮询压力。 在kubeletv1.2.0版本引入了PLEG,目标是改善kubelet的可拓展性 减少不必要的处理操作(当状态为发生变化时,不执行无效的调谐操作) 减少对底层容器运行的并发请求,以减轻容器运行时的压力 PLEG架构设计PLEG主要包含俩个核心工作,一是感受容器变化,生成Pod事件,俩是维持一份最新的Pod Status Cache数据供其他组件读取。 kubelet同时接收俩个方向的事件,Pod S...
K8s-kubelet(Cgroup资源隔离以及垃圾回收原理)
K8s-kubelet(Cgroup资源隔离以及垃圾回收原理) 基于1.25 什么是Cgroup资源隔离kubelet基于cgroup限制Pod资源使用。cgroup是Linux内核的一个重要功能,用来限制、控制和分离一个进程组的资源(CPU、内存、磁盘I/O) kubelet在创建Pod时,会将其配置的cgroups parent目录传递给容器运行时,使容器运行时创建的进程都会限制到kubelet配置父级cgroup之下。 kubelet负责维护Pod、QoS、Node级别的cgroup配置 Container级别的cgroup直接交给容器运行时实现 cgroup的层级结构 kubelet采用了四级cgroups层级架构存储 Node Level cgroup 为了保证系统运行的稳定性,kubelet支持为系统守护进程预留资源,避免Pod占用整个系统资源,造成系统卡死或者崩溃。 默认情况下,kube-reserved和system-reserved不会启用。 但是启用之后,需要注意守护进程添加了cgroup之后,可能导致配置的上限太小,导致守护进程资源不足退...
K8s-kubelet(Pod生命周期管理)
K8s-kubelet(Pod生命周期管理) 基于1.25 kubelet以Pod为基本处理单元,负责Pod从创建到消亡的整个生命周期 在1.21中Unknown状态已经被标记为弃用。 CRIkubelet通过CRI RPC管理容器的生命周期,执行容器的lifecycle hook和 startup/liveness/readiness的健康检查,同时根据Pod的重启策略在容器失败退出后自动重启容器,CRI是kubelet管理Pod和容器的基础 Ref:https://github.com/kubernetes/cri-api/blob/2c8d015e0d408208ca8843c1d6e2e2fce1e5dd94/pkg/apis/runtime/v1/api.proto#L34 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717...
K8s-kubelet(Overview)
K8s-kubelet(Overview) 基于1.25 kubelete的启动流程主要分为5个步骤: Cobra命令参数解析 运行环境检测和设置 Kubelet对象实例化 启动kubelet主服务 启动HTTP Server服务和gRPC Server Cobra命令行参数解析 Ref:https://github.com/kubernetes/kubernetes/blob/88e994f6bf8fc88114c5b733e09afea339bea66d/cmd/kubelet/app/server.go#L123 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211...



