Kubernetes1-K8s的简单介绍

1、简介

  一、什么是Kubernetes

    简称K8s,用8代替8个字符“ubernerte”而成的速写,K8s是一个开源的容器编排平台,它是一个跨主机集群的开源容器调度平台,用于管理云平台中多个主机上的容器化的应用,它能够自动化应用容器的部署、扩展、的操做,k8s的目标是让部署容器化的应用简单而且高效,构建一个软件和工具的生态系统,以减轻企业在公有云或私有云运行应用程序的负担,;K8s提供了应用部署、规划,更新,维护的一种机制。html

    K8s项目由Google公司在2014年启动,Kubernetes创建在google公司超过十余年阿运维经验基础之上,Google全部的应用都运行在容器上,再与社区中最好的想法和实践相结合,也许它是如今最受欢迎的容器平台。java

  二、使用K8s能够快速高效响应客户的需求:

    快速、可预测地部署您的应用程序python

    拥有即便扩展应用程序的能力mysql

    不影响现有业务的状况下,无缝地发布新功能web

    优化了硬件资源,下降成本算法

  三、K8s具备以下特色:

    便捷性:不管公有云、私有云、混合云仍是多云架构都全面支持sql

    可扩展性:它是模块化、可插拔、可挂载、可组合,支持各类形式的扩展数据库

    自修复:它能够自保持应用状态、可自重启、自复制、自缩放的,经过声明式语法提供了强大的自修复能力后端

  四、三个时代说明,K8s为何如此有用

    

    传统部署时代:早期,组织都是再物理服务器上运行应用程序,没法位物理服务器中的应用定义资源边界,着会致使资源分配问题。好比,若是再物理服务器上运行多个应用程序,可能会出现一个应用占用大部分资源,其余应用程序的性能就将降低,解决方案每每是在不一样服务器上运行每一个应用程序,但这并无随着资源利用不足而扩展资源,而且维护诸多物理服务器成本也很高。api

    虚拟化部署时代:为了解决上面提到的资源分配问题,引入了虚拟化,它容许在单个物理服务器的CPU上容许多个虚拟机(VM)。虚拟化容许应用程序在VM之间隔离,并提供安全级别,由于一个应用程序的信息不能被另外一个应用程序自由访问。

            虚拟化能够更好的利用物理服务器中资源,并能够实现更好的可伸缩性,由于能够轻松地添加或更新应用程序,下降硬件成本等等。借助虚拟化,您能够将一组物理资源呈现位一组一次性虚拟机。

            每一个VM是一台完整的计算机,在虚拟化硬件上运行全部组件,包括其本身的操做系统

    容器部署时代:容器相似VM,可是他们具备轻松的隔离属性,能够在应用程序之间共享操做系统。所以,容器被认为是轻量的,与VM类似,容器具备本身的文件系统,CPU,内存,进程空间等。因为他们与基础架构分离,所以能够跨云和OS分发进行移植

  五、补充使用容器的好处

    敏捷的应用程序建立和部署:与使用VM镜像相比,容器镜像建立的简便性和效率更高。

    持续的开发,集成和部署:经过快速简单的回滚(镜像不可更改),提供可靠且频繁的容器镜像构建和部署。 

    开发和运营的关注点分离:在构建/发布时,而不时在部署时建立应用程序容器镜像,从而将应用程序与基础架构分离。

    可观察性不只能够显示操做系统级别的信息和指标,还能够显示应用程序的运行情况和其余信号。

    跨开发,测试和生成环境一致性:在便捷式计算机上与在云中相同的运行。

    云和操做系统分发的可移植性:可在Ubuntu,RHEL,coreOS,本地,google kubernetes engine和其余任何地方运行。

    松散耦合,分布式,弹性,解放的微服务:应用程序被分解成较小的独立部分,而且能够动态部署和管理,而不时在一台大型单机上运行的总体堆栈。

    资源隔离:可预测的应用程序性能。

    资源利用:高效率和高密度。

  六、K8s提供了哪些功能

    服务发现和负载均衡

      K8s可使用DNS名称或使用其本身的IP地址公开容器。若是到容器的流量很高,K8s能够负载均衡分配流量,使部署稳定

    存储编排

      容许自动挂载选择的存储系统,例如本地存储,公有云提供商等。

    自动部署和回滚

      可使用Kunbernetes描述已经部署容器的所需状态,并能够以控制速率将实际状态更改所需状态。好比能够自动化Kubernetes来位您的部署建立新容器,删除现有容器并将他们的全部资源用于新容器

    自动包装

      一个Kubernetes集群,能够用于容器化任务,能够指定每一个容器须要多少CPU和内存,使其充分利用资源。   

    自检

      Kubernetes能够从新启动失败的容器,替换容器,杀死对用户定义的运行状态检查没有响应的容器,而且在准备好服务以前不会将其通告给客户端

    加密管理

      Kubernetes容许存储和管理敏感信息,如密码,auth令牌和ssh密钥,能够部署和更新机密的应用程序配置,而无需从新构建容器镜像,也无需在堆栈配置中公开。

  七、kubernetes不是什么

    不是一个传统意义上一应俱全的Paas系统,它保留用户的自由选择,好比:

      不限制支持的应用程序类型,不限制应用程序框架,不限制支持的语言(java/python/ruby)支持多种多样的工做负载,包括无状态,有状态和数据处理工做负载。

      不提供内置服务的中间件(例如:消息中间件)、数据处理框架(例如:spark)、数据库(例如:mysql)和分布式存储(例如Ceph),这些应用能够容许在K8s上。

      没有提供点击即部署的服务市场。

      源代码到镜像都是开源的,它不部署源代码且不构建您的应用程序。持续集成,交付和部署(CI/CD)工做流取决各公司组织的文化和偏好。

      容许用户选择其余的日志记录,监控和告警系统,(它也提供一些集成做为概念证实)。

      不提供也不要求应用程序配置语言/系统,提供一个声明性API,能够经过任意形式的声明性规范。

      不提供也不采用任何全面的机器配置,维护,管理或自动修复系统。

     另外许多Paas系统运行在K8s上面,好比openshift,deis,eldarion,能够自定义本身的paas与本身选择的CI系统集成,或与K8s一块儿使用,将容器镜像部署到K8s上。

    因为K8s在应用级别而不是仅仅在硬件级别运行,所以它提供Paas产品通用的一些功能,如:部署、扩展、负载均衡、日志记录、监控等。可是K8s不是单一的,默认是可选和可插拔的。

    K8s也不只仅是一个编排系统,它消除了编排的须要,编排表明工做流的执行为从A到B,而后到C,相反,K8s是包括一套独立、可组合的控制过程,经过声明式语法使其连续地朝向指望状态驱动当前状态,不须要告诉它具体的从A到C的过程,只须要告诉到C的状态便可,也不须要集中控制,这使得系统更易于使用,而且强大,更具备弹性和扩展性。

  

