k8s部署01-----what is k8s?

简介

一、Kubernetes代码托管在GitHub上:https://github.com/kubernetes/kubernetes/node

 

二、Kubernetes是一个开源的,容器集群管理系统,Kubernetes的目标是让部署容器化的应用简单而且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。经过Kubernetes你能够:git

  • 快速部署应用
  • 快速扩展应用
  • 无缝对接新的应用功能
  • 节省资源,优化硬件资源的使用

 

三、Kubernetes一个核心的特色就是可以自主的管理容器来保证云平台中的容器按照用户的指望状态运行着(好比用户想让apache一直运行,用户不须要关心怎么去作,Kubernetes会自动去监控,而后去重启,新建,总之,让apache一直提供服务),管理员能够加载一个微型服务,让规划器来找到合适的位置,同时,Kubernetes也系统提高工具以及人性化方面,让用户可以方便的部署本身的应用(就像canary deployments)。github

 

四、如今Kubernetes着重于不间断的服务状态(好比web服务器或者缓存服务器)和原生云平台应用(Nosql),在不久的未来会支持各类生产云平台中的各类服务,例如,分批,工做流,以及传统数据库。web

 

五、在Kubenetes中,全部的容器均在Pod中运行,一个Pod能够承载一个或者多个相关的容器,在后边的案例中,同一个Pod中的容器会部署在同一个物理机器上而且可以共享资源。一个Pod也能够包含O个或者多个磁盘卷组(volumes),这些卷组将会以目录的形式提供给一个容器,或者被全部Pod中的容器共享,对于用户建立的每一个Pod,系统会自动选择那个健康而且有足够容量的机器,而后建立相似容器的容器,当容器建立失败的时候,容器会被node agent自动的重启,这个node agent叫kubelet,可是,若是是Pod失败或者机器,它不会自动的转移而且启动,除非用户定义了 replication controller。sql

 

六、用户能够本身建立并管理Pod,Kubernetes将这些操做简化为两个操做:基于相同的Pod配置文件部署多个Pod复制品;建立可替代的Pod当一个Pod挂了或者机器挂了的时候。而Kubernetes API中负责来从新启动,迁移等行为的部分叫作“replication controller”,它根据一个模板生成了一个Pod,而后系统就根据用户的需求建立了许多冗余,这些冗余的Pod组成了一个整个应用,或者服务,或者服务中的一层。一旦一个Pod被建立,系统就会不停的监控Pod的健康状况以及Pod所在主机的健康状况,若是这个Pod由于软件缘由挂掉了或者所在的机器挂掉了,replication controller 会自动在一个健康的机器上建立一个一摸同样的Pod,来维持原来的Pod冗余状态不变,一个应用的多个Pod能够共享一个机器。数据库

 

七、咱们常常须要选中一组Pod,例如,咱们要限制一组Pod的某些操做,或者查询某组Pod的状态,做为Kubernetes的基本机制,用户能够给Kubernetes Api中的任何对象贴上一组 key:value的标签,而后,咱们就能够经过标签来选择一组相关的Kubernetes Api 对象,而后去执行一些特定的操做,每一个资源额外拥有一组(不少) keys 和 values,而后外部的工具可使用这些keys和vlues值进行对象的检索,这些Map叫作annotations(注释)。apache

 

八、Kubernetes支持一种特殊的网络模型,Kubernetes建立了一个地址空间,而且不动态的分配端口,它能够容许用户选择任何想使用的端口,为了实现这个功能,它为每一个Pod分配IP地址。后端

 

九、现代互联网应用通常都会包含多层服务构成,好比web前台空间与用来存储键值对的内存服务器以及对应的存储服务,为了更好的服务于这样的架构,Kubernetes提供了服务的抽象,并提供了固定的IP地址和DNS名称,而这些与一系列Pod进行动态关联,这些都经过以前提到的标签进行关联,因此咱们能够关联任何咱们想关联的Pod,当一个Pod中的容器访问这个地址的时候,这个请求会被转发到本地代理(kube proxy),每台机器上均有一个本地代理,而后被转发到相应的后端容器。Kubernetes经过一种轮训机制选择相应的后端容器,这些动态的Pod被替换的时候,Kube proxy时刻追踪着,因此,服务的 IP地址(dns名称),历来不变。api

 

