kubernetes的初了解

1 Kubernetes简介及原理

1.1 什么是Kubernetes?

Kubernetes(通常写成“k8s”)是最开始由google设计开发最后贡献给Cloud Native Computing Foundation的开源容器集群管理项目。它的设计目标是在主机集群之间提供一个能够自动化部署、可拓展、应用容器可运营的平台。Kubernetes通常结合docker容器工具工作,并且整合多个运行着docker容器的主机集群。


1.2 k8s的优点

1. 具有完备的集群管理能力

2. 提供了完善的管理工具,涵盖了开发,部署,测试及运维等各个环节

3. 对现有的编程语言、框架及中间件没有任何的侵入性,故易于迁移至k8s平台

4. 自动化容器的部署和复制

5. 高可用、容器自愈等等



1.3 使用k8s的好处

1. 大幅节省开发及维护成本

2. 可以将精力更加集中于业务本身

3. 解决了服务扩容与服务升级的问题



1.4 k8s的架构图




1.5    Kubernetes中的核心概念

Service(2.6节介绍)、Label(2.4节介绍)、RC(2.5节介绍)



2 Kubernetes的基本概念及术语

2.1    Master

    Master节点在Kubernetes中负责整个集群的管理和控制,接收和运行所有基本命令

    在Master上运行的进程:

    (1) 提供HTTP Rest接口的关键服务进程,是k8s中所有资源增删改查操作的唯一入口

    (2) 管理所有资源对象的进程

    (3) 资源调度的进程(Pod调度)



2.2    Node

    Node是k8s中真正的工作负载节点,(通过docker工作)  当某个Node宕机时,,其上的工作会被Master调度到其他节点上面

    在Node上运行的关键进程:

    (1) kubelet 负责Pod对应容器的创建,启停,同时与Master密切合作,实现集群管理的基本功能

    (2) kube-proxy 实现kube Service的通信与负载均衡机制的组件

    (3) Docker Engine Docker引擎,负责本机的容器创建与管理

    

    Node节点可以在运行期间动态注册到Kubernetes里面,默认方式是kubelet向Master注册自己,当Node被纳入集群管理范围,kubelet就会定时向Master汇报自身情况。若指定时间没有汇报情况,则会被Master判断为失联,Node状态会被变为不可用,之后会被Master进行工作迁移。



2.3    Pod

    Pod是Kubernetes中最基本也是最重要的概念。Pod分为普通Pod与静态Pod。

        普通Pod:创建之后,被放到etcd中,之后被Master调度到Node节点上。

        静态Pod:存放在Node节点上的某个具体文件中,并且只在此Node节点上运行。静态Pod不关联任何RC,是由kubelet来进行监控。

    一个Pod包括一个Pause的"根容器",和若干个与工作相关的容器。

    Pause容器在创建Pod时在自动创建,作用:1. 代表整个Pod的状态    2.工作容器共享Pause的IP,和Pause容器挂载的Volume卷。

    

    kubernetes的Service通过Label进行批量管理,与Node无关,举个例子:A公司下有一个小组在做k8s,这个组里面可能包含A的外包公司B,C,D的员工,但是他们都是为这个组服务的,这里面公司就类似Node,员工是Pod,这个工作组相当于Label。


2.4    Label

    Label容器是kubernetes中的核心概念之一。一个label是通过key=value的键值对组成,key、value都由用户自己指定,Label可以被附加到任何资源上,比如Node,Pod,Service,RC等等,一个Label可以给对象创建多组标签,也可以给多个对象创建一个标签。

    Label  Selector是类似SQL中where语句的作用。可以查询出指定的label来进行控制操作。

    Label与Label Selector共同构成了kubernetes最核心的应用模型,使得被管理的对象能被精细地分组管理,同时实现了整个集群的高可用性。



