概述
- 物理机:好比是独立的大船,独立发动机,独立船舱。所有资源共用。运水果的同时就不能运鱼( 1964年)
- 虚拟机:相当于把大船进行改造,把大船的资源进行独立的拆分,独立的部分都有单独的发动机、船舱资源,互不影响。可以同时运水果、蔬菜、鱼。但是独立分隔的资源,会有资源损耗和浪费。(2006年)
- 容器:相当于船上的集装箱。集装箱之间相互隔离,不用关心集装箱里装的什么。对大船的资源实现更高程度的使用。( 2013 年)
容器
随着信息爆炸时代来临,服务数量也随之激增。零散的几个服务可能不需要费劲就能管理好,但是要做大做强,我们就需要组建集群(船队)。这时候,如何管理船队就变成了一个难题:
Docker
什么是Docker
Docker是基于容器技术开发的一个应用, 提供了一个开放的、标准化的打包、部署容器的方法。使得容器实现轻巧、秒级启动、版本管理、可移植性等特性。
Docker底层实现
- VM虚拟机 在物理机上虚拟一个独立的Guest OS,并利用Hypervisor虚拟化CPU、内存、IO设备等实现资源隔离。
- Docker 利用Linux内核特性实现的隔离,运行容器的速度几乎等同于直接启动进程。 每个容器一个单独的命名空间,容器内的应用都像是运行在独立的OS中一样,彼此之间互不影响。
容器镜像
- 镜像是一个特殊文件系统,提供容器运行所需的程序、库、资源、配置等。
- 镜像不包含任何动态数据,其内容在构建之后也不会被改变。
- 镜像相当于一个只读的模板,可以用来创建容器。
Dockerfile
- Dockerfile是用来构建镜像过程的描述文本文件,包含自定义的指令和格式。
- 可以通过docker build命令根据Dockerfile构建镜像。
容器
- 从镜像创建的运行实例。可以被启动、开始、停止、删除。
- 镜像好比光碟,容器好比用光碟播放出来的电影。
- 容器本质上是运行在宿主机上的进程。
- 容器通过linux的namespace实现资源隔离,通过cgroups实现资源限制,通过Capabilities实现了操作权限控制。
Docker ps
Dockerfile编写实践:基本语法
Docker常用命令
- docker build,构建镜像;
- docker push,推送镜像;
- docker run,新建并启动容器;
- docker stop,停止容器;
- docker rm,移除容器;
- docker ps,查看容器;
- docker logs, 查看容器中的日志;
- docker exec,进入容器并执行命令;
Kubernetes (k8s)
什么是K8S
Kubernetes (k8s)是2014年谷歌开源的一个能满足自动化部署、弹性伸缩和调度管理的开源容器化平台。使用 Kubernetes,你可以快速、高效地满足docker集群管理需求。
k8s整体架构图
Kubernetes常用资源
- Pod,可被k8s管理的最小部署单元,包含一个或多个容器。
- ReplicaSet & Deployment,无状态服务,Pod管理控制器,管理副本数量、升级策略等。 StatefullSet,有状态服务,稳定标识,有序部署,扩展。
- DaemonSet, Pod 运行在集群中的全部或者部分节点上。
- Job,Cronjob ,任务管理
- Service,为一组pod提供一种可以访问它们的策略 ,并提供负载均衡的能力
- Ingress,用于将不同URL的访问请求转发到后端不同的Service,以实现HTTP层的业务路由机制。
- Volume,持久存储卷。
- ConfigMap,Secret,配置管理,秘钥管理。
- HPA,水平自动扩缩容,基于服务负载实现实例自动增减。