十、全部Kubernetes中的资源,好比Pod,都经过一个叫URI的东西来区分,这个URI有一个UID,URI的重要组成部分是:对象的类型(好比pod),对象的名字,对象的命名空间,对于特殊的对象类型,在同一个命名空间内,全部的名字都是不一样的,在对象只提供名称,不提供命名空间的状况下,这种状况是假定是默认的命名空间。UID是时间和空间上的惟一缓存

 

特色

一、可移植:支持公有云,私有云,混合云,多重云(multi-cloud)

二、可扩展:模块化, 插件化, 可挂载, 可组合

三、自动化:自动部署,自动重启,自动复制,自动伸缩/扩展

 

设计架构

Kubernetes集群包含有节点代理kubeletMaster组件(APIs, scheduler, etc),一切都基于分布式的存储系统。下面这张图是Kubernetes的架构图。

在这张系统架构图中,咱们把服务分为运行在工做节点上的服务组成集群级别控制板的服务

② Kubernetes节点有运行应用容器必备的服务,而这些都是受Master的控制。

 每次个节点上固然都要运行Docker。Docker来负责全部具体的映像下载和容器运行。

④ Kubernetes主要由如下几个核心组件组成:

  • etcd 保存了整个集群的状态;
  • apiserver 提供了资源操做的惟一入口,并提供认证、受权、访问控制、API注册和发现等机制;
  • controller manager 负责维护集群的状态,好比故障检测、自动扩展、滚动更新等;
  • scheduler 负责资源的调度,按照预约的调度策略将Pod调度到相应的机器上;
  • kubelet 负责维护容器的生命周期,同时也负责VolumeCVI)和网络(CNI)的管理;
  • Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡;

除了核心组件,还有一些推荐的Add-ons

  • kube-dns 负责为整个集群提供DNS服务
  • Ingress Controller 为服务提供外网入口
  • Heapster提供资源监控
  • Dashboard提供GUI
  • Federation提供跨可用区的集群
  • Fluentd-elasticsearch提供集群日志采集、存储与查询

相关名词

(1kubelet

kubelet负责管理pods和它们上面的容器,images镜像、volumesetc

 

(2kube-proxy

  每个节点也运行一个简单的网络代理和负载均衡(详见services FAQ )PS:官方 英文)。 正如Kubernetes API里面定义的这些服务(详见the services doc)(PS:官方 英文)也能够在各类终端中以轮询的方式作一些简单的TCPUDP传输。

  服务端点目前是经过DNS或者环境变量( Docker-links-compatible Kubernetes{FOO}_SERVICE_HOST  {FOO}_SERVICE_PORT 变量都支持)。这些变量由服务代理所管理的端口来解析。

 

(3Kubernetes控制面板

  Kubernetes控制面板能够分为多个部分。目前它们都运行在一个master 节点,然而为了达到高可用性,这须要改变。不一样部分一块儿协做提供一个统一的关于集群的视图。

 

(4etcd

  全部master的持续状态都存在etcd的一个实例中。这能够很好地存储配置数据。由于有watch(观察者)的支持,各部件协调中的改变能够很快被察觉。

 

(5Kubernetes API Server

  API服务提供Kubernetes API PS:官方 英文)的服务。这个服务试图经过把全部或者大部分的业务逻辑放到不两只的部件中从而使其具备CRUD特性。它主要处理REST操做,在etcd中验证更新这些对象(并最终存储)。

 

(6Scheduler

  调度器把未调度的pod经过binding api绑定到节点上。调度器是可插拔的,而且咱们期待支持多集群的调度,将来甚至但愿能够支持用户自定义的调度器。

 

(7Kubernetes控制管理服务器

  全部其它的集群级别的功能目前都是由控制管理器所负责。例如,端点对象是被端点控制器来建立和更新。这些最终能够被分隔成不一样的部件来让它们独自的可插拔。

  replicationcontroller(PS:官方 英文)是一种创建于简单的 pod API之上的一种机制。一旦实现,咱们最终计划把这变成一种通用的插件机制。

相关文章
相关标签/搜索