docker与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) 书写 Dockerfifile
FROM: 基础镜像
MAINTAINER: 镜像创建者的信息
EXPOSE: 开放的端口
ENV: 设置变量
ADD: 复制文件到镜像
RUN: 制作镜像时执行的命令 , 可以有多个
WORKDIR: 容器默认的工作目录
CMD: 容器启动时执行的命令 , 仅可以有一条 CMD
3) 执行 docker 命令创建镜像仓库
docker build 容器名 : 标签 .( 当前 )

12.docker自定义镜像,如果写了多条CMD,那么默认执行时会执行哪一条命令呢?

如果写入了多条 CMD ,那么执行时默认或执行最后一条命令

13.docker如何做持久化存储

1 Bind mounts :可以实现将 Host 中的任意路径挂载到容器中,可以存储在任意位置,非
Docker 的进程或者容器可能随时对其进行修改,存在一定的风险。
在单容器情况下,使用 Bind mount 可以用 -v 或者 --volume ,在 swarm 集群中,我们使用 --
mount ,在 Docker17.06 之后,可以统一使用 --mount
2 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 mountvolume
source位置可以任意指定NarlibdockerNolimes/
Host源地址为空覆盖掉有容器的内容容器内数据复制到volume
是否支持单个文件支持不支持,只能是目录
权限控制读写或者只读读写或者只读
移值性弱,与host path绑定强,无需指定host目录

3 Tmpfs :存储在 Host 系统的内存中,没有在磁盘上进行存储,不能实现持久化。
Tmpfs 方式将数据存储在 Host 内存中,在容器的整个生命周期内被容器使用,不能持久化。出于 安全原因,或者是提升容器的性能,比如我们的程序需要写入很多不需要存储的状态数据时,我 们就会使用 tmpfs
KeyValue
typebind,volume,tmpfs,如不指定默认为volume
destination(或者dst/target)容器中的路径
tmpfs-type(或者tmpfs-mode)附加参数

14.容器的六大命名空间

六大命名空间:主机名空间、文件系统、用户、网络、进程、信号向量

15.dockerfifileADDCopy区别

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,IP
addresses,IP routing tables,/proc/net 目录。这样每个 container 的网络就能隔离开来。 docker
默认采用 veth 的方式将 container 中的虚拟网卡同 host 上的一个 dockerbridge:docker0 连接在 一起。
3)ipcnamespace
container 中 进 程 交 互 还 是 采 用 linux 常 见 的 进 程 间 交 互 方 法 (interprocess
communication- IPC), 包括常见的信号量、消息队列和共享内存。
container 的进程间交互实际上还是 host 上具有相同 pidnamespace 中的进程间交互。
4)mntnamespace
类 似 chroot, 将 一 个 进 程 放 到 一 个 特 定 的 目 录 执 行 。 mnt namespace 允 许 不 同
namespace 的进程看到的文件结构不同 , 这样每个 namespace 中的进程所看到的文件目录就被隔 离开了。在 container 里头 , 看到的文件系统 , 就是一个完整的 linux 系统 , /etc /lib , 通过 chroot 实现。
5)utsnamespace UTS("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)
接口友好 , 支持 JSON
Logstash 特点 :
所有类型的数据集中处理
不同模式和格式数据的正常化
自定义日志格式的迅速扩展
为自定义数据源轻松添加插件
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容器管理系统.

  • 3
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值