运维工程师面试问答

最近面试被问到的几个问题,于是整理收集如下:

自动化相关

k8s中master和nodes分别有哪些组件,及作用。

    Master节点上面主要由四个模块组成:etcd、api server、controller manager、scheduler

    api server:顾名思义提供API,通过rest接口实现各自的功能。如controller通过api来实时监控各个资源状态。

    etcd:提供一个键值数据库,用于保存集群网络配置和资源对象的状态信息。数据变更都是通过api server进行。
    系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是:
    1)网络插件flannel,其它网络插件也需要用到etcd存储网络的配置信息;
    2)kubernetes本身,包括各种资源对象的状态和元信息配置。

    scheduler:监听新建pod副本信息,并通过调度算法为该pod选择一个最合适的Node节点。会检索到所有符合该pod要求的Node节点,执行pod调度逻辑。调度成功之后,会将pod信息绑定到目标节点上,同时将信息写入到etcd中。一旦绑定,就由Node上的kubelet接手pod的接下来的生命周期管理。如果把scheduler看成一个黑匣子,那么它的输入是pod和由多个Node组成的列表,输出是pod和一个Node的绑定,即将这个pod部署到这个Node上。Kubernetes目前提供了调度算法,但是同样也保留了接口,用户可以根据自己的需求定义自己的调度算法。

    controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等。每个资源一般都对应有一个控制器,这些controller通过api server实时监控各个资源的状态,controller manager就是负责管理这些控制器的。当有资源因为故障导致状态变化,controller就会尝试将系统由“现有状态”恢复到“期待状态”,保证其下每一个controller所对应的资源始终处于期望状态。比如我们通过api server创建一个pod,当这个pod创建成功后,api server的任务就算完成了。而后面保证pod的状态始终和我们预期的一样的重任就由controller manager去保证了。
    controller manager 包括运行管理控制器(kube-controller-manager)和云管理控制器(cloud-controller-manager)

----
    Node节点,包括kubelet、kube-proxy、container runtime(docker)

    kubelet 会监视已分配给节点的pod,负责pod的生命周期管理,同时与Master密切协作,维护和管理该Node上面的所有容器,实现集群管理的基本功能。即Node节点通过kubelet与master组件交互,可以理解为kubelet是Master在每个Node节点上面的agent。本质上,它负责使Pod的运行状态与期望的状态一致。

    kube-proxy 是实现service的通信与负载均衡机制的重要组件,将到service的请求转发到后端的pod上。

    Container runtime:容器运行环境,目前Kubernetes支持docker和rkt两种容器。
----
    参考链接:
    https://blog.csdn.net/weixin_38645718/article/details/85931795
    https://www.cnblogs.com/linuxk/p/10291178.html

k8s有哪些组件做网络通信、网络如何管理、使用哪种网络连接模式

    官方推荐组件flannel,由它统一分配pod的ip
    会在网卡上创建一个虚拟网卡flannel0,桥接

pod中容器间如何通信

    首先k8s里面容器是存在于pod里面的,所以容器之间通讯,一般分为三种类型:

    1. pod内部容器之间
    这种情况下容器通讯比较简单,因为k8s pod内部容器是共享网络空间的,所以容器直接可以使用localhost访问其他容器。
    k8s在启动容器的时候会先启动一个pause容器,这个容器就是实现这个功能的。

    2. pod 与 pod 之间
    这种类型又可以分为两种情况:

        1) 两个pod在一台主机上面
        针对第一种情况,就比较简单了,就是docker默认的docker网桥互连容器。

        2) 两个pod分布在不同主机之上
        第二种情况需要更为复杂的网络模型了,k8s官方推荐的是使用flannel组建一个大二层扁平网络,pod的ip分配由flannel统一分配,通讯过程也是走flannel的网桥。

    每个node上面都会创建一个flannel0虚拟网卡,用于跨node之间通讯。所以也可以直接使用pod id进行通讯。

    **跨节点通讯时,发送端数据会从docker0路由到flannel0虚拟网卡,接收端数据会从flannel0路由到docker0,这是因为flannel会添加一个路由**

    3. pod 访问service服务
    这里涉及到k8s里面一个重要的概念service。它是一个服务的抽象,通过label(k8s会根据service和pod直接的关系创建endpoint,可以通过kubectl get ep查看)关联到后端的pod容器。

    Service分配的ip叫cluster ip是一个虚拟ip(相对固定,除非删除service),这个ip只能在k8s集群内部使用,如果service需要对外提供,只能使用Nodeport方式映射到主机上,使用主机的ip和端口对外提供服务。(另外还可以使用LoadBalance方式,但这种方式是在gce这样的云环境里面使用的 )。

    节点上面有个kube-proxy进程,这个进程从master apiserver获取信息,感知service和endpoint的创建,然后做两个事:

        1. 为每个service 在集群中每个节点上面创建一个随机端口,任何该端口上面的连接会代理到相应的pod

        2. 集群中每个节点安装iptables规则,用于clusterip + port路由到上一步定义的随机端口上面,所以集群中每个node上面都有service的转发规则:
