vlambda博客
学习文章列表

容器:docker,k8s与云原生入门介绍

一:docker的由来

  • 2010年,美国旧金山,几个年轻人成立了一家名叫做"dotCloud"的公司,用来提供基于Paas的LXC有关的容器技术服务,这个就是docker的雏形。

  • dotCloud公司刚开始的发展步履维艰,在快坚持不下去的时候,docker之父Solomon Hykes决定将公司的容器技术进行开源,这就是docker。开源之后,docker的人气迅速攀升,很多大公司像Google、微软、Amazon、VMware也加入其中。

  • docker作为一个轻量级的虚拟化技术,对资源的利用非常高。这就使得他在IT界非常受欢迎,docker社区也发展的很火爆这两年。很多人一提到容器就会想到docker,docker快成了容器技术的代名词

二:docker的介绍

2.1 容器和虚拟机

  • 介绍docker之前,首先要说下容器(container)的概念。在docker官网上,对容器有个定义:A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another(容器是打包代码和其所有依赖项的软件标准单元,因此应用程序可以从一个环境快速可靠的运行到另一个计算环境).容器技术会虚拟出来一个类似“沙箱”的环境,将软件和环境隔离出来,在不同的平台都可以使用。容器也是虚拟技术,和传统的虚拟机的相比,它是对操作系统的虚拟,对进程的隔离,对资源的利用很高,并且启动速度很快,可以通过下面图看下容器技术和虚拟机之间结构的对比

  • 容器和虚拟机的对比:

特性 容器 虚拟机
隔离级别 进程级 操作系统级
隔离策略 CGroups Hypervisor
系统资源 0-5% 5%-15%
启动时间 秒级 分钟级
镜像存储 KB-MB GB-TB
集群规模 上万 上百
高可用策略 弹性,负载,动态 备份,容灾,迁移

2.2 docker是什么

  • docker是基于GO语言的开源应用容器引擎,

  • docker官网的介绍的定义:an open source project to pack,ship and run any application as a lightweight container.我们可以记住三个动词“pack,ship,run”,docker可以让开发者打包他们的应用到一个轻量级,可移植的容器中,然后发布到任何流行的Linux机器中。

  • build once,run anywhere(搭建一次,到处能用),docker有镜像的功能,可以将打包的东西生成镜像文件,包含了容器运行所需要的的所有程序,配置,资源等文件,直接可以到其他的系统服务器上直接使用。

2.3 docker解决了什么问题

  • 1:解决了虚拟机资源消耗问题

  • 2:快速部署

  • 3:提供一次性的环境,可以在开发,测试,生产用同一个镜像

  • 4:提供弹性的云服务,扩容和缩容很简单

  • 5:构建微服务集群应用简单,一个容器就可以当做一个微服务的应用

2.4 docker实际应用产生的问题

  • 在docker的实际应用中,开发者发现了将docker应用于具体的业务实现,是一件很困难的事情。困难之处在于容器的编排,调度和管理。所以就迫切需要一套docker管理系统,一套自动化运维管理平台,对docker和容器进行更高级更灵活的管理。这个时候Kubernetes就应时出现了。

三:Kubernetes

3.1 kubernetes介绍

  • kubernetes是基于容器的集群管理平台,也可称为容器编排系统,简称K8S,8是中间8个字段的简称

  • kubernetes是google公司使用go语言开发的系统,来自于google的borg系统演化。

3.2 K8S解决了哪些问题

  • 使用容器构建的服务集群网络中有很多的大量容器,K8S就是用来管理云中的容器,在容器之间的管理中会出现下面的问题,K8S能完美的解决下面的问题

  • 1:对服务进行横向扩展

  • 2:容器宕机,数据及时恢复

  • 3:监控容器

  • 4:容器之间的调度

  • 5:保证数据的安全性

3.3 K8S系统结构图

  • master节点组件

组件 作用
API-SERVER k8s网关,所有请求命令都要经过api-server
Scheduler 调度器,使用调度算法,把请求资源调度到某一个node节点
Controller Manager 控制器,维护K8S资源对象
etcd 存储资源对象
  • node节点

组件 作用
docker 容器引擎,运行容器的基础环境
kubelet 执行node节点上的资源操作命令,在每个node节点上都存了一份
kube-proxy 代理服务,负载均衡
fluentd 日志收集服务
pod k8s管理的基本单元(最小单元),pod内部是容器。k8s不直接管理容器,管理的是pod

四:云架构&云原生

4.1 云和K8S的关系

  • 云 就是使用容器创建的一套服务集群网络,云由很多的大量的容器构成

  • k8s就是用来管理云中的容器

4.2 云架构


  • 概念 内容
    iaas 基础设施即服务,如云主机(用户不需要考虑网络,DNS,硬件环境的问题)
    paas 平台即服务,如MYSQL\ES\MQ
    saas 软件即服务,如一些办公软件钉钉
    serverless 无服务,站在用户的考虑,用户只需要使用云服务器即可,在云服务器的所有基础环境,软件环境都不需要自己安装


    未来:服务开发都是serverless,企业都构建自己的私有云环境或者使用公有云环境。

    4.3 云原生


    • 云原生:就是为了让应用程序(项目,服务软件)都运行在云上的解决方案,这种方案就叫做云原生。

    • 特点

    • 1:容器化--所有服务都部署在容器中

    • 2:微服务--web服务架构是微服务架构

    • 3:CI(持续集成)/CD(持续交付)

    • 4:DevOps(运维一体化)