2、K8s架构

  一、总体架构

3、常见组件

    请见图示1:分别包含一、二、三、4

        

  一、master:

    Kubernetes管理节点

  二、apiserver:

    提供接口服务,用户经过apiserver来管理整个容器集群平台。API Server负责和Etcd交互(其余组件不会直接操做etcd,只有API Server这么作),整个Kubernetes集群的全部交互都是以API server为核心的。如:一、全部对集群进行的查询和管理都要经过API来进行;二、全部模块之间并不会互相调用,而是经过和API Server打交道来完成本身那部分的工做、API Server提供的验证和受权保证了整个集群的安全

  三、scheduler Kubernetes 调度服务:

  四、Replication Controllers 复制:

     保证pod的高可用

     Replication Controller是Kubernetes系统中最有用的功能,实现复制多个Pod副本,每每一个应用须要多个Pod来支撑,而且能够保证其复制的副本数,即便副本所调度分配的宿主机出现异常,经过Replication Controller 能够保证在其它宿主机启用同等数量的Pod。Replication Controller 能够经过repcon模板来建立多个Pod副本,一样也能够直接复制已存在Pod,须要经过Label selector来关联

 

    请见图示2:包含五、六、七、8

  五、minion:

    真正运行容器container的物理机。Kubernets中须要不少minion集群,来提供运算

  六、container:

    容器,能够运行服务和程序

  七、Pod:

    Kubernetes系统中,调度的最小颗粒不是单纯的容器,而是抽象成一个Pod,Pod是一个能够被建立、销毁、调度、管理的最小部署单元。pod中能够包括一个或一组容器。

      pod:豆荚的意思,以下图示理解pod及容器实例:

  八、Kube_prox 代理:

    作端口转发,至关于LVS-NAT模式中的复制调度器

    Proxy解决了同一宿主机,相同服务端口冲突的问题,还提供了对外服务的能力,Proxy后端使用了随机、轮询负载均衡算法。

      

  九、etcd:

    存储Kubernetes的配置信息,能够理解为K8s数据库,存储这K8s容器平台全部节点、pods、网络等信息

  十、services:

    services是Kunbernetes最外围的单元,经过虚拟一个访问IP及服务端口,能够访问咱们定义好的Pod资源。目前的版本是经过iptables的nat转发来实现,钻发的目标端口为Kube_proxy生成的随机端口。

  十一、Lables标签:

    Lables是用于区分Pod、Service、Replication Controller的key/value键值对,仅使用在Pod、Service、Replication Controller之间的关系识别,但对这些单元自己进行操做时得使用name标签。

  十二、Deployment部署

      Kubernetes Deployment用于更新Pod和Replica Set(下一代的Replication Controller)的方法,能够在Deployment对象中只描述你所指望的理想专题(预期运行状态),Deployment控制器会将如今的实际状态转换成指望的状态。例如,将全部的webapp:v1.0.9升级成webapp:v1.1.0,只须要建立Deployment,Kubernetes会按照Deployment自动进行升级,经过Deployment能够用来建立新的资源

      Deployment能够帮咱们实现无人值守的上学,大大下降咱们上线的复杂和风险

  1三、Kubelet命令

      Kubelet和Kube-proxy都运行在minion节点上

      Kube-proxy实现Kubernetes网络相关内容

      Kubelet命令管理pod、pod中容器机让其的镜像和卷等信息

  1四、总结:各组件之间的关系

    1)、kubernetes由一个master和多个minion组成,master经过api提供服务接收kubectl的请求来调度管理集群,kubectl是k8s平台的一个管理命令

    2)、Replication controller定义了多个pod或者容器须要运行,若是当前集群中运行的pod或容器达不到配置的数量,replication controller会调度容器在多个minion上运行,保证集群中的pod数量

    3)、service则定义真实对外提供的服务,一个service会对应后端运行的多个container。

    4)、Kubernetes是一个管理平台,minion上的kube-proxy拥有提供真实服务公网IP,客户端访问K8S中提供的服务,是直接访问到kube-proxy上的。

    5)、在kubernetes中pod是一个基本单元,一个pod能够是提供相同功能的多个container,这些容器会被部署在同一个minion上,minion是运行Kubelet中容器的物理机,minion介绍master的指令建立pod或者容器。

 

 参考:互联网内容

 

转载请注明出处:http://www.javashuo.com/article/p-etzepibh-gv.html

 

部署:请见Kubernetes2-K8s的集群部署

 

kubectl:请见Kubernetes3-kubectl管理Kubernetes容器平台-1 

kubectl:请见Kubernetes3-kubectl管理Kubernetes容器平台-2