----
    参考链接:
    https://www.cnblogs.com/linyouyi/p/11557771.html
    https://blog.csdn.net/nangonghen/article/details/102024843
    https://blog.csdn.net/weixin_29115985/article/details/78963125

有状态服务和无状态服务的区别

    无状态服务

    1. 是指该服务运行的实例不会在本地存储需要持久化的数据,并且多个实例对于同一个请求响应的结果是完全一致的。

    2. 多个实例可以共享相同的持久化数据。例如:nginx实例,tomcat实例等

    3. 相关的k8s资源有:ReplicaSet、ReplicationController、Deployment等,由于是无状态服务,所以这些控制器创建的pod序号都是随机值。并且在缩容的时候并不会明确缩容某一个pod,而是随机的,因为所有实例得到的返回值都是一样,所以缩容任何一个pod都可以。

    有状态服务

    1. 有状态服务可以说是 需要数据存储功能的服务、或者指多线程类型的服务,队列等。(mysql数据库、kafka、zookeeper等)

    2. 每个实例都需要有自己独立的持久化存储,并且在k8s中是通过申明模板来进行定义。持久卷申明模板在创建pod之前创建,绑定到pod中,模板可以定义多个。

    参考链接:
    https://www.jianshu.com/p/dd47a3cde390

应用运维相关

nginx如何调用php,通过什么协议

    cgi协议。
    简单的用户请求流程:
    用户访问域名->域名进行DNS解析->请求到对应IP服务器和端口->nginx监听到对应端口的请求->nginx对url进行location匹配->执行匹配location下的规则->nginx转发请求给php->php-fpm的master进程监听到nginx请求->master进程将请求分配给其中一个闲置的worker进程->worker进程执行请求->worker进程返回执行结果给nginx->nginx返回结果给用户

    参考链接:
    https://blog.csdn.net/u010433704/article/details/93050655
    https://segmentfault.com/a/1190000018265488

mysql主从同步原理

    MySQL主从复制涉及到三个线程。主服务器(I/O dump thread),从服务器有(I/O thread和SQL thread)。
    主库把接收的SQL请求记录到自己binlog日志中,从库的I/O thread去请求主库的binlog日志,并将binlog日志写到中继日志(relay log)中,然后SQL线程负责读取relay log中的内容,最终保证主从数据的一致性。
    主库通过I/O dump thread给从库I/O thread传送binlog日志。

    相关参考:
    https://www.cnblogs.com/fengff/p/11011702.html

服务器负载高排查思路

    1.1 定位高负载进程
    1.2 定位具体的异常业务
    1.3 定位异常线程及具体代码行

    相关参考:
    https://www.cnblogs.com/linuxprobe-sarah/p/10013150.html

java进程负载高如何处理

    如果不是服务器性能问题,就需要排查程序方面。
    1.日志追踪。
    2.pstack跟踪进程栈。方便排查进程问题,比如发现一个服务一直处于work状态(如假死/死循环/死锁),使用这个命令能定位问题所在。

    参考链接:
    https://www.cnblogs.com/kongzhongqijing/articles/7685699.html

TCP/UDP的原理和区别

    TCP的优点:可靠,稳定。TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。
    TCP的缺点:慢,效率低,占用系统资源高,易被攻击TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。

    UDP的优点:快,比TCP稍安全UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……
    UDP的缺点:不可靠,不稳定。因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。基于上面的优缺点,那么:什么时候应该使用TCP:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。在日常生活中,常见使用TCP协议的应用如下:浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输………… 什么时候应该使用UDP:当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP ……
    有些应用场景对可靠性要求不高会用到UPD,比如长视频,要求速率

    相关参考:
    https://www.cnblogs.com/williamjie/p/9390164.html

http中5xx有哪些常见错误

    502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

    504 Gateway Timeout:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

    500 Internal Server Error:服务器遭遇异常阻止了当前请求的执行,一般为程序错误。

    403 Forbidden:服务器接受请求,但是被拒绝处理。

    404 Not Found:服务器未找到任何匹配Request-URI的资源。

原文地址:https://www.cnblogs.com/jiba/p/12578637.html

时间: 2024-10-27 23:00:45

运维工程师面试问答的相关文章

Linux运维工程师面试-部分题库(答案版)