2.5    Replication Controller(RC)

    Replication Controller(RC)是Kubernetes中的另一个核心概念,应用托管在Kubernetes之后,Kubernetes需要保证应用能够持续运行,这是RC的工作内容,它会确保任何时间Kubernetes中都有指定数量的Pod在运行。在此基础上,RC还提供了一些更高级的特性,比如滚动升级、升级回滚等。

    RC通过Label与Pod进行关联。

    RC的一些特性及作用:

        (1)    定义一个RC实现Pod的创建过程及副本数量的自动控制

        (2)    RC里面包括完整的Pod定义模板

        (3)    RC通过Label Selector实现对Pod副本的自动控制

        (4)    通过RC里的Pod副本数量,可以实现Pod的扩缩容功能   或命令: kubectl scale rc (Label) --replicas=(数量)

        (5)    通过RC的Pod模板的镜像版本,可以实现Pod的滚动升级功能

        (6)    删除RC不会影响到该RC已经创建好的Pod

    滚动升级:比如旧版本有5个容器,先停止一个,启一个新版本容器,再将第二个停止,启动第二个新容器,直到5个旧版本容器全部停止并且启动5个新版本容器为止,滚动升级期间不影响正常工作。



2.6    Service

    Service是kubernetes中最核心的资源对象之一,一个Service即一个"微服务",Pod、RC等资源都是为Service服务的

    下面上一张关系图


    Service定义了一个服务的访问入口,前端应用通过这个入口去访问后端工作的Pod。Service通过Label Selector来连接Pod,而RC的作用是保证Service的服务能力以及服务质量始终处于预期标准。


2.6.1 如何从外部访问Service

    Service的Cluster ip是虚拟构造的IP,属于集群内部的ip,无法在外部直接使用这个地址。解决办法:

        在Service的配置文件中定义出NodePort来绑定Node的端口,通过端口访问

        例子:

            (只写包含配置文件)

            apiVersion:v1

            kind:Service

            ports:

                -port:8080

                nodePort:31000

    这样就可以通过Nodeip的31000来访问Service。但是假设Service集群中有10个Node,那么我们需要加一个负载均衡器来解决。(请求过来后,通过算法来决定转发到哪个Node的Port上面)



2.7    Volume

    Volume是Pod中能够被多个容器访问的共享目录,定义在Pod上,然后被被多个容器挂载在容器具体文件中。volume的生命周期与Pod相同,与容器无关。



2.8    Deployment

    是Kubernetes1.2中新引入的概念,可以看作RC的升级版,Deployment与RC的最大不同是可以显示当前Pod部署进度。



2.9    Persistent Volume(PV)

    PV是kubernetes集群中的某个网络存储中对应的一块存储。属于kubernetes集群,并不属于某个Pod,可在每个Pod上访问

    某个Pod想要申请PV的话,需要先定义一个PersistentVolumeClaim(PVC)

    PV的accessModes属性:

        (1)    ReadWriteOnce    读写权限,只能被单个Node挂载

        (2)    ReadOnlyMany    只读权限,允许被多个Node挂载

        (3)    ReadWriteMany    读写权限,允许被多个Node挂载

    PV的状态:

        (1)空闲状态    Available

        (2)已经绑定到某个PVC上    Bound

        (3)对应的PVC已经删除,但是资源还没有被集群收回    Released

        (4)PV自动回收失败    Faild



2.10    NameSpace(命名空间)

    NameSpace在很多情况下用于实现多租户的资源隔离,通过将集群内部资源对象"分配"到不同的NameSpace中,形成逻辑上分组的不同项目,小组或用户组,便于不同的分组在共享使用整个集群的资源的同时还能被分别管理。

    NameSpace的定义:

        使用一个yaml文件定义,例如定义一个名为development的命名空间:

            apiVersion:v1

            kind:NameSpace   

            metadata:

                name:development




注:

参考资料:Kubenetes权威指南及CSDN的博客

此文仅作为笔记供本人总结使用,有不正确的地方还请大牛们多指正。

发布了2 篇原创文章 · 获赞 0 · 访问量 165

猜你喜欢

转载自blog.csdn.net/wxy951218/article/details/79551442