今天群里有位老哥面试20K+的SRE顺手拍了3张面试题,和大家分享一下.第三张实在太模糊就没放了.
第三张实在拍的太模糊
1. 选择题
没发
2. 填空题(共20题,每题2分,总分40分,请在括号里填入最合适的答案)
- 某文件的权限为drw-r–r–用数值形式表示该权限,则该8进制数位为(644),该文件的属性为(目录)
- 在超级用户下显示linux系统中正在运行的全部进程,应使用的命令和参数是(ps -aux)
- 在linux系统中,查看可用内存的命令是(free -m,top)
- 在linux系统中,可以通过(parted -s /dev/sdb mkpart primary 0% 100%&&mkfs.xfs /dev/sdb1 )命令格式化一块8T的新硬盘
- 在linux 系统中,可以通过(lsof -i :8080)命今查看8080端口号被哪个进程号占用
- 说明下列 Raid技术至少需要几块硬盘
Raid0 2快
Raid1 2块
Raid5 3块
Raid6 4块
Raid10 4块 Raid01一样 - 如果nginxpid的目录在/usr/nginx/logs/nginx.pid 下,那么平滑重启的命令为(kill -HUP
cat usr/nginx/logs/nginx.pid
) - 保存当前磁盘分区的分区表的命令是(sfdisk -d /dev/sdb /etc/sdbpar.bak)
- 统计出nginx的accesslog中访问量最多的5个IP,可以通过命令(awk ‘{print $1}’ /var/log/nginx/accesslog.log |sort|uniq -c|sort -nr|head -5)
- 已知一主机的IP地址是203.123.1.135,子网掩码是255255255.192。求该子网可分配的IP地址(203.123.1.129-203.123.1.190)
- docker容器的底层技术包括namespace和(Cgroup)
- 通过docker启动一个nginx容器,并限制其CPU和内存资源上限的命令是( docker run -d --name nginx -p 80:80 --cpus 2 --memory 2 nginx)
- 可以通过(docker inspect nginx)命令来查看docker容器的详细信息
- K8S的pod类型可以分为普通pod和(静态Pod)
- 将nginx的deployment扩容副本数为3的命令是(kubectl scale --replicas=3 deployment nginx)
- 生成一个deployment yam文件保存到/opt/deploy.yaml 的命令是(kubectl get deployment nginx -o wide > /opt/deploy.yaml )
- 如果想让K8S的master节点可以被调度任务,可以通过(kubectl uncordon master)来实现
- 在K8S中,可以通过(kubectl describe pod nginx或者 kubectl get pods nginx -o wide )命今查看pod的具体属性信息
- 请列出任意一个PHP的加速器(eAccelerator,XCache,APC)
- 在LNMP环境中,502、504错误状态码的含义分别是
500 内部服务错误,可能是权限问题造成
501 服务器不具备完成请求的功能
502 Bad Gateway错误
503 服务器目前无法使用.超载或停机
504 Bad Gateway timeout 网关超时
505 http协议版本不支持
3. 简答题(共6题,每题5分,总分30分)
3.1 在Linux的LVM分区格式下,请简述给根分区磁盘扩容的步骤?
这个分3种
第一种方法:
growpart /dev/vda 1
resize2fs /dev/vda1
第二种方法:
partpeobe /dev/sda
resize2fs /dev/vda1
第三种方法:
fdisk /dev/sdb # n p 1 1 回车 回车 t 8e w
pvcreate /dev/sdb1
vgextend datavg /dev/sdb1
lvextend -r -L +100%free /dev/mapper/datavg-lv01
3.2 请简述OSI七层网络模型有哪些层及各自的含义?
物理层:底层数据传输,比如网线、网卡标准
数据链路层:定义数据的基本格式,如何传输,如何标识。比如网卡MAC地址
网络层:定义IP编码,定义路由功能,比如不同设备的数据转发
传输层:端到端传输数据的基本功能,比如TCP、UDP
会话层:控制应用程序之间会话能力,比如不同软件数据分发给不停软件
表示层:数据格式标识,基本压缩加密功能。
应用层:各种应用软件,包括 Web 应用。
3.3 pod资源控制器类型有哪些?
Deployments
Deployment为Pod和ReplicaSet提供声明式的更新能力。
ReplicaSet
ReplicaSet的目的是维护一组在任何时候都处于运行状态的Pod副本的稳定集合。因此,它通常用来保证给定数量的、完全相同的Pod的可用性。
StatefulSets
和Deployment类似,StatefulSet管理基于相同容器规约的一组Pod。但和Deployment不同的是,StatefulSet为它们的每个Pod维护了一个有粘性的ID。这些Pod是基于相同的规约来创建的,但是不能相互替换:无论怎么调度,每个Pod都有一个永久不变的ID。
DaemonSet
DaemonSet确保全部(或者某些)节点上运行一个Pod的副本。当有节点加入集群时,也会为他们新增一个Pod。当有节点从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。
Jobs
Job会创建一个或者多个Pod,并将继续重试Pod的执行,直到指定数量的Pod成功终止。随着Pod成功结束,Job跟踪记录成功完成的Pod个数。当数量达到指定的成功个数阈值时,任务(即Job)结束。删除Job的操作会清除所创建的全部Pod。挂起Job的操作会删除Job的所有活跃Pod,直到Job被再次恢复执行。
Automatic Clean-up for Finished Jobs
TTL-after-finished控制器提供了一种TTL机制来限制已完成执行的资源对象的生命周期。TTL控制器目前只处理Job。
CronJob
一个CronJob对象就像crontab(crontable)文件中的一行。它用Cron格式进行编写,并周期性地在给定的调度时间执行Job。
ReplicationController
ReplicationController确保在任何时候都有特定数量的Pod副本处于运行状态。换句话说,ReplicationController确保一个Pod或一组同类的Pod总是可用的。
3.4 k8s的扩容步骤(这部分没拍到)
3.4.1 扩Master
- 分发ca,kubernetes,aggregator-proxy证书
- 分发master服务的service文件
- 分发二进制文件
- 分发配置文件
- 启动kube-apiserver
- 启动kube-controller-manager
- 启动kube-proxy
- 启动kube-scheduler
- 启动kubelet
3.4.2 扩node节点
- 分发二进制文件
- 分发配置文件
- 分发service文件
- 启动kubelet
- 启动kube-proxy
3.5 php编译步骤(这部分没拍到)
- 安装必要的依赖包
- 下载解压安装包
- 编译安装
mkdir /app/php -p
./configure -prefix=/app/php
make -j 4
make install