Docker 与 Kubernetes 的基本原理与联系

Docker

Docker 出现的原因

相信程序员们都听过一个梗:“这个脚本在我的机子上跑没问题啊?” Docker 的出现让这个梗成为了过去式,开发者可以打包他们的应用、依赖包和环境变量等配置到一个容器中,然后将这个容器发布安装 Linux 的机器上,这个过程省去了开发与运维配置相同环境的工作。

那么 Docker 的底层具体是怎么实现的呢?Docker 实际上是一个Client-Server 结构的系统,Docker 的守护进程运行在主机上, 然后客户端通过 Socket 连接访问 Docker 守护进程,Docker 守护进程从客户端接受命令,并按照命令,管理运行在主机上的容器

Docker 在具体使用时,需要先从仓库中拉取一个镜像文件,并且启动一个容器。 这里提到的镜像文件、容器和仓库,是 Docker 中比较重要的几个概念,会在下文讲述。

Docker 中的重要概念

  1. 镜像文件 Image:相当于是一个配置了一定环境的 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。我们也可以发布自己配置好环境的镜像文件。

  2. 容器 Container:容器是镜像时的实体,容器可以被创建、启动、停止、删除、暂停等。

  3. 仓库 Repository:仓库用来保存一系列镜像。

Docker 的优势

已经有了虚拟机,我们为什么还需要 Docker 呢?这里贴一张图,这个图很直观地展示了 Docker 和虚拟机的差别。

Docker VS 虚拟机

可以看到,虚拟机需要初始化客户端的操作系统,而 Docker 是运行在主机的操作系统上的,这意味着 Docker 在创建时不需要重新加载一个操作系统,实现了高度的轻量化。这意味着 Docker 的创建速度要远高于虚拟机,且其需要的系统资源较少,一台主机上可以运行的 Docker 数量高于虚拟机。这里贴一张汇总了 Docker 和虚拟机差异的表格。

Docker VS 虚拟机

Docker 使用

为了避免文章过于冗长,关于 Docker 的使用指令具体参见:
Docker 常用命令

Kubernetes

在实际企业中,还常常会使用容器集群管理系统,这种系统能够实现自动化部署、扩展容器集群、维护等功能,其中常用的是 Kubernetes,也称为 k8s(k 和 s 之间有 8 个字母)

Kubernetes 主要功能

K8s 主要用来对 docker 容器进行管理和编排的工具,其是一个基于 docker 构建的调度服务,提供资源调度、均衡容灾、服务注册、动态扩容等功能套件,其作用如下所示:

  1. 数据卷:pod中容器之间数据共享,可以使用数据卷

  2. 应用程序健康检查:容器内服务可能发生异常导致服务不可用,可以使用健康检查策略保证应用的健壮性。

  3. 复制应用程序实例:控制器维护着pod的副本数量,保证一个pod或者一组同类的pod数量始终可用。

  4. 弹性伸缩:根据设定的指标(CPU利用率等)动态的自动缩放pod数

  5. 负载均衡:一组pod副本分配一个私有的集群IP地址,负载均衡转发请求到后端容器,在集群内布,其他pod可通过这个Cluster IP访问集群。

  6. 滚动更新:更新服务不中断,一次更新一个pod,而不是同时删除整个服务

  7. 服务编排:通过文件描述部署服务,使的程序部署更高效。

  8. 资源监控:Node节点组件集成cAdvisor资源收集工具,可通过Heapster汇总整个集群节点资源数据,然后存储到InfluxDB时序数据库,再由Grafana展示

  9. 提供认证和授权:支持属性访问控制、角色访问控制等认证授权策略。

Kubernetes 中的重要概念

  1. 容器集 Pod:这是 Kubernetes 中的一个重要概念。Pod 被部署在单个节点上的,且包含一个或多个容器的容器组。同一容器集中的所有容器共享同一个 IP 地址、IPC、主机名称及其它资源。容器集会将网络和存储从底层容器中抽象出来。这样就能更加轻松地在集群中移动容器。
  2. 节点 Node:负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。
  3. 主机 Master:负责执行请求和所分配任务的计算机。由 Kubernetes 主机负责对节点进行控制。
  4. 复制控制器 Replication controller:用于控制应在集群某处运行的完全相同的容器集副本数量。
  5. 服务 Service:也就是常说的微服务架构中的一个“微服务”。将工作内容与容器集分离。Kubernetes 服务代理会自动将服务请求分发到正确的容器集。

其中的概念具体参考:Kubernetes 基本概念解析

Kubernetes 使用

具体参考:
Kubernetes中文社区 — 从零开始 k8s
Kubernetes官网 - 中文
Kubernetes 中文文档

猜你喜欢

转载自blog.csdn.net/weixin_41670608/article/details/126416170