运维面试高频知识点


Docker


  • 什么是docker?

    docker是基于Golang语言进行开发的一个开源应用容器引擎,换言之就是运行在宿主机上的一个sandboxed process,但是它与宿主机的其它进程是相互隔离的,是操作系统层面的一种虚拟化技术

  • docker组件模块有哪些?

  1. docker client
  2. docker server (docker daemon、 docker engine、docker container )
  3. docker registry

  • docker是如何实现资源隔离及资源限制?

    docker是基于linux内核中cgroup&namespace技术来实现资源限制与资源隔离

  • docker初始化过程?

    docker是通过执行二进制文件dockerd同时读取docker配置文件deamon.json文件完成初始化过程,docker启动配置文件常用配置一般有如下

  1. 容器的cgroup的驱动类型是什么,比如systemd还是cgroupfs

  2. 容器的日志驱动类型,以及日志策略

  3. 容器的存储驱动类型

  4. docker的根目录位置等

  • docker启动一个容器的过程?

  1. docker client发起启动容器请求至docker server通常由docker deamon所接受该请求  

  2. docker deamon接收到请求,进行对参数的分析,需要映射什么卷,多少CPU,多少内存,什么网络模式,使用什么镜像等容器名字等等

  3. 如果当前宿主机没有启动需要的镜像,那需要从镜像仓库拉取镜像

  4. 以上过程完成结束容器整个启动过程

  • docker有哪些优势?

  1. 资源空间占用少,与传统虚拟机相比,它不需要虚拟硬件设备而带来的额外空间使用,所有的运行基础环境都是共享操作系统本身的

  2. 启动速度快,与传统的虚拟机相比,在启动时docker不需要准备虚拟设备初始化过程,它凌驾于操作系统内核上执行启动应用程序

  3. 可移植性便携性,docker是一个跨平台产品,而且它使用镜像保留应用系统运行环境的一致性,可随时随地进行跨平台移植

  4. 便于维护管理,与传统环境区别就是,只需要维护好每个应用对应的镜像就可以了

  5. 持续集成及部署,由于docker使用镜像管理应用的运行环境,在发布时只需要针对应用系统制定相应Dockerfile集合一些脚本简化传统发布过程

  • 容器与镜像的关系?

   如果把镜像看成一个类,那么容器就是一个对象;镜像提供了容器运行环境,而容器就是镜像运行时状态,可以看作成是一个被隔离的进程

  • 镜像如何分层?

  1. 镜像是由多个镜像层堆叠形成的,在制作镜像时编写的Dockerfile中的每条指令都是一个镜像层

  2. 未运行镜像只有镜像层

  3. 运行进container分镜像层与容器层(通常镜像层称之为容器的底层,容器层称之为可写层writable layer)

  • 什么是CoW?

    CoW是容器运行时进行读取&修改文件使用的功能,在容器运行时分为镜像层&容器层,如果发生文件修改时,如果容器层没有要修改文件,则使用CoW功能从镜像层拷贝一个文件副本容器层中

  • Dockerfile都有哪些指令?

   FROM LABEL ADD COPY RUN EXPOSE WORKDIR ENTRYPOINT CMD USER

  • linux namespace功能?

  1. UTS(UNIX Time-shareing System)提供了主机名与域名的隔离,这样每个容器都有自己独立的主机名与域名,在网络层面上可以看成一个独立的节点

  2. IPC(Inter-Process Communication)Linux中与IPC相关的资源有系统信号、消息队列、共享内存等,同一个IPC中进程是相互可见的,不同的IPC进程相互不可见

  3. PID 其功能就是为进程分配identifier id,二个不同的namespace下可以使用相同的PID,容器中的PID 1号进程通常是在制定镜像时的CMD ENTRYPOINT决定的

  4. Mount 其功能就是用来隔离文件系统的挂载点,比如二个不同的容器可以使用相同挂载点

  5. NETWORK 主要功能提供网络相关资源隔离,如网络设备、IP协议、路由表、防火墙、socket等,还有网络目录资源/sys/class/net,/proc/net

  6. USER  主要功能用来隔离用户相关资源,比如用户ID、组ID、用户HOME目录、用户属性、用户下KEY等

  • CNM CNI区别? 

    它们二个都是提供容器的网络模型

    1. CNM是由Docker公司提出的,全名叫Container netwrok model,主要由三个组件组成network sandbox 、endpoint、network,其中endpoint是成对出现一端在network sandbox中,另一端在network

    2. CNI是CoreOS公司提出,全名Container network interface,实现简单只规定容器runtime与网络插件简单契约

    二者主要区别在于,CNM是由Docker公司提出,只支持Docker需要一个分布式存储引擎;而CNI是一个开放网络接口,设计简单只提供添加/删除网络接口接口,便于接入网络插件

  • 什么是CRI OCI runC?

  1. 什么是Container runtimes,其实就是容器运行环境,是一个可执行的二进制文件,如containerd、CRI-O、Docker

  2. 什么是CRI,CRI命名Container runtime interface,是kubernetes提供给Container runtimes一个标准API接口,是Kubernetes与Container runtimes之间的桥梁

  3. 什么是OCI,全名Open Container Initaitive,它约束容器镜像与Container runtimes开放式行业标准同时也提供调用runC创建容器与运行容器

  4. 什么是runC,runC更偏向于低层同时也遵守OCI开放规范,直接与Linux内核交互创建容器、运行容器

网络知识


  • 什么overlay网络?

    是建立在Underlay网络之上的一个逻辑网络,最常见的overlay网络有Vxlan 、NVGRE等

    vxlan是一种网络虚拟化技术,采用"MAC IN UDP"的封装形式将二层以太网帧封装在UDP协议中使用IP网络传输数据包

    vxlan的优点;它可以突破传统二层VLAN的4096的限制、可以网络分段支持在规模部署、由于是封装技术可以在不同的二层网络传输数据

Kubernetes


  • 什么是kubernetes?

    Kubernetes是一个可移植、可扩展的应用容器管理平台工具,是google公司基于golang语言开发的,结合容器技术解决了传统应用部署无法定义资源边界,资源分配过渡浪费,资源隔离、应用分布式部署等

  • Kubernetes功能?

  1. 服务发现和负载均衡

  2. 编排

  3. 滚动发布与回滚

  4. Pod资源分配限额

  5. 自动修复

  6. 弹性扩容(可以使用label功能选择匹配Pod,监控容器资源使用情况动态扩展Pod的数量)

  7. 密钥与配置管理(kubernetes可以在不重构Pod情况下,更新密钥及应用配置信息)

  • Kubernetes架构组成

  • Kubernetes kubeadm初始化过程
  • Kubernetes 创建Pod的过程
  • Kubernetes Pod原理
  • Kubernetes Pause Pod功能
  • Kubernetes kube-proxy原理
  • Kubernetes Deployments 与 Pod的关系
  • Kubernetes Deployment Yaml文件组成结构
  • Kubernetes 高级功能 (RBAC)
  1. RBAC&ABAC
  2. 污点容忍
  3. 节点亲和性
  4. 滚动更新
  5. 弹性扩容
  6. 安全访问
  7. JOB
  8. 版本回滚
  9. 健康检查
  10. 资源管理
  • Kubernetes 常用命令