美文网首页
第一章 Kubernetes入门

第一章 Kubernetes入门

作者: 林高山野 | 来源:发表于2020-06-01 09:47 被阅读0次

    一、Kubernetes总架构图

    1、kubernetes master: 通过HTTP或者HTTPS连接etcd去存储数据。

    2、kubernetes nodes: 通过HTTP或者HTTPS连接kubernetes master去获取命令和报告状态。

    3、kubernetes network: 通过L2,L3或overlay和容器之间建立连接。

    二、分层架构

    Kubernetes设计理念和功能其实就是一个类似Linux的分层架构,如下图所示:

    核心层:Kubernetes最核心的功能,对外提供API构建高层的应用,对内提供插件式应用执行环境

    应用层:部署(无状态应用、有状态应用、批处理任务、集群应用等)和路由(服务发现、DNS解析等)

    管理层:系统度量(如基础设施、容器和网络的度量),自动化(如自动扩展、动态Provision等)以及策略管理(RBAC、Quota、PSP、NetworkPolicy等)

    接口层:kubectl命令行工具、客户端SDK以及集群联邦

    生态系统:在接口层之上的庞大容器集群管理调度的生态系统,可以划分为两个范畴

                        Kubernetes外部:日志、监控、配置管理、CI、CD、Workflow、FaaS、OTS应用、ChatOps等

                        Kubernetes内部:CRI、CNI、CVI、镜像仓库、Cloud Provider、集群自身的配置和管理等

    三、master的工作流程图

    1、Kubecfg将特定的请求,比如创建Pod,发送给Kubernetes Client。

    2、Kubernetes Client将请求发送给API server。

    3、API Server根据请求的类型,比如创建Pod时storage类型是pods,然后依此选择何种REST Storage API对请求作出处理。

    4、REST Storage API对的请求作相应的处理。

    5、将处理的结果存入高可用键值存储系统Etcd中。

    6、在API Server响应Kubecfg的请求后,Scheduler会根据Kubernetes Client获取集群中运行Pod及Minion/Node信息。

    7、依据从Kubernetes Client获取的信息,Scheduler将未分发的Pod分发到可用的Minion/Node节点上。

    四、kubelet结构图

    五、Node

          Node是Pod真正运行的主机,可以物理机,也可以是虚拟机。为了管理Pod,每个Node节点上至少要运行container runtime(比如docker或者rkt)、kubelet和kube-proxy服务。

          不像其他的资源(如Pod和Namespace),Node本质上不是Kubernetes来创建的,Kubernetes只是管理Node上的资源。虽然可以通过Manifest创建一个Node对象(如下json所示),但Kubernetes也只是去检查是否真的是有这么一个Node,如果检查失败,也不会往上调度Pod。

    这个检查是由Node Controller来完成的。Node Controller负责:

    1、维护Node状态

    2、与Cloud Provider同步Node

    3、给Node分配容器CIDR

    4、删除带有NoExecute taint的Node上的Pods

    默认情况下,kubelet在启动时会向master注册自己,并创建Node资源。

    六 PODS

    在Kubernetes中,最小的管理元素不是一个个独立的容器,而是Pod,Pod是最小的,管理,创建,计划的最小单元.

    什么是Pod

    一个Pod(就像一群鲸鱼,或者一个豌豆夹)相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。

    Pod 的context可以理解成多个linux命名空间的联合:

    1、PID 命名空间(同一个Pod中应用可以看到其它进程)

    2、网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限)

    3、IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信)

    4、UTS 命名空间(同一个Pod中的应用共享一个主机名称)

           同一个Pod中的应用可以共享磁盘,磁盘是Pod级的,应用可以通过文件系统调用,额外的,一个Pod可能会定义顶级的cgroup隔离,这样的话绑定到任何一个应用(好吧,这句是在没怎么看懂,就是说Pod,应用,隔离)

        由于docker的架构,一个Pod是由多个相关的并且共享磁盘的容器组成,Pid的命名空间共享还没有应用到Docker中

         和相互独立的容器一样,Pod是一种相对短暂的存在,而不是持久存在的,正如我们在Pod的生命周期中提到的,Pod被安排到结点上,并且保持在这个节点上直到被终止(根据重启的设定)或者被删除,当一个节点死掉之后,上面的所有Pod均会被删除。特殊的Pod永远不会被转移到的其他的节点,作为替代,他们必须被replace.

    为什么

    原因之一:在一组容器作为一个单元的情况下,我们难以简单地对“整体”进行判断及有效地行动。比如,一个容器死亡了,此时算是整体死亡么?是N/M的死亡率么?引入业务无关并且不易死亡的Pause容器作为Pod的根容器,以它的状态代表整个容器组的状态,就简单、巧妙地解决了这个难题。

    原因之二:Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume,这样既简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。

    在Kubernetes里,一个Pod里的容器与另外主机上的Pod容器能够直接通信。

           Pod其实有两种类型:普通的Pod及静态Pod(Static Pod)。静态Pod比较特殊,它并没被存放在Kubernetes的etcd存储里,而是被存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动、运行。

            每个Pod都可以对其能使用的服务器上的计算资源设置限额,当前可以设置限额的计算资源有CPU与Memory两种,其中CPU的资源单位为CPU(Core)的数量,是一个绝对值而非相对值。对于绝大多数容器来说,一个CPU的资源配额相当大,所以在Kubernetes里通常以千分之一的CPU配额为最小单位,用m来表示。通常一个容器的CPU配额被定义为100~300m,即占用0.1~0.3个CPU。

       在Kubernetes里,一个计算资源进行配额限定时需要设定以下两个参数。

    ◎ Requests:该资源的最小申请量,系统必须满足要求。

    ◎ Limits:该资源最大允许使用的量,不能被突破,当容器试图使用超过这个量的资源时,可能会被Kubernetes“杀掉”并重启。

     Pod及周边对象:

    七、Label

    参考资料:

    1、https://blog.csdn.net/huwh_/article/details/71308171

    2、https://www.kubernetes.org.cn/kubernetes%E8%AE%BE%E8%AE%A1%E6%9E%B6%E6%9E%84

    相关文章

      网友评论

          本文标题:第一章 Kubernetes入门

          本文链接:https://www.haomeiwen.com/subject/fzkdzhtx.html