云原生之kubernetes

77 阅读4分钟

容器与Docker

什么是容器

容器是将软件打包成标准化单元,用于开发,交付和部署。容器技术起源于Linux, 是一种内核虚拟化技术,提供提供轻量级的虚拟化,以便隔离进程和资源。

image.png

容器与虚拟机

容器和虚拟机具有相似的资源隔离和分配方式,容器虚拟化了操作系统而不是硬件。

image.png

相比于虚拟机,容器有如下优点:

  • 更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,容器对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

  • 更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间,大大节约了开发、测试、部署的时间。

  • 一致的运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些问题并未在开发过程中被发现。而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。

  • 更轻松的迁移

由于Docker确保了执行环境的一致性,使得应用的迁移更加容易。Docker可以在很多平台上运行,无论是物理机、虚拟机,其运行结果是一致的。因此可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

  • 更轻松的维护和扩展

Docker使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker团队同各个开源项目团队一起维护了大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

Docker 核心思想

  • 集装箱
  • 运输方式、存储方式和Api接口的标准化
  • 隔离

image.png

Docker 概念

  • 镜像(Image): 类似虚拟机镜像,一个只读的模板,它包含应用程序可用的文件系统和其他元数据,如镜像运行时的可执行文件路径。
  • 容器(Container):一个运行中的容器是一个运行在Docker主机上的进程,但它和主机,以及所有运行在主机上的其他进程都是隔离的。这个进程也是资源受限的,意味着它只能访问和使用分配给它的资源(CPU、内存等)。
  • 仓库(Repository): 仓库是集中存放镜像文件的场所。

image.png

镜像仓库

  • 公开仓库(Public): 最大的公开仓库是Docker Hub, 存放了大量的镜像供用户下载。 国内的公开仓库包括Docker Pool 等,大陆用户可以稳定下载访问。
  • 私有仓库(Private): 限定特定账号的方式来访问
  • docker 命令列表: docker

微服务与Docker关系

Docker作为容器的工具可以把业务逻辑容器化,存储容器化,消息队列容器化,使软件可以拆分成若干个标准化容器,然后像搭积木一样组合起来,彼此通信。这正式微服务的思想。

Kubernets

Docker: 一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到Linux机器上,也可实现虚拟化。

Kubernets: 一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动化扩缩容、维护等功能。

Kubernets 概念

image.png

  • API Server
    • 用户通过api server 和集群交互,通过kubectl给Api server 发送请求
    • 集群网关认证组件对用户的请求进行校验,确保有权限的用户才能访问
  • Scheduler
    • 扫描新创建但没分配到Node的Pod, 为Pod选择一个Node
  • Controller Manager
    • 检测集群状态变化(如pods处于非运行态),尝试调整集群到最初的状态。
    • 比如,如果一个pod意外销毁,Controller manager请求scheduler,尝试拉起一个新的pod去替代销毁的pod.
  • etcd
    • 可以认为是集群的大脑
    • 集群状态的key-value 存储
    • 任何集群状态的变更都会被记录
    • 应用的数据不会存储在etcd, 只存储集群的状态数据,其他的组件通过etcd感知整个集群的状态信息。