什么是Kubernetes
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就是这样一种容器编排系统。
K8s 特性
- 自动装箱
基于资源依赖及其约束能够自动完成容器的部署且不影响其可用性 - 自我修复
一旦容器崩了,可以自动启动一个新的容器替代从而实现自我修复 - 自动实现水平扩展
一个容器不够,再启一个,可以不断的进行扩展,只要物理平台的资源足够支撑 - 自动进行服务发现和负载均衡
- 自动发布和回滚
一旦代码发生更新,它就自动发布;如果发现容器启动有问题,它就自动回滚 - 密钥和配置管理
容器化应用程序的最大问题在于我们配置容器内的应用程序比较困难。基于镜像启动一个容器后,如果期望容器中的应用程序换一个配置该怎么办呢?如果我们定义一个entrypoint的脚本,而这个脚本可以接受用户传入的变量参数,把变量的值转换为容器内的应用程序可读取的配置,从而能完成容器化应用程序的配置
之所以这么麻烦是因为早期的应用程序不是面向云原生而开发的,所以那些应用程序要通过读取配置文件来获取配置,而云原生开发的应用程序可以基于环境变量来获取配置。
这种配置方式使得一个镜像能满足用户在不同环境下运行同一个镜像为不同配置的容器的需求。
但是在编排工具当中,这种配置方式会存在一些问题,比如配置信息保存到哪里?如果我们用编排平台让容器启动自动化了,但每次启动容器时我们还要手工去传递环境变量的值,这是一个很麻烦的事,所以我们需要一个外部的组件保存这些配置信息于外部,当镜像启动为容器时,只需要让镜像去加载外部的配置中心中的配置信息,就能完成应用程序的配置。 - 存储编排
把存储卷实现动态供给,当容器需要存储卷时,根据容器自身的需求创建能够满足其需要的存储卷 - 任务批处理运行
k8s 架构
k8s就是一个组合多台主机的资源整合成一个大的资源池,并统一对外进行计算、存储等能力的集群
master
- API Server 负责接收并处理请求
- Scheduler 调度容器创建的请求
- List item
- Controller 确保已创建的容器处于健康状态
- Controller Manager 确保后端节点上的控制器处于健康状态
nodes Kubelet 与master通信的集群代理 容器引擎
- docker
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。