容器: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(运维一体化)