运维开发面试题(1)

 

问:在linux系统上有一列数字的文本,怎么求和?

awk '{ sum += $1 } END { print "Sum:", sum }' numbers.txt

问:做过linux内核优化或者升级没?(没答出来)

linux内核优化主要在/etc/sysctl.conf调整TCP/IP堆栈参数、文件系统缓存大小、内存管理和调度器行为等,或者在/etc/modprobe.d/blacklist.conf文件中禁用不需要的内核模块可以减少内核的内存占用和加载时间。

做升级前使用uname -r 查看当前正在运行的内核版本,yum list kernel查找可用的内核版,在使用yum install kernel-<VERSION>,安装后使用grub2-mkconfig -o /boot/grub2/grub.cfg更新GRUB引导程序,设置默认启动的内核版本,grub2-set-default <VERSION>,重启系统以使更改生效reboot。

问:使用python做过哪些开发?

问:python的xrange 和 range 的异同?

同:

两者都用于生成一系列的整数。
语法相同,都是range(start, stop, step)或xrange(start, stop, step)

异:

range函数会生成一个列表,占用大量内存来存储整个序列。而xrange是一个生成器,它不会一次性生成整个序列,而是在迭代过程中逐个生成元素,因此内存使用更加高效。

range返回一个列表,而xrange返回一个xrange对象。

问:列表 A 和 B,使用 Python 快速获取 A 和 B 中的共有元素。

首先将两个列表转成set集合,然后用&连接两个集合,例如set_A&set_B,输出的结果就是两个集合的交集。

问:在mysql的性能优化有哪些?以配置文件为例

内存设置:

innodb_buffer_pool_size:将此值设置为足够大的值,以便InnoDB存储引擎可以在内存中缓存更多的数据和索引。
query_cache_size:启用查询缓存,并将其大小设置为适当的值,以缓存经常执行的查询结果。
tmp_table_size 和 max_heap_table_size:调整这两个值,以便在执行排序或临时表操作时使用的内存可以容纳数据。
索引优化:

使用适当的索引来加速查询。分析查询和表结构,并根据需要创建和优化索引。
避免创建过多的索引,因为这可能会降低写入性能和增加存储开销。
查询优化:

优化查询语句,确保它们使用合适的索引,避免全表扫描。
避免在查询中使用SELECT *,而是只选择需要的列。
使用合适的JOIN类型和JOIN条件,避免跨表扫描。
日志设置:

适当配置慢查询日志(slow_query_log),以便记录执行时间较长的查询,以便识别和优化慢查询。
配置错误日志(log_error)和查询日志(general_log)根据需要进行跟踪和故障排除。
连接和线程设置:

调整max_connections参数来限制并发连接数,以避免资源竞争和过多的连接。
优化thread_cache_size参数来管理线程缓存,以提高线程的重用性能。

问:mysql的数据备份,你们平时怎么做的?

mysql备份原生自带的mysqldump,是一个逻辑备份工具,它通过导出数据库的SQL语句来创建备份文件。这意味着备份文件包含了数据库的表结构和数据,可以跨不同的MySQL服务器进行迁移和恢复。但是,由于备份文件是文本格式,执行备份文件中的SQL语句来重新创建表结构和导入数据,在导入大型数据库时可能比较慢。mysqldump在备份期间会锁定表,确保备份的一致性。

mysqldump -u 用户名 -p 密码 数据库名 > 备份文件名.sql

 后面我们更倾向与使用XtraBackup,是一个物理备份工具,它备份的是MySQL数据文件和日志文件的副本,XtraBackup使用InnoDB的快照机制,可以在备份期间进行热备份而无需锁定表,由于是物理备份,它备份和还原的速度通常比mysqldump更快,生成的备份文件通常比mysqldump生成的备份文件小很多。

 innobackupex --user=<用户名> --password=<密码> --databases="<数据库1> <数据库2>" <备份目录>

 问:在jenkins中,传统项目构建和k8s项目构建,这两种的整体大致流程分别是什么样的?

传统项目构建流程:
源代码管理:Jenkins从版本控制系统(如Git、SVN等)中检出或更新源代码。

构建触发:根据配置的触发器(如定时构建、代码推送触发等)启动构建过程。

