ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Kubernetes06-CRI和kubectl

2022-03-21 02:03:48  阅读:169  来源: 互联网

标签:kubectl Kubernetes Kubernetes06 get 容器 kubelet CRI


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

#                                                                                                                        #

标签:kubectl,Kubernetes,Kubernetes06,get,容器,kubelet,CRI
来源: https://www.cnblogs.com/maiblogs/p/16032997.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有