docker与k8s面试题基础
目录
1.docker与虚拟机的区别
2.虚拟机常用有几种网络模式?
3.什么是容器:
4.什么是Docker容器?
5.容器技术的原理:
6.容器技术都有哪些应用:
7.容器的简单安装使用过程
8.docker能干些什么?
9.docker三大核心
10.virsh命令工具是提供管理各虚拟机的命令接口
11.自定义docker镜像仓库
12.docker自定义镜像,如果写了多条CMD,那么默认执行时会执行哪一条命令呢?
13.docker如何做持久化存储
14.容器的六大命名空间
15.dockerfifile中ADD和Copy区别
16.docker命令
17.docker怎样实现容器件的独立
18.什么是ELK
19.微服务:
20.K8S架构:
21.Kubectl管理命令
22.K8S的POD
23.pod的创建过程:
24.控制器-Deployment:
25.K8S的监控
1.docker与虚拟机的区别
1)docker启动快速,属于秒级别.虚拟机启动通常需要几分钟2)docker需要的资源更少,docker在操作系统级别进行虚拟化,docker容器和内核交互,几乎没有性 能损耗,性能优于虚拟机3)docker更轻量级,docker的架构可以共用一个内核与共享应用程序库,占用内存极小.同样的硬件 环境,docker运行的镜像数量远多于虚拟机数量,对系统的利用率更高4)与虚拟机相比,docker的隔离性更弱,docker属于进程之间的隔离,虚拟机可以实现系统级别的隔离5)安全性:docker的安全性更弱,docker的租户root和宿主机root等同,一旦容器内的用户从普通用 户权限提升为root权限,他就直接具备了宿主机的root权限,进而可进行无限制的操作.虚拟机租户 root权限和宿主机的root虚拟机的权限是分离的6)可管理性:docker的集中化管理工具还不算成熟,各种虚拟化技术都有成熟的管理工具,例如:VMware等7)高可用和可恢复性:docker对业务的高可用支持是通过快速部署实现的.虚拟机具备负载均衡,高可用,容错性,迁移和数据保护等成熟的熟的保障机制,保障业务的连续性8)快速创建、删除:虚拟化的创建是分钟级别的,docker容器创建是秒级别的,docker的快速迭代性决定了无论是开发、测试部署都可以节约大量时间9)交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化,docker在dockerfifile中记录了容器的构建过程,可在集群中实现快速分发和快速部署
2.虚拟机常用有几种网络模式?
有桥接模式、隔离模式(自定义模式)、NAT模式、路由模式桥接模式:Guest与Host连接到同一个交换机上;通过桥接物理网卡,相当于直连到Host所在网络。隔离模式:允许Guest访问同一虚拟交换机上的其他Guest;但是不能访问Host所在的外部网络。NAT模式(默认):将Guest虚拟机的默认网关指向Host物理机的virtbr0接口的IP地址;Guest共享真机的网络连接,以地址转换的方式访问外网。路由模式:由Host物理机充当路由器,开启转发;需要额外设置外网与Guest虚拟机之间互访的路由条目,Guest以路由转发的方式访问外网(需要在真机配置iptables规则)。
3.什么是容器:
容器就是将软件打包成标准户单元,用于开发、交付和部署,是应用程序封装和交付的核心技术。
4.什么是Docker容器?
Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,在主机操作系统的用户空间中作为独立进程运行。Docker容器是Docker镜像的实例
5.容器技术的原理:
利用Cgroups和Namespace两大机制,前者是将进程分组管理的内核功能,通过Cgroups隔离进程,控制进程的资源占用(cpu,内存等)情况在操作系统底层限制物理资源,起到集装箱/容器的作用;后者是让每个进程组有独立的PID,IPC和网络空间,起到隔离的作用。
还有一个SELinux 安全
6.容器技术都有哪些应用:
1.容器化传统应用:容器不仅能提高现有应用的安全性和可移植性,还能节约成本。
2.持续集成和持续部署 (CI/CD) 通过 Docker 加速应用管道自动化和应用部署,提升交付速度
3.微服务 加速应用架构现代化进程。核心:拆分服务(nginx+php-fpm)
4.IT 基础设施优化 充分利用基础设施,节省资金。
将微服务应用放置在容器中,带来了快速与可移植性。从开发、测试、上线,实现了“一次编写,到处运行”。
总之,通过容器、微服务的有效结合应用,最终帮助企业应用演进到互联网架构,实现IT投资和收益的最优化。
7.容器的简单安装使用过程
环境准备:需要64位操作系统,centos7以上版本,关闭防火墙,开启路由转发,开放iptable的FORWARD默认规则
安装软件:docke-ce*+依赖包(多数需要连上阿里云等网络yum源安装)
导入镜像:#docker load -i 镜像.tar.gz
启动容器:#docker run -itd +镜像名:标签 /bin/bash
8.docker能干些什么?
1)加速本地开发(通过Docker能够快速搭建好开发和运行环境,并且该环境可以直接传递给测试和产品部署)2)自动打包和部署应用3)创建轻量、私有的PasS环境4)自动化测试和持续集成部署5)部署并扩展Web应用、数据库和后端服务6)创建安全沙盒(使容器隔离)7)轻量级的桌面虚拟化
9.docker三大核心
docker主要包括三大核心概念,理解了这三个核心概念,就能理解docker的整个生命周期:1)镜像:类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统,镜像是创建Docker容器的基础。2)容器:类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像的应用运行实例,可以将其启动,开始,停止,删除,而这些容器都是相互隔离,互不可见的。镜像自 身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身保持不变。3)仓库:类似于代码仓库,是docker集中存放镜像文件的场所。
10.virsh命令工具是提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 .. ..格式:virsh 控制指令 [虚拟机名称] [参数]virsh nodeinfo #//查看KVM节点(服务器)信息virsh list #//列出正在运行的虚拟机virsh list --all #//列出所有的虚拟机virsh net-list--all #//列出虚拟网络virsh dominfo 虚拟机名称 #查看挃定虚拟机的信息运行|重启|关闭挃定的虚拟机virsh start|reboot|shutdown 虚拟机名称
11.自定义docker镜像仓库
1)创建存放Dockerfifile的目录2)书写DockerfifileFROM:基础镜像MAINTAINER:镜像创建者的信息EXPOSE:开放的端口ENV:设置变量ADD:复制文件到镜像RUN:制作镜像时执行的命令,可以有多个WORKDIR:容器默认的工作目录CMD:容器启动时执行的命令,仅可以有一条CMD3)执行docker命令创建镜像仓库docker build 容器名:标签 .(当前)
12.docker自定义镜像,如果写了多条CMD,那么默认执行时会执行哪一条命令呢?
如果写入了多条CMD,那么执行时默认或执行最后一条命令
13.docker如何做持久化存储
1)Bind mounts:可以实现将Host中的任意路径挂载到容器中,可以存储在任意位置,非Docker的进程或者容器可能随时对其进行修改,存在一定的风险。在单容器情况下,使用Bind mount可以用 -v 或者 --volume,在swarm集群中,我们使用 --mount,在Docker17.06之后,可以统一使用 --mount2)Volumes:实现将Docker中的某一个volume挂载到容器中,存储在Docker Host文件系统的某一个路径下,默认是/var/lib/docker/volumes,由Docker进行管理,非Docker的进程不能修改该路径下的文件,比较安全。VOlumes和bind的对比:Volumes 的备份和迁移更加容易。可以使用 Docker CLI 或者 Docker API 管理 volumes。Volumes 既可以在 Linux 的容器中使用,也可以在 Windows 的容器中使用。Volumes 在多容器中共享更加的安全。Volume drivers 允许我们把数据存储在远程主或云提供商。
不同点 bind mount volume source位置 可以任意指定 NarlibdockerNolimes/ Host源地址为空 覆盖掉有容器的内容 容器内数据复制到volume 是否支持单个文件 支持 不支持,只能是目录 权限控制 读写或者只读 读写或者只读 移值性 弱,与host path绑定 强,无需指定host目录 3)Tmpfs:存储在Host系统的内存中,没有在磁盘上进行存储,不能实现持久化。Tmpfs方式将数据存储在Host内存中,在容器的整个生命周期内被容器使用,不能持久化。出于安全原因,或者是提升容器的性能,比如我们的程序需要写入很多不需要存储的状态数据时,我们就会使用 tmpfs。
Key Value type bind,volume,tmpfs,如不指定默认为volume destination(或者dst/target) 容器中的路径 tmpfs-type(或者tmpfs-mode) 附加参数
14.容器的六大命名空间
六大命名空间:主机名空间、文件系统、用户、网络、进程、信号向量
15.dockerfifile中ADD和Copy区别
COPY指令和ADD指令的区别在于是否支持从远程URL获取资源。COPY指令只能从执行docker build所在的主机上读取资源并复制到镜像中。COPY不能对压缩文件进行自动解压,COPY只能对一些较小的文件进行操作,不能对大文件操作ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。ADD可以对压缩文件进行自动解压并安装build
16.docker命令
容器生命周期管理 — docker[run|start|stop|restart|kill|rm|pause|unpause]容器操作运维 — docker[ps|inspect|top|attach|events|logs|wait|export|port]容器 rootfs命令 — docker[commit|cp|diffff]镜像仓库 — docker[login|pull|push|search]本地镜像管理 — docker[images|rmi|tag|build|history|save|import]其他命令 — docker[info|version]
17.docker怎样实现容器件的独立
1)pidnamespace不同用户的进程就是通过 pidnamespace隔离开的,且不同 namespace中可以有相同pid。所有的LXC 进程在 docker中的父进程为 docker进程,每个 lxc进程具有不同的 namespace。2)netnamespace有了 pidnamespace,每个 namespace中的 pid能够相互隔离,但是网络端口还是共享host的端口。网络隔离是通过 netnamespace实现的,每个 netnamespace有独立的network devices,IPaddresses,IP routing tables,/proc/net目录。这样每个container的网络就能隔离开来。docker默认采用 veth的方式将 container中的虚拟网卡同 host上的一个 dockerbridge:docker0连接在一起。3)ipcnamespacecontainer 中 进 程 交 互 还 是 采 用 linux 常 见 的 进 程 间 交 互 方 法 (interprocesscommunication- IPC),包括常见的信号量、消息队列和共享内存。container的进程间交互实际上还是host上具有相同pidnamespace中的进程间交互。4)mntnamespace类 似 chroot,将 一 个 进 程 放 到 一 个 特 定 的 目 录 执 行 。 mnt namespace 允 许 不 同namespace的进程看到的文件结构不同,这样每个 namespace中的进程所看到的文件目录就被隔离开了。在 container里头,看到的文件系统,就是一个完整的 linux系统,有 /etc、/lib等,通过chroot实现。5)utsnamespaceUTS("UNIX Time-sharing System")namespace允许每个 container拥有独立的hostname和domainname,使其在网络上可以被视作一个独立的节点而非 Host上的一个进程。6)usernamespace每个 container可以有不同的 user和 groupid,也就是说可以在 container内部用container内部的用户执行程序而非 Host上的用户。有了以上 6种 namespace从进程、网络、IPC、文件系统、UTS 和用户角度的隔离,一个container就可以对外展现出一个独立计算机的能力,并且不同 container从 OS 层面实现了隔离.然而不同 namespace之间资源还是相互竞争的,仍然需要类似 ulimit来管理每个 container所能使用的资源 - -cgroup。 cgroups(Controlgroups)实现了对资源的配额和度量。
18.什么是ELK
三大组件Elasticsearch:负责日志检索和储存Logstash:负责日志收集和分析、处理Kibana:负责日志的可视化ELK可用于解决:分布式日志数据集中式查询和管理系统监控,包含系统硬件和应用各个组件的监控故障排查安全信息和事件管理报表功能Elasticsearch特点:实时分析分布式实时文件存储,将每个字段都编入索引文档导向,所有的对象全部是文档高可用性,易扩展,支持集群(Cluster)、分片和复制(shards和Replicas)接口友好,支持JSONLogstash特点:所有类型的数据集中处理不同模式和格式数据的正常化自定义日志格式的迅速扩展为自定义数据源轻松添加插件Kibana特点:灵活的分析和可视化平台实时总结流量和数据的图表为不同的用户显示直观的界面及时分享和嵌入的仪表板
19.微服务:
微服务架构也是从Monolithic架构演进来的。Monolithic应用中按照职责的不同,拆分解耦成一个个的单独微服务(Micro Services),每个微服务都对应了一个独立的业务功能,也只定义了该功必须的一些操作。微服务独自或者共同部署在多台应用服务器上,微服务之间通过标准的Restful接口实现访问。这样当一个微服务出现问题时,并不会影响到其他的服务。而且,微服务可以基于资源的需求进行独立扩展,可以被部署在更小的主机上。各个微服务使用的开发语言也可以不同,只要保持接口协议统一。
Monolithic架构天然的不具备健壮性,因为一旦某个组件出现问题,整个服务基本上就挂了。自身不具备分布式服务能力,通常需要依赖于负载均衡器、数据库HA等来实现服务的分布化和负载分担。相对而言,互联网架构优势在于分布式、去中心化,支持弹性伸缩。其核心是轻应用、微服务。
20.K8S架构:
主要由master组件丶node节点组件丶image镜像仓库组成
master组件又分很多组件:
api server整个系统的对外接口
scheduler 系统资源调度器
controller manager 管理控制器
etcd 负责节点间的服务发现和配置共享
flannel 网络插件,实现不同主机的容器间互联互通
K8S集群管理:管理命令kubectl,启动容器服务,查看资源,查看节点状态等
POD:K8S中最小的部署单元,不是进程/程序,而是一个环境,包括容器,存储,网络,配置等.pod是临时性的.资源文件:定义了如何启动PDO,如何运行,启动副本等功能的文件,叫资源文件.可以用来创建,删除,管理资源对象.
node计算节点安装:
docker-ce
kubelet,
kube-proxy,
IPVS模式,daemon.json,master主机的token值和证书.
安装网络插件flannel:实现不同主机的容器间互联互通.
21.Kubectl管理命令
补全kubectl命令的Tab键:
\# kubectl completion bash >/etc/bash_completion.d/kubectl
\# kubeadm completion bash >/etc/bash_completion.d/kubeadm
kubectl get命令:
\#kubectl get nodes(查询节点状态) #kubectl get deployment(查询资源名称)
\#kubectl get pods -o wide #查询pod容器资源和主机信息
kubectl exec命令:
\#kubectl exec -it 容器id /bin/bash #启动新命令,进入一个正在运行的容器中
kubectl describe命令:
\#kubectl describe 资源类型 资源名称 #查询资源详细信息(多用于拍错)
kubectl logs和attach命令:
\#kubectl logs 资源名称 #输出操作日志信息
kubectl delete命令:
\#kubectl delete 资源类型 资源名称 #删除资源(直接删除pod会自动创建pod,删除资源则不会)
集群扩容命令:
\#kubectl scale 资源名称 --replicas=1/2/3 #pod伸缩
查看K8S日志命令:
22.K8S的POD
k8s中的最小部署单元,不是一个程序/进程,而是一个环境(包括容器、存储、网络ip:port、容器配置)。
其中可以运行1个或多个容器(docker或其他容器),在一个pod内部的容器共享所有资源,包括共享pod的ip:port和磁盘。
pod是临时性的,用完即丢弃的,当pod中的进程结束、node故障,或者资源短缺时,pod会被干掉。基于此,用户很少直接创建一个独立的pods,而会通过k8s中的controller来对pod进行管理。
23.pod的创建过程:
1)kubectl 向api server(提供各种资源对象)发起一个create pod 请求
2)api server接收到pod创建请求后,生成一个包含创建信息的yaml
3)api server将刚才的yaml信息写入etcd数据库
4)scheduler(资源调度器) 查看 api server,类似于通知机制
5)kubelet(node节点架构之一,监控容器的) 通过监测etcd数据库,发现api server 中有了个新的Node;调用node中的docker api,创建容器
24.控制器-Deployment:
支持扩容/收缩,支持应用服务更新与回滚
25.K8S的监控
metrics-server:监控系统资源使用的插件,监控node节点上cpu,内存使用率等,启用监控需要kubelet证书
Dashboard:基于网页的Kubernetes用户界面,可以对容器应用拍错,管理集群资源,展示了K8S集群中的资源状态信息和所有报错信息.
Prometheus:监控系统和时间序列数据库,目前常用里监控K8S容器管理系统.
docker与k8s面试题基础相关推荐
- 云计算:OpenStack、Docker、K8S(Kubernetes容器编排工具)的演进史 | 附推荐阅读
目录 引子 OpenStack 的诞生 OpenStack 是什么 Docker 的出现 K8S(Kubernetes) - 为 Docker 而生 推荐阅读 引子 作为一名程序员,设计程序架构.优化 ...
- 解惑篇|Docker和 K8s 到底啥关系?想学K8s,必须得先学 Docker 吗?
想学K8s,必须得先学会 Docker 吗?这是很多网友在开始琢磨着想要学 K8s 的时候都会冒出来的想法.那么今天我们就跟大家说说这个话题,要回答这个问题,我们需要先搞清楚 Docker 和 K8s ...
- Docker和K8s的区别
随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗? k8s 是kubernets的缩写,'8'代表中间的八个字符. 其实 ...
- Docker与k8s
前言 随着k8s 作为容器编排解决方案变得越来越流行,有些人开始拿 Docker 和 k8s进行对比,不禁问道:Docker 不香吗? k8s 是kubernets的缩写,'8'代表中间的八个字符. ...
- 刘华:戏说Docker和K8s,一文让你成为懂王
" 一文让你成为Docker和K8s的懂王!" 最近,K8s和Docker的离婚案闹得大伙心慌慌的.两位改变世界的神仙打架,咱码农会不会被误伤呢?万幸的是,Docker生的娃(镜像 ...
- Docker概述、安装及基础命令
Docker概述.安装及基础命令 一.Docker概述 1. docker是什么 2. docker与虚拟机的区别 3. docker使用场景 4. docker核心概念 5. docker引擎 6. ...
- k8s面试题大全(持续更新中)
前言 本篇模拟面试官提问的各种docker,k8s问题,意在提高面试通过率,欢迎在评论区探讨,同步进步. docker的工作原理是什么,讲一下 docker是一个Client-Server结构的系统, ...
- Docker与k8s的恩怨情仇(四)-云原生时代的闭源落幕
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在本系列前几篇文章中,我们介绍了从Cloud Foundry到Docker等PaaS平台的发展迭代过程.今天 ...
- 云计算openstack、kvm以及docker和k8s
云计算openstack.kvm以及docker和k8s 云计算 概念 为什么需要云计算 云计算服务模式 云计算应用 OpenStack 简介 组件介绍 DNS解析过程 Docker 为什么有dock ...
最新文章
- linux应用程序跑飞,linux 试题
- 类的实质——类成员public、private属性的另类解释
- 老司机们都是怎么学习STM32的?
- 制作html5谭木记页面,北斗区域地理配套练习答案
- mybatis通用mapper_全网最全Mapper解析,附实操代码帮你更好理解
- javax.ws.rs.NotSupportedException: Cannot consume content type
- 知乎高赞:有哪些值得刻意练习的心态?
- 设置环境变量ANDROID_SDK_HOME有什么用?
- 测试Flex代码覆盖率工具---FlexCover
- 模拟器显示空白图片_网吧模拟器下载:小游戏礼包
- 【白皮书分享】2022年新品营销白皮书-阿里妈妈.pdf(附下载链接)
- 区块链相关名词解释(一)
- 《Android 第1行代码》读后感—第1章【开始启程,你的第一行Android代码】
- 《图解算法》第11章之 接下来如何做
- Python可视化:python画图颜色设置
- 我的世界Java种子大全_种子(世界生成)
- 下载安装typora
- 安卓版本客户端2.1
- 结构体初始化的四种方法
- transforms的使用方法