构建环境准备:Jenkins配置构建环境,包括设置环境变量、选择构建工具(如Maven、Gradle、npm等)。

编译和构建:执行构建脚本或命令,编译源代码,生成可执行文件或部署包。

单元测试:运行单元测试,确保代码质量。

静态代码分析:进行代码质量检查,如使用SonarQube等工具。

打包和归档:将构建产物打包,并在Jenkins中归档,以便后续部署使用。

部署:将构建产物部署到目标环境,可能是传统的物理机、虚拟机或云服务器。

集成测试:在部署后进行集成测试,确保应用在目标环境中正常工作。

通知和报告:构建完成后,通过邮件或其他方式通知相关人员,并提供构建报告。

Kubernetes项目构建流程:
源代码管理:与传统项目相同,Jenkins从版本控制系统中检出或更新源代码。

构建触发:根据配置的触发器启动构建过程。

构建环境准备:Jenkins配置构建环境,可能包括Kubernetes集群的配置信息。

编译和构建:执行构建脚本或命令,编译源代码,生成容器镜像。

单元测试:运行单元测试。

静态代码分析:进行代码质量检查。

容器镜像构建:使用Docker或其他容器技术构建应用的容器镜像。

镜像推送:将构建好的容器镜像推送到镜像仓库(如Docker Hub、Harbor、Google Container Registry等)。

部署配置更新:更新Kubernetes的部署配置文件,指向新推送的镜像。

Kubernetes部署:使用kubectl apply或其他工具将更新后的部署配置应用到Kubernetes集群。

集成测试:在Kubernetes集群中进行集成测试。

通知和报告:构建完成后,通知相关人员,并提供构建报告。

 问:ansible的playbook怎么用?

Ansible的Playbook是用于定义自动化任务的YAML文件,允许对一组主机执行一系列操作。使用Playbook的基本步骤包括:

1.创建Inventory文件:定义需要管理的目标主机和组。
2.编写Playbook:使用YAML格式编写任务,指定在哪些主机上执行哪些动作。
3.运行Playbook:使用ansible-playbook命令,指定Inventory文件和Playbook文件来执行任务。

 问:k8s的探针了解吗,有哪几种?

Liveness Probe: Liveness探针用于判断容器是否还在运行。如果Liveness探针失败,Kubernetes会杀死容器,然后根据容器的重启策略决定是否重启容器。
Readiness Probe: Readiness探针用于判断容器是否准备好开始接受请求。如果Readiness探针失败,那么Kubernetes会从服务的负载均衡器中剔除该Pod,直至探针再次成功。
Startup Probe: Startup探针用于判断应用程序在容器中是否已经启动。这对于启动时间较长的应用很有用。如果提供了Startup探针,那么直到这个探针成功之前,其他的探针都会被忽略。

问:你们平时使用ELK吗,或者EFK,怎么使用的?

Elasticsearch是一个全文搜索数据库,在k8s中通过StatefulSet来创建一个Elasticsearch集群。

Fluentd是一个开源的日志收集器,用于收集、过滤、缓冲和转发日志到各种存储后端,如Elasticsearch。在k8s中,可以通过DaemonSet在每个节点上部署Fluentd,以便从节点上收集日志并转发到Elasticsearch。

Kibana是一个开源的分析和可视化平台,用于搜索、查看并与存储在Elasticsearch中的数据进行交互。在Kubernetes中,可以通过部署Kibana的Deployment来创建一个Kibana实例。

主要的工作量来自与Fluentd的配置部分,定义如何从Pod中收集日志,包括日志的格式、过滤规则。我们的需求是从Pod的标准输出(stdout/stderr)作为入口收集日志,通常位于node节点的/var/log/containers/目录中的文件,这些日志文件都是以特定的格式命名的,包括Pod名称、命名空间、容器名称和容器ID等信息。

问:如果现在访问nginx代理的地址报404错误,但是upsteam或者location没有错误的问题,最直接的方式怎么排查?

检查Nginx的错误日志文件(通常位于/var/log/nginx/error.log),看是否有关于404错误的详细信息。
检查Nginx的访问日志文件(通常位于/var/log/nginx/access.log),看是否有请求被Nginx接收,但返回了404状态码。

posted @ 2024-05-17 16:13  瘦阿瘦  阅读(27)  评论(0编辑  收藏  举报