花了大半个月对k8s&docker进行了梳理,包括之前读过的书,官方文档以及k&d在公司项目的实践等。

以下是个人对docker & k8s 面试知识点的总结:

1 docker

常见面试题如下 每一点可根据回答进行适当深入

1.1 什么是docker

  • docker和传统linux的差异?
  • 容器和镜像的区别?
  • 如何理解docker的缓存机制?

1.2 docker 网络模型是什么?有何局限

  • docker的网络基础是什么?
  • docker的网络模型是?有什么局限?
  • docker如何实现容器间通信的?

1.3 docker 基础命令

  • cmd和entryPoint差异?
  • copy和add的差异?
  • 简单讲下swam/compose?

2 kubernetes

常见面试题如下 每一点可根据回答进行适当深入

2.1 什么是k8s?

  • 1 为什么用k8s 解决了什么问题?
  • 2 k8s有哪些组件,有什么作用?【同:Master节点和Node节点都用哪些组件】
  • 3 可以简单说下Node Pod container 之间的关系吗? 【可引入2.2/2.3对Pod SVC的考察】
  • 4 什么是SVC可以简单描述下吗?【可引入2.3对SVC的考察】
  • 5 可以简单讲下k8s的网络模型吗?
  • 6 Pod SVC Node Container 之间如何相互访问
  • 7 swarm和k8s如何选择?

2.2 考察Pod

  • 静态Pod和普通Pod的差异?
  • 简单讲下Pod的生命周期重启策略呢?

    - 不同组件对Pod的重启策略要求一样吗?
  • 如何检查Pod的健康状态?哪2种探针?

    - 2种探针的实现方式
  • 简单说下Pod的调度方式?

2.3 考察SVC

  • SVC有哪4种类型

2.4 k8s网络模型

  • DNS和Iptables在k8s中的运用?有何差异

    - k8s如何解决多机器部署容器的网络问题?
  • Pod SVC Node Container 之间如何相互访问

3 参考答案

答案是根据所在公司项目结合自己的理解给出的答案 不一定完全准确但在面试中要做到有理有据突出自己的思路即可。

4 docker

问题和答案 如下

4.1 什么是docker?

通常问这个问题主要在于考察候选人是否真正了解过docker,很多人项目中都有用到docker,真正去了解过概念,架构的不多。从而来辨别简历上的熟悉/了解docker的水分。

如果这个都无法回答,那么接下来的docker考察也就毫无意义了,此问题通常也会结合以下问题来进行考察。

  1. docker和传统linux的差异?
  2. docker都有哪些核心组件?
  3. 可以简单说下docker的架构吗?
  4. 容器和镜像的区别?

docker是什么: Docker是一个可以把开发的应用程序自动部署到容器的开源引擎。

docker和VM差异: docker是一个应用层的抽象,容器之间通过网络命名空间进行隔离,多个容器共享同一个操作系统内核。VM是对物理硬件层的抽象,每个VM都包含独立的操作系统,重且启动缓慢。VM主要为了提供系统环境,容器主要是为了提供应用环境。

docker组件: docker引擎【包含Docker客户端&服务端】,docker镜像,docker容器,Registry【镜像仓库】

docker的架构: C/s架构

容器和镜像的区别: 镜像是一个只读模板,包括运行容器所需的数据,其内容在构建之后就不会被改变,可以用来创建新的容器。 镜像由多个只读层组成,容器在只读层的基础上多了一个读写层。

4.2 docker 网络模型是什么?有何局限

这里也经常会结合K8s网络原理进行考察,以及如下几个考点

  1. docker的网络基础是什么?
  2. docker的网络模型是?有什么局限?
  3. docker如何实现容器间通信的?

Docker网络基础: Docker是在操作系统层上对应用的抽象,使用网络命名空间来对不同容器之间进行网络隔离,用Veth设备对来进行容器之间的通讯。

