K8s worker节点CRI-O的演变

简介: K8s worker节点CRI-O的演变

目录

CRI-O的演变

阶段0:Docker是主导者

阶段1:CRI(容器运行时接口)

阶段2:CRI-O和OCI

OpenShift进入k8s世界

Red Hat OpenShift适用于CRI-O



CRI-O的演变

仅仅几个月前,我从未将容器称为容器……我曾经将它们称为docker容器……当听说OpenShift即将迁移到CRI-O时,我认为是时候必须了解k8s worker节点的演变了。

如果你看一下k8s架构的发展,工作节点运行容器的方式已经发生了重大的变化和优化。


阶段0:Docker是主导者

 

它以简单的kubelet体系结构,作为工作节点代理通过api-server从主节点接收来自管理员的命令。

Kubelet使用Docker运行时来启动Docker容器(从镜像仓库中拉出镜像)。一切都很好……直到具有更好性能和独特优势的其他容器运行时开始出现在市场上,我们意识到,如果我们可以即插即用这些运行时就很好了……我们决定使用适配器/代理设计模式解决此问题。这就进入了下一个阶段。

演变就是要适应生态系统的变化


阶段1:CRI(容器运行时接口)

 

容器运行时接口(CRI)规范是在K8s 1.5中引入的。CRI还包括缓冲区,gRPC API和类库。通过在kubelet中运行的gRPC客户端和在CRI Shim中运行的gRPC服务器,这带来了抽象层,并充当了适配器。这允许以更简单的方式运行各种容器运行时。

在继续之前……我们需要了解容器运行时应具有的所有功能--用于管理容器运行时,下载镜像,解压缩它们,运行镜像,以及处理网络,存储。很好...直到我们开始意识到这就像一块巨石!!!

让我将这些功能分为2个层次。

  • 高级别 —镜像管理,传输,解压缩镜像和API,以发送命令来运行容器,网络,存储(例如:rkt,docker,LXC等)。
  • 低级别  -运行容器。

如果将这些功能拆分为可以与各种开源选项集成并匹配的组件,这样可以提供更多的优化和效率。这是有意义的……我们用来解决此问题的的设计/架构模式是什么呢?分层模式...对吗?这就进入了了下一个阶段。


阶段2:CRI-O和OCI

 

因此,OCI(Open Container Initiative,开放容器计划)提出了明确的容器运行时和镜像规范,该规范有助于实现多平台支持(Linux,Windows,VM等)。Runc是OCI的默认实现,它是容器运行时的底层。

现代的容器运行时基于此分层体系结构,其中Kubelet通过CRI-gRPC与容器运行时对话,而容器运行时通过OCI运行容器。

CRI有多种实现,例如Dockershim,CRI-O,containerD。

在第1阶段快要结束时,我提到了创建端到端容器管理工具包的灵活性……

OpenShift进入k8s世界

 

  • podman:无守护程序的容器引擎,用于开发管理和运行OCI容器,并使用Docker CLI语言
  • skopeo:管理容器的CLI工具。我最喜欢skopeo的功能之一就是能够在远程镜像仓库上检查镜像,而无需下载或解包!!!……并且它已经发展成为成熟的用于远程镜像仓库的镜像管理工具,包括对镜像进行签名,在镜像仓库之间复制并保持远程镜像仓库同步。这大大加快了容器构建,管理和部署的速度……
  • buildah:逐步帮助构建OCI镜像的工具!!!! ..是的……前几天我在玩。我不必想象镜像的组成,也不必编写复杂的Dockerfile。相反,我一次只构建镜像一层,对其进行测试,然后回滚(如果需要),一旦我满意,就可以提交它到镜像仓库...那太酷了!!!
  • cri-o:k8s的轻量级容器运行时。
  • OpenShift:一个企业级别Kubernetes 容器平台,可以实现全堆栈自动化运维,以管理混合云和多云部署。


Red Hat OpenShift适用于CRI-O

Red Hat OpenShift 4.x选择CRI-O作为默认的容器运行时。在我看来,这个决定中的许多内容都可以归结为选择基于CoreOS构建不可变的基础架构,并在该基础架构上运行OpenShift4.x。CRI-O以CoreOS为基础是显而易见的,而且,CRI-O由k8s社区(完全开放源代码,非常精简)直接控制k8s容器运行时接口来管理。

CRI-O是Kubernetes最佳运行时的6个原因

 

上图,显示了在Red Hat OpenShift 4.x中CRI-O如何工作。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes API 调度
k8s中节点无法启动Pod
【10月更文挑战第3天】
594 6
|
12月前
|
Kubernetes API 网络安全
当node节点kubectl 命令无法连接到 Kubernetes API 服务器
当Node节点上的 `kubectl`无法连接到Kubernetes API服务器时,可以通过以上步骤逐步排查和解决问题。首先确保网络连接正常,验证 `kubeconfig`文件配置正确,检查API服务器和Node节点的状态,最后排除防火墙或网络策略的干扰,并通过重启服务恢复正常连接。通过这些措施,可以有效解决与Kubernetes API服务器通信的常见问题,从而保障集群的正常运行。
934 17
|
存储 Kubernetes Docker
Kubernetes节点资源耗尽状态的处理
Kubernetes节点资源耗尽状态的处理
|
12月前
|
Kubernetes Shell Windows
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
435 12
|
存储 Kubernetes 调度
在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
在K8S中,⼀个pod的不同container能够分开被调动到不同的节点上吗?
|
资源调度 Kubernetes 调度
玩转Kubernetes集群:掌握节点和Pod自动扩缩容,让你的系统更智能、更高效!
【8月更文挑战第22天】Kubernetes的核心功能之一是自动扩缩容,确保系统稳定与高可用。节点自动扩缩容由调度器和控制器管理器协作完成,依据资源紧张程度动态调整。主要采用HPA、VPA及Cluster Autoscaler实现。Pod自动扩缩容通常通过HPA控制器按需调整副本数量。例如,设置HPA控制器监视特定部署的CPU使用率,在80%阈值上下自动增减副本数。合理利用这些工具可显著提升系统性能。
451 2
|
Kubernetes 调度 Perl
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
在K8S中,Pod多副本配置了硬亲和性,会调度到同⼀个节点上吗?
|
Kubernetes 负载均衡 调度
在K8S中,K8S外部节点访问Pod有哪些方式?
在K8S中,K8S外部节点访问Pod有哪些方式?
|
边缘计算 人工智能 Kubernetes
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
边缘计算问题之理解 Kubernetes 节点资源的四层分配结构如何解决
179 1
|
Kubernetes 固态存储 调度
在K8S中,如何在指定节点上部署Pod呢?
在K8S中,如何在指定节点上部署Pod呢?

推荐镜像

更多