Docker 与 Kubernetes 的基本原理与联系
Docker
Docker 出现的原因
相信程序员们都听过一个梗:“这个脚本在我的机子上跑没问题啊?” Docker 的出现让这个梗成为了过去式,开发者可以打包他们的应用、依赖包和环境变量等配置到一个容器中,然后将这个容器发布安装 Linux 的机器上,这个过程省去了开发与运维配置相同环境的工作。
那么 Docker 的底层具体是怎么实现的呢?Docker 实际上是一个Client-Server 结构的系统,Docker 的守护进程运行在主机上, 然后客户端通过 Socket 连接访问 Docker 守护进程,Docker 守护进程从客户端接受命令,并按照命令,管理运行在主机上的容器。
Docker 在具体使用时,需要先从仓库中拉取一个镜像文件,并且启动一个容器。 这里提到的镜像文件、容器和仓库,是 Docker 中比较重要的几个概念,会在下文讲述。
Docker 中的重要概念
-
镜像文件 Image:相当于是一个配置了一定环境的 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。我们也可以发布自己配置好环境的镜像文件。
-
容器 Container:容器是镜像时的实体,容器可以被创建、启动、停止、删除、暂停等。
-
仓库 Repository:仓库用来保存一系列镜像。
Docker 的优势
已经有了虚拟机,我们为什么还需要 Docker 呢?这里贴一张图,这个图很直观地展示了 Docker 和虚拟机的差别。
可以看到,虚拟机需要初始化客户端的操作系统,而 Docker 是运行在主机的操作系统上的,这意味着 Docker 在创建时不需要重新加载一个操作系统,实现了高度的轻量化。这意味着 Docker 的创建速度要远高于虚拟机,且其需要的系统资源较少,一台主机上可以运行的 Docker 数量高于虚拟机。这里贴一张汇总了 Docker 和虚拟机差异的表格。
Docker 使用
为了避免文章过于冗长,关于 Docker 的使用指令具体参见:
Docker 常用命令
Kubernetes
在实际企业中,还常常会使用容器集群管理系统,这种系统能够实现自动化部署、扩展容器集群、维护等功能,其中常用的是 Kubernetes,也称为 k8s(k 和 s 之间有 8 个字母)
Kubernetes 主要功能
K8s 主要用来对 docker 容器进行管理和编排的工具,其是一个基于 docker 构建的调度服务,提供资源调度、均衡容灾、服务注册、动态扩容等功能套件,其作用如下所示:
-
数据卷:pod中容器之间数据共享,可以使用数据卷
-
应用程序健康检查:容器内服务可能发生异常导致服务不可用,可以使用健康检查策略保证应用的健壮性。
-
复制应用程序实例:控制器维护着pod的副本数量,保证一个pod或者一组同类的pod数量始终可用。
-
弹性伸缩:根据设定的指标(CPU利用率等)动态的自动缩放pod数
-
负载均衡:一组pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器,在集群内布,其他pod可通过这个Cluster IP访问集群。
-
滚动更新:更新服务不中断,一次更新一个pod,而不是同时删除整个服务
-
服务编排:通过文件描述部署服务,使的程序部署更高效。
-
资源监控:Node节点组件集成cAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库,再由Grafana展示
-
提供认证和授权:支持属性访问控制、角色访问控制等认证授权策略。
Kubernetes 中的重要概念
- 容器集 Pod:这是 Kubernetes 中的一个重要概念。Pod 被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样就能更加轻松地在集群中移动容器。
- 节点 Node:负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。
- 主机 Master:负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。
- 复制控制器 Replication controller:用于控制应在集群某处运行的完全相同的容器集副本数量。
- 服务 Service:也就是常说的微服务架构中的一个“微服务”。将工作内容与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集。
其中的概念具体参考:Kubernetes 基本概念解析
Kubernetes 使用
具体参考:
Kubernetes中文社区 — 从零开始 k8s
Kubernetes官网 - 中文
Kubernetes 中文文档