docker的网络模型: 有4种网络模型 分别是Bridge Container host none 默认使用bridge网络模型,容器的初次启动会虚拟化出来一个新的网卡名为docker0,在多机器部署下docker0地址可能会冲突。所以docker对多机部署支持的不够友好。

4.3 docker 基础命令

出现频率较高的为以下几条命令的考察

  1. cmd和entry差异?
  2. copy和add的差异?
  3. docker-compose & docker swarm?

CMD & ENTRYPONIT

都是容器操作指令:

CMD 用于指定容器启动时候默认执行的命令。可以被docker run指定的启动命令覆盖。ENTRYPONIT 指令可让容器以应用程序或者服务的形式运行。一般不会被docker run指定的启动命令覆盖。dockerfile中的多个CMD & ENTRYPONIT只有最后一个会生效。

注意区别docker run 和RUN 一个是容器启动命令,一个是镜像构建时候所用。

copy & add

ADD & COPY 选取目标文件复制到镜像当中。是针对镜像的指令,唯一差别在于add源文件可以支持url且可以对压缩文件进行解压操作。而copy针对的是当前构建环境。

docker-compose & docker swarm

使用Docker compose可以用YAML文件来定义一组需要启动的容器,以及容器运行时的属性。docker-compose用来对这一组容器进行操作。

docker swarm 原生的Docker集群管理工具,依赖docker本身,很多重要功能依赖团队二次开发。且社区不够活跃,一般公司生产环境会选择k8s,个人项目或者容器数量较少可选swarm,只需要docker即可完成,相对较轻。

5 kubernetes

5.1 什么是k8s?

对k8s的考察一般逃不过这样入门级的问题,针对入门级的问题,面试官可能也会针对如下几个点进行考察,在候选人答出来的基础上,选择其中一个进行深入。

  1. 为什么用k8s 解决了什么问题?
  2. k8s有哪些组件,有什么作用?
  3. 可以简单说下Node Pod container 之间的关系吗? 【进一步可对Pod SVC细节进行考察】
  4. 什么是SVC可以简单描述下吗?【可引对SVC的考察】
  5. 可以简单讲下k8s的网络模型吗?【可以和docker网络模型结合考察】
  6. Pod SVC Node Container 之间如何相互访问【衍生 外部环境如何访问k8s】
  7. swarm和k8s如何选择?

1 什么是k8s 为什么用k8s:

一个开源的容器集群管理平台【容器编排工具】,可提供容器集群的自动部署,扩缩容,维护等功能。分为管理节点Master和工作节点Node。在我们的项目中主要解决了环境一致性的问题,通过CI/CD使得运维部署变得简单起来,以及自动部署,故障监控,自动扩缩容。可以提升开发效率。

2 k8s有那些组件:

  • etcd保存了整个集群的状态;
  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
  • kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;

3 Node&Pod&container之间的关系:Node一般指工作节点包含多个Pod Pod中包含多个Container,Pod中的container共享同一个网络命名空间。

4 什么是SVC: SVC是对一组功能相似的Pod资源的抽象,相当于一组服务的负载均衡。

5 k8s的网络模型:IP-Per-Pod 每个Pod有独立的Ip地址,无论是否处于同一个Node节点,Pod可以通过IP相互访问,且Pod和容器的地址和外部看到的地址是同一个地址。

6 Pod SVC Node Container 之间如何相互访问:

  • 同Pod内的容器:同一个Pod的容器共享同一个网络命名空间可以直接进行通讯
  • 同Node内不同Pod的容器:多个Pod都关联在同一个Docker0网桥上,通过docker0网桥完成相互通讯。
  • 不同Node内Pod的容器:不同Node上的docker0可能会相同,PodIP和docker0是同网段的,所以需要将PodIP和NodeIP进行关联且保障唯一,不同Pod之间的数据通过物理机的端口进行转发即可完成通讯。

7:k8s 和docker swarm如何选择: :

