2019 最新运维面试题





面试总结


面试总结

面试总结


一、Nginx 相关面试题

1,nginx.conf翻译

nginx 如何优化优化

1.服务优化

  1. * 隐藏版本号
  2. * 修改用户和组
  3. * expires缓存(一般是图片)
  4. * 日志切割
  5. * 设置超时时间
  6. keepalive_timeout #设置超时时间
  7. client_header_timeout #指定请求头的超时时间
  8. client_body_timeout #设置请求体超时时间
  9. * Gzip压缩
  10. Nginx_http_gzip_module压缩模块提供了对文件压缩的功能,以节约网站的带宽,提高用户的访问体验
  11. 默认Nginx已经安装该模块
  12. gzip on #开启gzip压缩输出
  13. gzip_buffers 4 64; #表示申请了4个单位为64kb的内存作为压缩结果流缓存
  14. gzip_http_version 1.1 #用于设置http协议版本
  15. gzip_min_length #设置允许页面的最小字节
  16. gzip_vary on; #让前端的缓存服务器缓存就经过的gzip压缩页面
  17. * 防盗链
  18. Nginx防盗链的原理是加入location项,用正则表达式过滤图片类型文件,对于信任的网站可以正常使用,对于不信任的网址则返回相应的错误页面
  19. [root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
  20. location ~*\.(jpg|gif|swf)$ {
  21. valid_referers none blocked *.benet.com benet.com;
  22. if ( $invalid_referer ) {
  23. rewrite ^/ http://www.benet.com/error.png;
  24. }
  25. }
  26. ~*.(jpg|gif|swf)$: 匹配不区分大小写,以.jpg 或.gif .swf结尾的文件。
  27. valid_referers:设置信任的网站,可以正常使用图片。
  28. none:浏览器中refer为空的情况,就是直接在浏览器访问图片。
  29. blocked:浏览器中refer不为空的情况,但是值被代理或防火墙删除了,这些值不以http://或 https://开头。
  30. 后面的网址或域名:refer包含相关字符串的网址。
  31. if语句:如果链接的来源域名不在valid_referers所列出的列表中, $invalid_referer 1,则执行后面的操作,即进行重写或返回403页面。

nginx upsteam几种轮训方式

  1. nginx的反向代理模块主要是基于upstream实现的,使用一般的upstream方式,其中upstream主要分为三种模式
  2. 1. RR轮询: 默认的反向代理模式,用以平衡各个服务器的负载,若某个服务器宕机,会自动从轮询中剃掉。同时,可以手动指定某台服务器脱离轮询,用于离线检查
  3. 2.weight 权重: 针对服务器性能不通,用来控制服务器被访问的比例,以实现老客户访问时的快速调度
  4. 3.ip bash,主要记录了客户端IP访问的目标主机,以实现老用户访问的快速调度

Nginx使用limit_req_zone对同一IP访问进行限流

  1. 首先在nginx.conf中的http模块下配置
  2. limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
  3. 区域名称one(自定义),占用空间大小为10m,平均处理请求速度不能超过每秒一次
  4. http模块的子模块server下配置
  5. location ~* .htm$ {
  6. limit_req zone=one burst=5 nodelay;
  7. proxy_pass http://backend_tomcat;
  8. }
  9. burst 缓冲队列的长度
  10. nodelay 不延迟
  11. 真正对限流起作用的就是rate=1r/sburst=52个配置

nginx 如何获取客户端的真实IP

  1. 使用forwarded-fr获取真实IP

并发、并行、阻塞、异步、同步

并发/并行: CPU在执行多个任务时的方式,并发表示同一段时间里面有多个进程在同一CPU执行,在极短的时间互相切换使人不会发觉。并行只会出现在多个CPU的情况下,表示同一时刻之内有多个进程在执行
例子: 在开车的时候有个电话,必须停下车才可以接电话,接完电话继续开车,这就是并发。 如果一边开车一遍接电话,这就是并行

同步/异步: 关注的是请求和响应的通讯机制,描述的是被调用方。当发出请求后,该请求是否等待结果后再返回,同步就是没有得到结果前不会返回,返回即得到请求结果。异步就是得到发出请求后就直接返回,也可能不会立即得到结果,服务得到结果后再通过通知或者回调函数等方法通知调用者
例子: 去买咖啡,付了钱在前台等待咖啡制作完毕,就是同步,付了钱不在前台等待,找位置坐下,服务员送过来就是异步

阻塞/非阻塞: 关注的是请求在等待结果时的状态,描述的是调用方。 阻塞就是在等待结果的时候,当前线程会被挂起,在得到结果之后返回;非阻塞则是没有得到结果之前也不会阻塞当前线程
例子: 阻塞的情况就是卖咖啡的时候什么都不能做,只能挂起;非阻塞的时候就是在等咖啡的时候可以玩着手机,过一会检查咖啡是否好了

nginx 跨域

  1. 首先我们要知道什么是跨域,跨域指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制
  2. 举例:A页面想获取B页面资源,如果a,b页面的协议、端口、域名、子域名不同,所进行的所有访问请求都是跨域的,而浏览器一般为了安全都限制跨域请求,也就是不允许跨域请求资源。注意:跨域其实是浏览器的限制!
  3. 如何解决跨域请求?
  4. Access-Control-Allow-Origin: http://api.bob.com
  5. Access-Control-Allow-Credentials: true
  6. Access-Control-Expose-Headers: FooBar
  7. Content-Type: text/html; charset=utf-8
  8. ####
  9. Access-Control-Allow-Origin
  10. 这里大概意思是允许跨域的域名,可以写一个域名,或者写* 代表所有
  11. Access-Control-Allow-Credentials
  12. 表示是否允许发送Cookie,默认情况下,Cookie不包括在CORS请求之中。设置为true,表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器,如果服务器不需要浏览器发送的Cookie,删除该字段即可
  13. Access-Control-Expose-Headers
  14. 示请求头的字段 动态获取

nginx header

nginx location 优先级

  • ~ 表示执行一个正则匹配,区分大小写
  • ~* 表示执行一个正则匹配,不区分大小写
  • ^~ 表示普通字符匹配。使用前缀匹配,如果匹配,则不再匹配其他location
  • = 进行普通字符精准匹配
  • @ 它定义一个命名的location,使用在内部定向时,

location优先级说明
在nginx的location和匹配中的location的顺序没有太大关系。正location表达式的类型有关。相同类型的表达式,字符串长的会优先匹配

  1. 等号类型(=)的优先级最高,一旦匹配成功,则不再查找其他匹配项
  2. ^~ 类型表达式,一旦匹配成功,则不再查找其他匹配项
  3. 正则表达式(~ ~*)的优先级次之,如果多个location的正则能匹配的话,则使用正则表达式最长的那个

例子

  1. https://www.cnblogs.com/cheyunhua/p/8576701.html

nginx rewrite重写

rewrite功能就是,使用nginx提供的全局变量或者自己设置的变量,结合正则表达式和标志位实现url重写及重定向。rewrite只能放在server location if中,并且只能对域名后面的除去参数外的字符串起作用

header 知道多少类型

nginx 常用的模块(名称及解释)

nginx 反向代理和正向代理区别

请陈述stub_status和sub_filter指令的作用是什么?

请列举Nginx和Apache 之间的不同点。

请解释Nginx服务器上的Master和Worker进程分别是什么?

Shell 问题

以下Shell 参数含义
2
0
@
$!


二、Kubernetes 相关问题

4层和7层区别

哪四层,哪七层

请解释Nginx如何处理HTTP请求。

Docker 中cmd add copy区别
ansible 模块 comand shell各种模块

ldap du dc 什么意思

redis 主从原理,集群

git 创建分支

那您先 启动状态获取所有参数

maven打包命令

jenkins 邮件模块

elk 各种分片

ZABBIX 如何自定义监控

sls 收集日志原理

docker 网络模式

iptables 禁止访问某个iP

iptables 四表五连

jenkins 权限用户怎么设置

jenkins都用来做什么

tomcat 优化

oss 阿里云存储跨域

gitlab cicd

oss 设置buket

mysql 主从原理及配置

mysql复制不一致,卡主

mysql存储引擎

docker 存储引擎

docker和kvm区别

lvs几种模式

top命令

网站访问慢排查步骤

网络A服务器-网络B服务器经过多少跳

cpu使用率不高,服务器反应慢 (快速处理)

k8s master上有哪些服务

k8s node有哪些

k8s 如何做高可用

k8s pod生命周期

  1. 首先Pod被创建,紧接着Pod被调度到Node进行部署运行,一旦被分配到Node后,就不会离开这个Node,直到它被删除,生命周期完结
  2. Pod声明周期有以下几个阶段
  3. Pending: Pod已经被创建,但是一个或者多个容器还未创建,包括Pod调度阶段,以及容器镜像的下载过程
  4. Running: Pod已经被调度到Node,所有容器已经创建,并且至少有一个容器在运行或者正在容器
  5. Succeeded: Pod中所有所有容器正常退出
  6. Failed: Pod中所有容器退出,至少有一个容器是一次退出的

k8s pod 重启策略

  1. Pod重启策略指的是当Pod中的容器停止退出后,重启容器的策略。
  2. 重启策略是通过Pod定义中的.spec.restartPolicy进行设置,支持一下三种策略
  3. always 当容器停止退出后,总是从启容器,默认策略
  4. OnFailure 当容器终止异常退出(非0时),才重启容器
  5. Never 当容器终止退出时,从不重启容器
  6. PodRunning状态,包含一个容器,容器正常退出;
  7. 如果重启策略是Always,那么会重启容器,Pod保持running状态
  8. 如果重启策略是OnFailurePod进入Successded阶段
  9. 如果重启策略是neverPod进入Succeeded
  10. PodRunning阶段,含有一个容器,容器异常退出;
  11. 如果重启策略是Always,那么会重启容器,Pod保持Running阶段
  12. 如果重启策略是OnFailurePod保持Running阶段
  13. 如果重启策略是NeverPod进入Failed阶段
  14. PodRunning阶段,含有2个容器,其中一个异常退出;
  15. 如果重启策略是Always,那么会重启容器,Pod保持running阶段
  16. 如果重启策略是OnFailurePod保持running阶段
  17. 如果重启策略是NeverPod保持running阶段
  18. PodRunning阶段,含有2个容器,2个容器都异常退出;
  19. 如果重启策略是Always,那么会重启容器,Pod保持running阶段
  20. 如果重启策略是OnFailurePod保持running阶段
  21. 如果重启策略是NeverPod进入Failed阶段

k8s 生命周期和回调函数

  1. kubernetes提供了回调函数,在容器的生命周期的特定阶段执行调用,比如容器在停止前系统执行某项操作,就可以注册相应的钩子函数。目前提供的生命周期回调函数如下
  2. PostStart 在容器创建成功后调用该回调函数
  3. PreStop 在容器被终止前调用该回调函数

kube-proxy原理

prometheus组件

k8s 创建pod启动整个流程

k8s 滚动更新策略
https://www.cnblogs.com/linuxk/p/9578211.html

k8s资源回收策略

k8s flannel 通信原理

  1. 数据从源容器中出发后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡上,flannel服务监听在网卡的另一端。 Flannel通过ETCD服务维护了一张节点间的路由表,详细记录了各节点的子网网段
  2. 源主机的flanneld服务奖原本的数据包内容UDP封装后根据自己的路由表传递给目的节点的flannel服务,数据到达以后被解包,然后直接进入目的节点的flannel0虚拟网卡,然后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通信一样,私用docker0路由到达目的容器
  3. docker需要配置bip的一个配置引用

k8s核心概念

  1. Pod
  2. Pod是若干相关容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命名空间、IP地址和端口,相互之间能通过localhost来发现和通信。另外这些容器可以共享一块存储卷空间。在kubernetes中创建、调度和管理的最小单位是Pod,而不是容器,Pod通过提供更高层次的抽象,提供了更加灵活的部署和管理模式
  3. RC
  4. Replication Controller用来管理控制Pod副本(Replica,或者称为实例)Replication Controller确保任何时候kubernetes集群中有指定数量的Pod副本在运行。如果少于指定数量的副本,Replication Controller会启动新的Pod副本,反之会杀死多余的副本以保证数量不变,另外Replication Controller是弹性伸缩、滚动升级的实现核心
  5. Service
  6. Service 是真实应用服务的抽象,定义了Pod的逻辑集合和访问Pod集合的策略。Service将代理Pod对外表现为一个单一访问接口,外部不需要了解后端Pod如何运行,并且提供了一套简化的服务代理和发现机制。
  7. Label
  8. Label 是用于区分PodServiceReplication ControllerKey/Value对,实际上,kubernetes中的任意API对象都可以通过label进行标示。每个API对象可以有多个label,但是每个labelKEY只能对应一个valuelabelservicereplication Controller运行的基础,他们通过label来关系Pod,相比于强绑定模型,这是一种非常友好的耦合关系
  9. Node
  10. kubernetes属于主从分布式集群架构,kubernetes NODE (简称为Node,早期版本叫做Minion)运行并管理容器。 Node操作Kubernetes的操作单元,用来分配PodPod最终运行在Node上,node可以认为是Pod的宿主机
  11. kube-apiserver
  12. 作为kubernetes 系统的入口,其封装了核心对象的增删改查操作,以REST API接口方式提供给外部客户和内部组件调用,它维护的REST对象将持久化到ETCD
  13. kube-scheduler
  14. 负责集群的资源调度,为新建的Pod分配机器
  15. kube-controller-manager
  16. 负责执行各个控制器,目前已经实现很多控制器来保证kubernetes的正常运行(主要是rc node service deployment等)
  17. kubelet
  18. 负责管控容器,kubelet会从kubernetes API Server接收Pod的创建请求,启动和停止容器,监控容器运行状态并汇报给kubernetes API Server
  19. Kubernetes Proxy
  20. 负责为Pod创建代理服务,kubernetes proxy会从kubernetes API Server获取所有的service,并根据Service信息创建代理服务,实现ServicePod的请求和路由转发,从而实现Kubernetes层级的虚拟转发网络

Pod与容器

  1. Docker中,容器是最小处理单位,增删改查的对象是容器,容器是一种虚拟化技术,容器之间是隔离的,隔离是基于Linux Namespace实现的, Pod包含一个或多个相关容器,Pod可以认为是容器的一种延伸扩展,一个Pod也是隔离体,而Pod包含的一组容器又是共享的(当前共享的Linux Namespace包含PIDNetworkIPC(消息队列和内存)和UTS(主机与域名))。Pod中的容器可以访问相同的数据卷来实现文件系统的共享,所以kubernetes中国的数据卷是Pod级别的,而不是容器级别的
  2. 这样的设计有以下好处
  3. 1.透明性:将Pod内的容器向基础设施可见,底层系统能向容器提供如进程管理和资源监控等服务,这样能给用户带来极大便利
  4. 2.解绑软件的依赖: 这样但个容器可以独立的重建和重新部署,可以实现独立容器的实时更新
  5. 3.易用性: 用户不需要运行自己的进程管理器,也不需要负责信号量和退出码的传递等。
  6. 4.高效性: 因为底层设备负责更多的管理,容器因而能更轻量化

K8s 拉取镜像策略

  1. always 每次都下载最新的镜像
  2. never 只使用本地镜像,从不下载
  3. ifNotPresent 只有当本地没有的时候才下载镜像

自定义检查Pod

  1. Liveness Probe 用于容器的自定义健康检查,如果Liveness Probe检查失败,kubernetes将杀死容器,然后根据Pod的重启策略来决定是否重启容器
  2. Readiness Probe 用于容器的自定义准备状况检查,如果Readiness Probe检查失败,Kubernetes将会把Pod从服务代理的分发后端移除,即不会分发请求给该Pod
  3. Probe支持以下三种健康检查
  4. ExecAction 在容器中执行检查的命令,当命令执行成功(返回码为0)则检查成功
  5. TCPSocketAction 对于容器中的指定TCP端口进行检查,当TCP端口被占用,检查成功
  6. HTTPGetAction 发生一个HTTP请求,当返回码介于200-400之间,则检查成功

kube-proxy 通信原理

docker

k8s coredns解析流程,如何访问外网

nginx获取k8s的真实ip


个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索