目录描述
-
Kubernetes组件说明
-
特定接口CRI、CNI、CSI
-
Kubernetes v1.25集群创建方案选择
一、Kubernetes组件说明
Docker 的运行机制
运行机制详解:
-
docker client:命令行输入的docker命令就是一个docker客户端
-
docker Engine:Engine也就是引擎,client与Engine间有一定的连接接口
-
containterd:docker引擎去调用containterd,再去连接到containterd-shim(中间的一个切片/垫片类似),再去连接到runC,再去运行containter(也就起容器)
-
其中containterd和runC组成了docker的运行环境,叫做容器运行时,以上是docker运行的基本框架
补充说明:docker与kubernetes的区别是:docker是管理当前主机上的容器,k8s是管理多台主机、跨平台的分布式管理系统。Kubernetes的设计初衷是支持可插拔架构,从而利于扩展kubernetes的功能。
kubernetes核心组件:
k8s master节点:提供控制功能,完成领导性的任务
-
kube-APIserver:相当于对外的总联络中心,对外提供一个总的接口,所以外部访问都要通过apiserver
-
etcd:数据库,存储相关的k8s资源
-
kub-Scheduler:计划调度器,把k8s的各种工作下发给具体来完成任务的node节点
-
kub-controller-Manager:控制器,网络控制器、卷控制器、服务控制器、node控制器等,来管理各种资源
k8s node节点:提供工作能力,来执行实际的工作任务
-
kubelet:作为连接master和node间的桥梁,接受来自master的下发任务,负责维护pod和容器的生命周期
-
kub-proxy:实现pod网络代理,是service的透明代理兼四层负载均衡功能,核心能力将service的访问请求转发到后端多个pod实例上
二、特定接口CRI、CNI、CSI
Kubernetes提供了三个特定功能的接口,kubernetes通过调用这几个接口,来完成相应的功能。
1. 容器运行时接口CRI: Container Runtime Interface
kubernetes 对于容器的解决方案,只是预留了容器接口,只要符合CRI标准的解决方案都可以使用。CRI容器运行时,早期和主流的是docker,后经生态发展,目前其他的也有多种了,比如containerd,dokcer不再是唯一选择
2. 容器网络接口CNI: Container Network Interface
kubernetes 对于网络的解决方案,只是预留了网络接口,只要符合CNI标准的解决方案都可以使用。CNI容器网络接口:通过跨网络与容器进行通信,依赖于网络插件实现能力,如Flannel、calico
3. 容器存储接口CSI: Container Storage Interface
kubernetes 对于存储的解决方案,只是预留了存储接口,只要符合CSI标准的解决方案都可以使用此接口非必须。应对不同的存储类型提供接口,让工作节点把数据在某个地方做持久化保存
补充说明:容器运行时接口(CRI),是kubernetes定义的一组gRPC服务。Kubelet作为客户端,基于gRPC协议通过Socket和容器运行时通信。CRI 是一个插件接口,它使 kubelet 能够使用各种容器运行时,无需重新编译集群组件。Kubernetes 集群中需要在每个节点上都有一个可以正常工作的容器运行时, 这样 kubelet 能启动 Pod 及其容器。容器运行时接口(CRI)是 kubelet 和容器运行时之间通信的主要协议。
CRI包括两类服务:镜像服务(Image Service)和运行时服务(Runtime Service)
-
镜像服务提供下载、检查和删除镜像的远程程序调用
-
运行时服务包含用于管理容器生命周期,以及与容器交互的调用的远程程序调用。
OCI(Open Container Initiative,开放容器计划)定义了创建容器的格式和运行时的开源行业标准,包 括镜像规范(Image Specification)和运行时规范(Runtime Specification)
市面上常用的容器引擎有很多,dockershim, containerd 和cri-o都是遵循CRI的容器运行时
补充说明:什么是容器运行时:如下
简单来说,就是一个程序运行的集合,程序运行都需要一套环境,例如Java要运行,就需要台Jvm,Jvm就提供了Java程序运行的环境;
所对应的还有"编译时",和"运行时"不在一个阶段。比如某程序开发出来是源码,要将其编译成可以执行的二进制,这称为"编译时";最终将二进制运行起来,这叫做"运行时"
三、Kubernetes v1.25集群创建方案选择
方式1: Docker
Docker使用的普及率较高,虽然Kubernetes-v1.24 默认情况下废弃了kubelet对于Docker的支持,但是我们还可以借助于Mirantis维护的cri-dockerd插件方式来实现Kubernetes集群的创建。
Docker Engine 没有实现 CRI, 而这是容器运行时在 Kubernetes 中工作所需要的。为此,必须安装一个额外的服务 cri-dockerd。 cri-dockerd 是一个基于传统的内置 Docker 引擎支持的项目, 它在 1.24 版本从 kubelet 中移除
项目站点: https://github.com/Mirantis/cri-dockerd
方式2: Containerd
默认情况下,Kubernetes在创建集群的时候,使用的就是Containerd 方式。
方式3: CRI-O
CRI-O的方式是Kubernetes创建容器最直接的一种方式,在创建集群的时候,需要借助于cri-o插件的方式来实现Kubernetes集群的创建。
最后~欢迎关注我! @Linux学习的那些事儿
我的个人资源整理,满满都是干货: → 可按需访问领取
如果本文对你有帮助,欢迎点赞、收藏、转发给朋友,让我有持续创作的动力!