5.2 对SVC的考察

SVC是k8s中的核心概念 这里涉及知识点众多 常见的面试考点如下

  1. 什么是SVC? 如何创建SVC?
  2. 使用SVC创建多个副本和使用RC创建多个副本有什么差异?
  3. SVC有哪几种类型?
  4. SVC 负载分发策略有那些?
  5. 集群外如何访问SVC?

SVC:是对一组功能相似的Pod资源的抽象,相当于一组服务的负载均衡。可以使用配置文件的方式创建也可以使用命令创建kubectl expose

SVC和RC提供服务的差距: RC创建的服务PodIP可能会变。SVC提供的clusterIP不会。通过Iptables的NAT转换重定向到本地端口,在均衡到后端Pod。

svc的几种类型: ClusterIp/NodePort/LoadBalancer/ExternalName

  • ClusterIp 默认类型 分配的一个虚拟地址,内部可以相互访问,外部不行
  • NodePort 将SVC端口号映射到物理机
  • LoadBalancer 基于NodePort,云服务商在外部创建了一个负载均衡到Pod
  • ExternalName 将外部地址经过集群内部的再一次封装(实际上就是集群DNS服务器将CNAME解析到了外部地址上),实现了集群内部访问即可。

svc负载分发策略: RoundRobin/SessionAffinity/自定义实现【基于标签选择器】

集群外部访问: 端口映射到物理机即可

5.2 Pod考察

  1. Pod和静态Pod的区别
  2. 生命周期和重启策略 【这里可扩展 不同控制器对Pod的重启策略要求】
  3. Pod如何健康检查?
  4. Pod的调度方式?【扩展调度算法】
  5. Pod如何扩缩容?【扩展 RC和RS的差异】
答案

待补充 --详见《k8s权威指南》读书笔记

5.3 基础原理类考察

主要考察对基本组件的理解 和原理分析

  1. API Server
  2. Controller Manager【Replication Controller/Node Controller/ResourceQuota Controller/Namespace Controller/SVC Controller& Endpoint Controller】
  3. Scheduler
  4. Kubelet 【Pod健康检查 资源监控】
  5. Kube-Proxy
  6. k8s-DNS & Iptables差异
  7. k8s中Ingress是什么
  8. 简述k8s中的如下属性及其作用resources tolerations affinity
  9. k8s中pod、rs、deployment、hpa的基本概念,以及他们之间的关系
答案

待补充 --详见《k8s权威指南》读书笔记

5.4 网络原理类考察

主要考察对基本组件的理解 和原理分析

  1. k8s的网络模型是什么?
  2. Docker的网络基础是什么?
  3. Docker的网络模型和局限?
  4. k8s的网络组件之间是如何通讯的?
  5. 外部如何访问k8s集群?
  6. 有那些开源组件支持k8s网络模型?
答案

待补充 --详见《k8s权威指南》读书笔记

参考资料:

