赞
踩
以往手工管理的对象是直接部署在操作系统环境中的应用程序,但是有了docker以后,应用程序被容器化,各种应用程序都被封装在容器中执行。
那么我们在使用saltstack等自动化运维工具编排应用程序时会发现它的对象已经发生变化了。此时我们的自动化运维工具已经不再适用于容器化应用程序的编排工作了,因为容器化所提供的接口与早期传统意义上应用程序的访问、控制和管理接口有所不同,所以,docker时代就呼唤新式的、面向容器化应用程序的编排工具的实现。
docker compose(单击编排)
docker swarm(多机编排)
docker machine(docker主机)
是一个IDC的OS,能够把一个IDC中的所有硬件所提供的计算资源统一调度和分配。但是它所面向的上层接口所提供的不是容器运行的接口,而只是个资源分配工具,非能够直接运行托管运行容器的。所以在此基础之上它必须要提供一个能面向容器编排的框架,这个框架就是marathon
K8s已经牢牢占据了容器编排工具的80%市场
官方文档描述为:
Kubernetes一个用于容器集群的自动化部署、扩容以及运维的开源平台。通过Kubernetes,你可以快速有效地响应用户需求;快速而有预期地部署你的应用;极速地扩展你的应用;无缝对接新应用功能;节省资源,优化硬件资源的使用。为容器编排管理提供了完整的开源方案。
总的来说,Kubernetes是用于自动部署、扩展和容器化应用程序的开源系统。
因此我们要了解Kubernetes,首先要明白容器的概念,以及常说的Docker是什么。
容器技术的官方定义是:
容器是通过一种虚拟化技术来隔离运行在主机上不同进程,从而达到进程之间、进程和宿主操作系统相互隔离、互不影响的技术。
要理解这个定义,首先要弄清楚容器和虚拟机的区别:
简单来说,虚拟机是一个机器,但容器是一个进程。每一个虚拟机里面都有一套完整的操作系统,而容器层安装在操作系统之上,它直接利用了宿主机的内核,更加轻量化,启动速度极快。通常,我们在会每个容器里面跑单个的应用,而在虚拟机里会跑很多应用。
容器技术具有:简化部署、快速启动、服务组合、易于迁移等优点。
容器技术最早应用在Linux操作系统,称为Linux Container(LXC),早期在互联网公司开始使用部署分布式应用,随后随着容器管理器(Docker、Rocket和CloudFoundary Garden)兴起,定制容器宿主操作系统(CoreOS、Ubuntu Snappy、Red Hat Atomic)盛行,容器被有效构建和管理、并在各行各业普遍使用和认可。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。Docker容器十分轻量。
Docker把容器变得标准化了,我们现在常说的容器一般是指Docker容器。
要理解Docker,需要明白三个最主要的概念:容器、镜像、仓库。
Docker能够普遍使用起来,很大程度上个得益于Docker的仓库里汇集了很多已经标准化的镜像,大大提升了部署效率。
舵手、飞行员
由Google的工程师于2014年创立
Kubernetes代码存放位置
小知识: 因kubernetes名字过长,一般简称为k8s,因为k与s之间有8个字母,故而称之。
kubernetes是一个全新的基于容器技术的分布式架构领先方案, 它是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发。K8S是Google内部一个叫Borg的容器集群管理系统衍生出来的,Borg已经在Google大规模生产运行十年之久。K8S主要用于自动化部署、扩展和管理容器应用,提供了资源调度、部署管理、服务发现、扩容缩容、监控等一整套功能。2015年7月,Kubernetes v1.0正式发布,截止到2017年9月29日最新稳定版本是v1.8。Kubernetes目标是让部署容器化应用简单高效。
Kubernetes是一个开源的 Linux容器自动化运维(操作)平台,这些操作包括部署,调度和节点集群间扩展。
可以将Docker看成Kubernetes内部使用的低级别组件。Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。换一句话说kubernetes负责管理服务中所有的Docker容器,创建、运行、重启与删除容器。
使用Kubernetes可以:
上文提到,Kubernetes是用于自动部署、扩展和容器化应用程序的开源系统。
当我们使用的容器服务多了,面临的访问量增大以后,我们就需要一种工具把这些容器统一的管理起来,需要实现对这些容器的自动部署、扩展和管理。也就是俗称的容器编排。
Kubernetes就是这样一种容器编排系统
。
自动装箱
基于资源依赖及其约束能够自动完成容器的部署且不影响其可用性
自我修复
一旦容器崩了,可以自动启动一个新的容器替代从而实现自我修复
自动实现水平扩展
一个容器不够,再启一个,可以不断的进行扩展,只要物理平台的资源足够支撑
自动进行服务发现和负载均衡
自动发布和回滚
一旦代码发生更新,它就自动发布;如果发现容器启动有问题,它就自动回滚
密钥和配置管理
容器化应用程序的最大问题在于我们配置容器内的应用程序比较困难。基于镜像启动一个容器后,如果期望容器中的应用程序换一个配置该怎么办呢?如果我们定义一个entrypoint的脚本,而这个脚本可以接受用户传入的变量参数,把变量的值转换为容器内的应用程序可读取的配置,从而能完成容器化应用程序的配
之所以这么麻烦是因为早期的应用程序不是面向云原生而开发的,所以那些应用程序要通过读取配置文件来获取配置,而云原生开发的应用程序可以基于环境变量来获取配置。
这种配置方式使得一个镜像能满足用户在不同环境下运行同一个镜像为不同配置的容器的需求。
但是在编排工具当中,这种配置方式会存在一些问题,比如配置信息保存到哪里?如果我们用编排平台让容器启动自动化了,但每次启动容器时我们还要手工去传递环境变量的值,这是一个很麻烦的事,所以我们需要一个外部的组件保存这些配置信息于外部,当镜像启动为容器时,只需要让镜像去加载外部的配置中心中的配置信息,就能完成应用程序的配置。
存储编排
把存储卷实现动态供给,当容器需要存储卷时,根据容器自身的需求创建能够满足其需要的存储卷
任务批处理运行
Kubernetes是开源容器集群管理系统,是基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。Kubernetes提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用,其主要功能如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。