1.为什么要docker

为什么?

  • 通过提供可复用的容器实现应用程序快速部署 

Docker存在以下优势:

  • 轻量级:Docker容器本身只有几百兆的大小,而且不需要安装宿主操作系统,能够极大地缩小应用程序启动时间;

  • 灵活性:Docker支持跨平台的部署,可以更灵活的部署应用程序和微服务;

  • 可移植性:Docker容器可以在开发环境和生产环境之间更加容易的移植。

2.和虚拟机的区别

docker也具有镜像,那么和虚拟机区别是什么

  • 虚拟机包含操作系统的完整副本,包括内核及所有驱动和应用容器在操作系统层面进行虚拟化,共享宿主机的操作系统内核

  • 虚拟机通常启动时间较长;容器启动几乎是即时的
  • 虚拟机提供了高度的隔离性;容器之间的隔离性较低

3.Dockerfile 是什么?

  • Dockerfile 是什么

    • Dockerfile 是一个文本文件,用于自动化地构建 Docker 镜像。

    • Dockerfile 定义了从基础镜像开始,按步骤配置环境和部署应用所需要的所有命令。

4.什么是 Docker Compose?

  • Docker Compose 是什么

    • 通过使用一个 YAML 文件来配置应用服务,给予Docker Compose 我们就可以通过一个单独的命令来创建和启动所有服务。可以大大的简化配置环境的复杂度。

5.什么是k8s

  • Kubernetes 是一个轻便的和可扩展的开源平台,用于管理容器化应用和服务

    • 可以基于容器对应用运行环境的资源配置要求自动部署应用容器

    • 当所部署的 Node 节点有问题时,会对容器进行重新部署和重新调度

    • ...

6.k8s架构

  • 架构

    • Master Node

      • k8s 集群控制节点,对集群进行调度管理,接受集群外用户去集群操作请求

      • Master Node 由如下组成

        • kube-apiserver:相当于 k8s 的网关,所有的指令请求都必须经过 api server

          • 如果需要与您的 Kubernetes 集群进行交互,就要通过 API。Kubernetes API 是 Kubernetes 控制平面的前端,用于处理内部和外部请求。API 服务器会确定请求是否有效,如果有效,则对其进行处理。您可以通过 REST 调用、kubectl 命令行界面或其他命令行工具(例如 kubeadm)来访问 API。

        • kube-scheduler:调度器,使用调度算法,把请求资源调度到某个work node 节点

          • 您的集群是否状况良好?如果需要新的容器,要将它们放在哪里?这些是 Kubernetes 调度程序所要关注的问题。调度程序会考虑容器集的资源需求(例如 CPU 或内存)以及集群的运行状况。随后,它会将容器集安排到适当的计算节点。

        • kube-controller-manager:控制器,维护 k8s 资源对象(CRUD:添加、删除、更新、修改)

          • 控制器负责实际运行集群,而 Kubernetes 控制器管理器则是将多个控制器功能合而为一。控制器用于查询调度程序,并确保有正确数量的容器集在运行。如果有容器集停止运行,另一个控制器会发现并做出响应。控制器会将服务连接至容器集,以便让请求前往正确的端点。还有一些控制器用于创建帐户和 API 访问令牌。

        • ETCD 数据库:存储资源对象(可以服务注册、发现等等)

          • 配置数据以及有关集群状态的信息位于 etcd(一个键值存储数据库)中。etcd 采用分布式、容错设计,被视为集群的最终事实来源。

    • Worker Node

      • 集群工作节点,运行用户业务应用容器

      • Worker Node 由如下组成

        • kubelet: kuberlet 来执行资源操作

          • 每个计算节点中都包含一个 kubelet,这是一个与控制平面通信的微型应用。kublet 可确保容器在容器集内运行。当控制平面需要在节点中执行某个操作时,kubelet 就会执行该操作。

        • kube proxy:代理服务,负载均衡

          • 每个计算节点中还包含 kube-proxy,这是一个用于优化 Kubernetes 网络服务的网络代理。kube-proxy 负责处理集群内部或外部的网络通信——靠操作系统的数据包过滤层,或者自行转发流量

        • ContainerRuntime

          • 实际运行容器的底层软件,如 Docker、containerd 等

      • 注意:

        • pod:k8s 管理的基本单元(最小单元),pod 内部是容器

        • k8s 不直接管理容器,而是管理 pod

  • 工作流程

    • 向apiserver发出请求后,apiserver把请求存储到etcd,并通知Controller-manager;Controller-manager会通过apiserver读取etcd并创建pod,并将数据写入etcd;Controller-manager会通过API server找Scheduler为pod挑选合适的worknode运行。然后apiserver通知kubelet去创建pod,kube-proxy负责对外提供服务。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