k8s&docker面试总结的更多相关文章

  1. k8s Docker 安装

    k8s Docker 安装 一.运行环境 Centos 7.7 虚拟机内核为 3.10 基础组件版本: k8s.gcr.io/kube-apiserver:v1.16.0 k8s.gcr.io/kub ...

  2. k8s Docker私有仓库认证

    使用过K8s的小伙伴肯定会遇到一个问题,我们在使用自有的Docker仓库的时候都需要先登录用户名和密码,但是如果使用K8S怎么配置密码呢?在secret中有一个类型是docker-registry我们 ...

  3. [k8s]Docker 用户使用 kubectl 命令指南-unkown排错(kubelet端口解析)

    参考:https://kubernetes.io/docs/user-guide/kubectl-cheatsheet/ https://k8smeetup.github.io/docs/user-g ...

  4. k8s docker集群搭建

    一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器 ...

  5. Rancher + k8s + docker 部署资料

    一.k8s 文档: https://jimmysong.io/kubernetes-handbook/concepts/deployment.html 命令行大全 https://kubernetes ...

  6. Kubernetes(k8s) docker集群搭建

    原文地址:https://blog.csdn.net/real_myth/article/details/78719244 一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背 ...

  7. k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦

    背景 系统版本:CentOS7 Jenkins版本:2.222.1 maven版本:apache-maven-3.6.3 Java版本:jdk1.8.0_231 Git版本:1.8.3.1 docke ...

  8. Docker 面试宝典

    Docker 是什么? 是实现容器技术的一种工具 是一个开源的应用容器引擎 使用 C/S 架构模式,通过远程API 来管理 可以打包一个应用及依赖包到一个轻量级.可移植的容器中 容器是什么? 对应用软 ...

  9. k8s docker 中部署think php 并搭建php websocket

    不得不说php 对云原生有点不够友好,之前用java .net打包docker镜像 一下就ok了,php倒腾了好久才算部署成功. 场景:使用阿里云ack(k8s) 部署采用thinkPHP框架的php ...

随机推荐

  1. SpringMVC+Spring+mybatis+maven+搭建多模块框架前后端分离开发框架的完整demo,拿走不谢。——猿实战02

            猿实战是一个原创系列文章,通过实战的方式,采用前后端分离的技术结合SpringMVC Spring Mybatis,手把手教你撸一个完整的电商系统,跟着教程走下来,变身猿人找到工作不是 ...

  2. CSS图形基础:纯CSS绘制图形

    为了在页面中利用CSS3绘制图形,在页面中定义 <div  class="container"> <div class="shape"> ...

  3. springMVC入门(一)------springMVC基本概念与安装

    springMVC简介 springMVC是一个基于MVC的web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. springMVC安装 本例中使用 ...

  4. 操作系统-存储管理(3)高速缓存Cache

    存储器的组织形式: 数据总是在相邻两层之间复制传送,最小传送单位是定长块,互为副本(不删除) ️指令和数据有时间局部性和空间局部性.   高速缓冲存储器Cache 介于CPU和主存储器间的高速小容量存 ...

  5. 团队作业3:需求改进&系统设计(歪瑞古德小队)

    目录 一.需求&原型改进 1.1 用户需求调查 1.2 选题需求改进 1.3 功能分析的四个象限 1.4 完善需求规格说明书 1.5 任务分解WBS调整 1.6 项目进度计划调整 二.后端架构 ...

  6. 2020.5.25 第五篇 Scrum冲刺博客

    Team:银河超级无敌舰队 Project:招新通 项目冲刺集合贴:链接 目录 一.每日站立会议 1.1 会议照片 1.2 项目完成情况 二.项目燃尽图 三.签入记录 3.1 代码/文档签入记录 3. ...

  7. 第六篇Scrum冲刺博客--Interesting-Corps

    第六篇Scrum冲刺博客 站立式会议 1.会议照片 2.队友完成情况 团队成员 昨日完成 今日计划 鲍鱼铭 搜索页面以及音乐详情页面数据导入及测试 各界面数据请求云函数设计及实现 叶学涛 进行页面的优 ...

  8. python3.6和pip3:Ubuntu下安装升级与踩坑之路

    本文以Ubuntu16.x系统为例,演示如何安装python3.6和相应环境.安装Python3的机器必须要能访问外网才能进行如下操作! 1. 安装方式 在Ubuntu下安装python有两种方式: ...

  9. 关于C#.WinForm 与 WinApi的SendMessage 方法

    介绍: Windows Api 的 SendMessage 该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而和函数PostMessage不同,P ...

  10. [SCOI2013]摩托车交易 题解

    思路分析 为了让交易额尽量大,显然我们需要尽量多地买入.对于每个城市,到达这个城市时携带的黄金受到几个条件的影响:之前卖出的黄金,之前能买入的最多的黄金,前一个城市到当前城市的路径上的最小边权.既然不 ...