zoukankan      html  css  js  c++  java
  • Kubernetes重要概念理解

    Kubernetes重要概念理解

    kubernetes是目前最主流的容器编排工具,是下一代分布式架构的王者。2018年的kubernetes第一个版本1.10已经发布。下面整理一下,kubernetes的一些基本概念。kubernetes将集群中的机器划分为Master节点和工作节点(Node)。其中Master节点上面运行着管理集群的一组进程kube-apiserver、kube-controller-manager,和kube-schedule,还有etcd服务。node作为集群中的工作节点,运行真正的应用程序,在node上Kubernetes管理的最小运行单元是Pod,Node上面运行着kubelet、kube-proxy、docker引擎服务进程。如下图:

                                                                    备:图片来自网络

    Master节点:集群的控制节点
    Kubernetes API Server(kube-apiserver):提供了HTTP rest 接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口,也是集群控制的入口进程。
    kube-controller-manager:Kubernetes里所有资源的自动化控制中心,可以理解为资源对象的“大总管”。
    kube-schedule:负责资源调度(Pod调度)的进程,相当于公交公司的“调度室”
    etcd:Kubernetes里面的所有资源对象的数据都是保存在etcd中。

    Node节点:Node节点可以是一台物理机,也可以是一台虚拟机。当某个Node宕机时,其上的工作会被Master自动转移到其他节点上去。
    kubelet:负责Pod对应的容器的创建、起停等任务。同时与Master节点密切协作,实现集群管理的基本功能。
    kube-proxy:实现Kubernetes Service的通信和负载均衡机制的重要组件。
    Docker Engine(Docker ):Docker引擎,负责本机容器的创建和管理工作。

    Pod 概念
    Pod是Kubernetes的最重要也是最基本的概念,每个Pod都有一个特殊的被称为“根容器”的Pause容器。Pause容器对应的镜像属于Kubernetes平台的一部分,除了Pause容器,每个Pod还包含一个或者多个紧密相关的用户业务容器。
    Kubernetes里的所有资源对象都可以采用yaml或者JSON格式的文件来定义或者描述,如下是一个Pod的定义:
    apiServer:v1
    kind:Pod
    metadata:
      name:myweb
      labels:
        name:myweb
    spec:
      containers:
      -name:myweb
       image:kubeguide/tomcat-app:v1
       ports:
      -containterPort:8080
      env:
      -name:MYSQL_SERVICE_HOST
      value:'mysql'
     -name: MYSQL_SERVICE_PORT
      value:‘3306’

    Kind为Pod表明这是一个Pod的定义,metadata里的name属性为Pod的名字,metdata里还能定义资源对象的标签(Label),这里声明myweb拥有一个name=myweb的标签(Label)。Pod里所含的容器组成的定义则在spec一节中声明,这里定义了一名字为myweb、对应镜像为kubeguide/tomcat-app:v1的容器,该容器注入了MYSQL_SERVICE_HOST=‘mysql’和MYSQL_SERVICE_PORT='3306'的环境变量(env关键字),并在8080端口(containerPort)上启动容器进程。

    Pod与其他组件关系示意图如下:

    Label

    Label是Kubernetes系统中的另外一个核心概念,一个Label是一个key=label的键值对,其中key与value由用户指定。Label可以附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上。

    Replication Controller

    Replication Controller(简称 RC)是Kubernetes系统中的核心概念之一,决定了一个pod有多少个同时运行的副本。简单来说,它其实是定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个期望值,所以RC的定义包括如下的几个部分。

    所以,只要创建了一个pod,一般都推荐同时给pod创建一个replacation controller,让这个rc一直守护pod,直到pod删除
    
    • Pod期待的副本数(replicas)

    • 用于筛选目标Podde Label Selector。

    • 当Pod的副本数量小于预期数量的时候,用于创建新的Pod模板

    要注意的是,删除RC并不会影响通过该RC已经创建好的Pod。为了删除所有的Pod,可以设置replicas的值为0,然后更新该RC。另外,kubectl提供了stop和delete命令来一次性删除RC和RC控制的全部Pod。

    RC 对pod数量和监控情况的控制是通过replica selector, label selector 的一种来实现的。

    replica selector定义了RC和它所控制的pod之间的一种松耦合关系。这种松耦合关系可以通过修改pod的label将一个pod从replication controller的控制集中移除。比如可以把出现故障的pod从工作集群中移除,然后对pod进行debug。

    Deployment

    Deployment是Kubernetes1.2引入的新概念,引入的目的是为了更好解决Pod的编排问题。

    Deployment相对于RC的一个最大升级是我们可以随时知道当前Pod“部署”的进度。

    Deployment的典型使用场景有以下几个:

    • 创建一个Deployment对象生成对应的Replica Set并完成Pod副本的创建过程

    • 检查Deployment的状态来看部署动作是否完成(Pod副本的数量是否达到预期的值)

    • 更新Deployment以创建新的Pod(比如镜像升级)

    • 如果当前Deployment不稳定,则回滚到一个早先的Deployment版本

    • 挂起或者恢复一个Deployment

    Service

    Service相当于我们微服务架构中的一个“微服务”。

    Service这个概念存在的意义在于pod在Kubernetes中的IP地址不是固定的,因此需要一个代理来确保需要使用pod的应用不需要知晓pod的真实IP地址。另外一个原因是当使用rc创建了多个pod副本时,需要一个代理为这些pod做负载均衡。

    设计原则:任何一个kube-proxy都能将流量正确导向任何一个被代理的pod,而这个kube-proxy不需要和被代理的pod在同一个宿主机上。

    目前,kubernetes主要支持两种service的发现机制:环境变量和DNS。

    上面是Kubernetes中的一些最基本的概念,详细内容后续会持续更新!

  • 相关阅读:
    VS2019调试 asp.net core 2.2 出现《ANCM In-Process Handler Load Failure 发布后启动错误处理》处理
    网页上显示数学公式的三种方案
    FileStream实现多线程断点续传(已封装)
    绝对定位不脱离文档流的方法
    百度地图InfoWindow弹窗圆角
    并发:线程池异步执行与创建单独的线程执行
    互斥锁和自旋锁的区别
    事务的特性和隔离级别
    线程不安全与线程安全示例
    多线程过去与现在
  • 原文地址:https://www.cnblogs.com/qstudy/p/9169105.html
Copyright © 2011-2022 走看看