最近两个月有意跳槽,看到了一篇Linux运维工程师面试-部分题,就试着做了一下,感觉对Linux基础部分挺有帮助,在这里整理一份参考答案给大家,错误之处还望多多指出. 博文原地址 http://wgkgood.blog.51cto.com/1192594/1627684 一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 答: 常见的Linux发现版本有Redhat.Centos.Debian.Ubuntu.Suse 最擅长R

Linux运维工程师面试-部分题库

Linux运维工程师面试-部分题库(免费分享) 一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块? 2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解? 3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G) 4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤. 5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下. 6.用虚拟机安装了一

云计算面试题,浅谈Linux云计算运维工程师面试技巧

?前段时间,在准备面试的时搜到的一套Linux运维工程师面试题,感觉比较全面,也一直看到小伙伴寻找讨论Linux方面的面试题,特此整理一篇文章,希望可以帮助到更多的小伙伴在面试过程中更加顺利,早日找到自己满意的工作.对于所有Linux云计算运维的应聘者来说,面试是最考验面试者的环节,且很有压力的部分.今天我们就聊一聊面试技巧. null 面试,是面试官与应聘者双向沟通的环节.目的是通过互相交流,促进双方的了解.从而达成雇佣意向的过程.应聘者们往往是费尽心思,绞尽脑汁,施展浑身解数,运用各种手段,

Linux运维工程师面试

一.Linux操作系统知识 1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?   2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解?   3.企业中Linux服务器系统分区标准是什么?(硬盘为300G,内存16G)   4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤.   5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下.   6.用虚拟机安装了一台Linux系统,突然想克隆

小猿圈之Linux运维工程师面试(内含答案)

1.某一天误操作,执行了rm -rf * ,会有哪些情况发生?请举例. - 如果当前目录为"/tmp" ,那么这个目录下的东西会全部删除(默认不包含隐藏文件) - 如果当前目录为"/",那么系统上的数据将会丢失,且无法启动,系统崩溃(谨慎使用这个命令) 2.什么叫CDN? - 即内容分发网络 - 其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到 最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度 3.统计ip访问情

美团Linux运维工程师面试真题

1.LINUX系统软件安装和卸载的常见方法 答: A.rpm包卸载:rpm -e XXX.rpm   (如果想忽略依赖,可加上–nodeps) B.yum remove xxx.rpm  这种方法非常不建议使用,卸载过程会将待卸载的软件包所依赖的软件包一并卸载掉,很容易造成系统缺少某些包而崩溃等问题 C.源码包卸载:cd命令进入编译后的软件目录,即安装时的目录,执行make uninstall命令即可:或者直接删除安装目录 2.Windows和LINUX常用的远程连接工具有那些 答: 命令远程连

【51CTO学院三周年】-感谢恩师马哥让我成为Linux运维工程师

[51CTO学院三周年]学习.提升.感恩 --感谢51cto学院和恩师马哥让我成为Linux运维工程师   今天是学院三周年学院给了我很大帮助今天我也来写一下我的真实感悟心得.我是12年在网上无意搜索发现有个很好的IT互动网站叫51cto,当时记得还有个叫CSDN,但是对比了下感受还是51cto的氛围和功能更ok点,慢慢也喜欢上这个风格了.没事儿就看看新闻看看博文.收获也挺大的. 在学院成立,我就开始看一些视频课程学习,看过韩老师的windows.一次偶然机会看到马哥讲linux的课程,马哥讲的

Linux运维工程师的一天是如何度过的

下面先简单介绍一下个人这几年从事运维工作以来得出的感悟与体会 1.操作系统状况检查与告警登录系统或者通过监控报警平台查看系统运转的负载 磁盘空间状态,内存使用状态,有无报错日记, 查看报警记录等. 2.操作系统故障处理   根据检查与监控的情况,对发现的系统故障进行处理,对己知故障进行预防方案部署,在日常运维中,还会有许多其他部分提出的问题返遗,比如客户经验会反应某某地区用户访问网站速度慢 像这种情况要结合南北线路,以及用户的网络环境等综合因素进行处理. 3.服务器性能分析和优化 通过监控平台

公开课:如何成为一名高级系统运维工程师(架构师)?

    如何成为一名高级系统运维工程师(架构师)? --老男孩教育赵班长 内容简介: 突破瓶颈,从普通系统运维成长为高级系统工程师.架构师,如何提升,需要掌握哪些技能和知识,公开课上为您解惑. 分享形式: 通过知识体系.技能图谱.生产实践案例.架构解惑.当面问答等多种方式进行. 主要内容:             14:00--15:30:所有内容全部有生产案例架构图送上. l 大型Web架构演变过程 l Web缓存在架构中的应用 l 运维与自动化运维知识体系 l 基于OpenStack构建企业