本文主要是介绍Kubernetes06-CRI和kubectl,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1、CRI(容器运行时接口)
- 容器运行时说明文档:https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/
- 开源的CRI有:Docker、CRI-O、Containerd、frakti(基于Hypervisor的容器运行时)。
- Kubernetes Node(kubelet)的主要功能就是启动和停止容器的组件(例如Docker),我们称之为容器运行时(Container Runtime)。(将容器运行时理解为容器引擎)
- 为了更具扩展性,Kubernetes从1.5版本开始就加入了容器运行时插件API,即Container Runtime Interface,简称CRI。
1、CRI概述
- Kubernetes从1.5版本开始引入了CRI接口规范,通过插件接口模式,Kubernetes无须重新编译就可以使用多种容器运行时。
- CRI包含Protocol Buffers、gRPC API、运行库支持及开发中的标准规范和工具。
- Docker的CRI实现在Kubernetes 1.6中被更新为Beta版本,并在kubelet启动时默认启动。
2、CRI的主要组件
- kubelet使用gRPC框架通过UNIX Socket与容器运行时(或CRI代理)进行通信。在这个过程中kubelet是客户端,CRI代理(shim)是服务端,如图2.3所示。。
- Protocol Buffers API包含两个gRPC服务:ImageService和RuntimeService。
- ImageService提供了从仓库拉取镜像、查看和移除镜像的功能。
- RuntimeService负责Pod和容器的生命周期管理,以及与容器的交互(exec/attach/port-forward)。rkt和Docker这两个容器运行时可以使用一个Socket同时提供两个服务,在kubelet中可以用--container-runtimeendpoint和--image-service-endpoint参数设置这个Socket。
3、Pod和容器的生命周期管理
- Pod由一组应用容器组成,其中包含共有的环境和资源约束。
- 在CRI里,环境被称为PodSandbox。Kubernetes有意为容器运行时留下一些发挥空间,它们可以根据自己的内部实现来解释PodSandbox。
- 对于Hypervisor类的运行时,PodSandbox会具体化为一个虚拟机。
- 其他,例如Docker,它是一个Linux命名空间。
- 在v1alpha1 API中,kubelet会创建Pod级别的cgroup传递给容器运行时,并以此运行所有进程来满足PodSandbox对Pod的资源保障。
- RuntimeService服务包括对Sandbox和Container操作的方法。
- 在启动Pod之前,kubelet调用RuntimeService.RunPodSandbox来创建环境。这一过程包括为Pod设置网络资源(分配IP等操作)。
- PodSandbox被激活之后,就可以独立地创建、启动、停止和删除不同的容器了。kubelet会在停止和删除PodSandbox之前首先停止和删除其中的容器。
- kubelet的职责在于通过RPC管理容器的生命周期,实现容器生命周期的钩子,存活和健康监测,以及执行Pod的重启策略等。
2、kubectl命令行工具
2.1、kubectl用法概述
kubectl [command] [TYPE] [NAME] [flags]
(1)command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等。
(2)TYPE:资源对象的类型。资源类型不区分大小写,能以单数、复数或者缩写形式表示。例如以下3种TYPE是等价的。
- kubectl get pod pod1
- kubectl get pods pod1
- kubectl get po pod1
(3)NAME:资源对象的名称。名称区分大小写。如果不指定名称,则将返回属于TYPE的全部对象的列表,例如kubectl get pods
- 在对多个资源执行操作时,可以按类型和名称指定每个资源,或指定一个或多个文件:
- 要按类型和名称指定资源:
- 指定同一资源类型的多个资源对象,请执行以下操作:TYPE1 name1 name2 name<#>。
- 例子:kubectl get pod example-pod1 example-pod2
- 分别指定多个资源类型:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>。
- 例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
- 用一个或多个文件指定资源:-f file1 -f file2 -f file<#>
- 使用YAML而不是JSON因为YAML更容易使用,特别是用于配置文件时。
- 例子:kubectl get -f ./pod.yaml
(4)flags:kubectl子命令的可选参数。例如,可以使用 -s 或 -server 参数指定Kubernetes API 服务器的地址和端口。而不用默认值。
2.2、资源对象
- kubectl可操作的资源对象类型。
- 获取资源对象:
kubectl api-resources
1
# #
这篇关于Kubernetes06-CRI和kubectl的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!