一、简介

  1、什么是Kubernetes

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

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

  2、使用K8s可以快速高效响应客户的需求:

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

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

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

    优化了硬件资源,降低成本

  3、K8s具有如下特点:

    便捷性:无论公有云、私有云、混合云还是多云架构都全面支持

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

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

  4、三个时代说明,K8s为什么如此有用

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

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

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

            每个VM是一台完整的计算机,在虚拟化硬件上运行所有组件,包括其自己的操作系统

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

  5、补充使用容器的好处

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

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

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

    可观察性不仅可以显示操作系统级别的信息和指标,还可以显示应用程序的运行状况和其他信号。

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

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

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

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

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

  6、K8s提供了哪些功能

    服务发现和负载均衡

      K8s可以使用DNS名称或使用其自己的IP地址公开容器。如果到容器的流量很高,K8s可以负载均衡分配流量,使部署稳定

    存储编排

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

    自动部署和回滚

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

    自动包装

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

    自检

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

    加密管理

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

  7、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的状态即可,也不需要集中控制,这使得系统更易于使用,并且强大,更具有弹性和扩展性。

二、K8s架构

  1、整体架构

三、常见组件

    请见图示1:分别包含1、2、3、4

  1、master:

    Kubernetes管理节点

  2、apiserver:

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

  3、scheduler Kubernetes 调度服务:

  4、Replication Controllers 复制:

     保证pod的高可用

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

    请见图示2:包含5、6、7、8

  5、minion:

    真正运行容器container的物理机。Kubernets中需要很多minion集群,来提供运算

  6、container:

    容器,可以运行服务和程序

  7、Pod:

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

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

  8、Kube_prox 代理:

    做端口转发,相当于LVS-NAT模式中的复制调度器

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

  9、etcd:

    存储Kubernetes的配置信息,可以理解为K8s数据库,存储这K8s容器平台所有节点、pods、网络等信息

  10、services:

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

  11、Lables标签:

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

  12、Deployment部署

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

      Deployment可以帮我们实现无人值守的上学,大大降低我们上线的复杂和风险

  13、Kubelet命令

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

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

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

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

    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或者容器。

参考:互联网内容

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/11670786.html

Kubernetes1-K8s的简单介绍(转载)的更多相关文章

  1. VPN理论简单介绍(转载)

    标签:VPN理论简单介绍 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://lvnian.blog.51cto.com/715528 ...

  2. K8S Kubernetes 简单介绍 转自 http://time-track.cn/kubernetes-trial.html Kubernetes初体验

    这段时间学习了一下 git jenkins docker  最近也在看  Kubernetes  感觉写得很赞  也是对自己对于K8S 有了进一步得理解  感谢 倪 大神得Blog 也希望看到这篇Bl ...

  3. mutiset的简单介绍转载

    原文链接:https://blog.csdn.net/sodacoco/article/details/84798621        c++语言中,multiset是<set>库中一个非 ...

  4. iOS多线程编程之多线程简单介绍(转载)

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“ ...

  5. IOS-UIProgressView的简单介绍

    IOS-UIProgressView的简单介绍 转载:http://blog.sina.com.cn/s/blog_9c2363ad0101e1jy.html // UIProgressView的使用 ...

  6. Asp.net博客系统收集和简单介绍

    国内Asp.net博客系统收集和简单介绍       [转载文章,仅供个人参考,引自http://www.soyaoo.com/Blog/post/92.html] 1.ZJ-Blog程序简介:基于A ...

  7. 【转载】JMeter学习(一)工具简单介绍

    JMeter学习(一)工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静 ...

  8. 转载 mvc:message-converters简单介绍 https://www.cnblogs.com/liaojie970/p/7736098.html

    mvc:message-converters简单介绍 说说@ResponseBody注解,很明显这个注解就是将方法的返回值作为reponse的body部分.我们进一步分析下这个过程涉及到的内容,首先就 ...

  9. IPv4和IPv6简单对比介绍(转载)

    原链接:https://baijiahao.baidu.com/s?id=1570208896149974&wfr=spider&for=pc 在配置计算机网络,特别是内网的时候,有时 ...

随机推荐

  1. android:showAsAction

    在res/layout/menu文件夹下,放置login.xml: <menu xmlns:android="http://schemas.android.com/apk/res/an ...

  2. Content Provider基础

    1.Content Provider为存储和获取数据提供了统一的接口. 2.Content Provider可以在不同的应用程序之间共享数据. 3.Android为常见的一些数据提供了ContentP ...

  3. Python 矩阵相关

    Python 中矩阵运算主要使用numpy库.NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数索引的元素表格(通常是元素是数字).因此对于随机查找来说,比pyt ...

  4. Eclipse设置自动提示代码(不用alt+/了)

    在preferences找到如图的相关位置.在输入框里把26个字母加进去,qwer...........

  5. 学习进度-10 python爬虫

    学习爬虫的第一个案例是小说爬虫. 小说爬虫首先是解析小说页面源代码,在页面源代码中可以看到小说每章节的内容链接 爬虫的代码: import requests import re url = 'http ...

  6. CodeForces - 876C Classroom Watch (枚举)

    题意:已知n,问满足条件"x的各个数字之和+x=n"的x有几个并按升序输出. 分析: 1.n最大1e9,10位数,假设每一位都为9的话,可知x的各个数字之和最大可以贡献90. 2. ...

  7. POJ 3274:Gold Balanced Lineup 做了两个小时的哈希

    Gold Balanced Lineup Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13540   Accepted:  ...

  8. install正常,deploy上传jar失败致使打包失败

    [INFO] Scanning for projects...[INFO] [INFO] ------------------------------------------------------- ...

  9. XV6源代码阅读-虚拟内存管理

    Exercise1 源代码阅读 1.内存管理部分: kalloc.c vm.c 以及相关其他文件代码 kalloc.c:char * kalloc(void)负责在需要的时候为用户空间.内核栈.页表页 ...

  10. hashCode() 和 equals()的问题解答及重写示范

    本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么? 3 hashCode() 的作用是什么? 4 hashCode() 和 equa ...